• 应用behave行为驱动框架实现QQ邮箱的登录


    为了更好地定位元素,首先要仔细分析某个系统登录时,他的登录页面到底有几个iframe元素,当有多个时,切登录框的iframe是独立的话,需要先把frame切换到登录的iframe上,这样才能对其上面的元素进行一系列操作!!

    如图所示是QQ邮箱的登录页面

    分析HTML对应的dom树结构是什么样的,是否此登录框是在另一个独立的iframe上

    从上面的QQ邮箱登录页面的HTML代码截图可看出,登录框是独立的在id=login_frame上,如果想要切换登录方式为【用户名登录】,则需要先通过switch_to.frame('login_frame')先切换frame,然后找到【账号密码登录】元素并进行【点击】操作,则可成功切换到【用户名密码登录】,继而找到用户名和密码输入框元素,并向其输入对应的值,找到【登录】元素,并点击,即可实现QQ邮箱的登录

    1、代码目录结构:

    注意:

    (1)behave行为驱动框架,对其目录结构有固定的格式:必须含有一个名为features的dictionary,在这个目录下,又有environment

    .py  & xxx.feature文件 & 名为steps的dictionary。

    (2)steps文件夹下的python文件的命名必须保持前缀和xxx.feature的名称保持一致,只有这样在运行features文件时才能匹配调用。

            如:QQ_Email.feature ,则其对应的steps文件中的python文件必须以:QQ_Email_XXXXX.py命名

    具体代码如下:

    注意:behave中的.feature是一种以自然语言来描述功能,以及测试场景的,可以按照自己的想要形容的句子来写,包括参数也可以写在其中;

    根据.feature文件,来写对应的python测试脚本代码:

    # -*-conding:utf-8 -*-
    from behave import *
    import time

    @Given('go to QQ_Email login page {url}')
    def Load_QQ_Emai_URL(context,url):
    context.driver.get(url)
    time.sleep(2)
    #在我们定位元素时,要观察对应的HTML页面代码,看其登录框是否是在另一个嵌入式的iframe中,如果是,则需要切换到指定iframe
    context.driver.switch_to.frame('login_frame') #切换到登录的iframe上
    time.sleep(2)
    context.driver.find_element_by_id('switcher_plogin').click()

    @When('login with correct usernmae {qq_email_username} and correct password {qq_email_pwd}')
    def Login_QQ_Email(context,qq_email_username,qq_email_pwd):
    #首先,默认的登录页面是扫码登录页面,此时我们需要切换到【用户名登录】
    context.driver.find_element_by_id('u').clear()
    context.driver.find_element_by_id('u').send_keys(qq_email_username)
    context.driver.find_element_by_id('p').clear()
    context.driver.find_element_by_id('p').send_keys(qq_email_pwd)
    context.driver.find_element_by_id('login_button').click()
    time.sleep(5)

    @Then('the page will jump to a admin page that conlude username {admin}')
    def Check_Result(context,admin):
    #成功登录页面后,其实此时已经有两个handler了,所以需要切换到已经登录成的页面上
    context.driver.switch_to_default_content() #退出frame
    context.driver.switch_to.frame('mainFrame')
    msg_ele = context.driver.find_element_by_id('today_alias')
    assert msg_ele.text == admin #设置断言,看是否相等,如果相等,则说明登录成功!


    运行features文件:
    注意:在cmd命令行中,通过cd命令,进入含有features文件夹的路径即可

    然后键入:behave命令即可开始运行
  • 相关阅读:
    Goland在go mod vendor模式下无法识别某些库
    国际教育游戏实证研究综述:2008年-2012年
    ES6之用let,const和用var来声明变量的区别
    集成spring boot + mysql + docker实战
    js sort方法根据数组中对象的某一个属性值进行排序(实用方法)
    小试牛刀之sort()排序的实现
    Redis字符串(STRING)中BIT相关命令
    koa,express,node 通用方法连接MySQL
    JavaScript预解释是一种毫无节操的机制
    [php]如何做到高并发优化
  • 原文地址:https://www.cnblogs.com/xqq-admin-content/p/10034073.html
Copyright © 2020-2023  润新知