应用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 #设置断言,看是否相等,如果相等,则说明登录成功!
![](https://img2018.cnblogs.com/blog/1535876/201811/1535876-20181128191518174-137870606.png)
运行features文件:
注意:在cmd命令行中,通过cd命令,进入含有features文件夹的路径即可
![](https://img2018.cnblogs.com/blog/1535876/201811/1535876-20181128192034193-544597655.png)
然后键入:behave命令即可开始运行
![](https://img2018.cnblogs.com/blog/1535876/201811/1535876-20181128191802755-1094280035.png)