登录关键字封装
接上篇:Python Selenium 关键字驱动
上篇输入和点击是单个关键字,但是这样的话一个场景下来步骤太长了,有些常见的操作,如写到登录,就要写好几个关键字:
序号 | 测试步骤描述 | 关键字 |
1 | 打开浏览器 | openBrowser |
2 | 访问测试网址 | loadUrl |
3 | 窗口最大化 | maximize_browser |
4 | 等待126邮箱主页面加载完 | sleep |
5 | 断言当前活动页面中包含 “126网易免费邮一你的专业 | assert_string_in_page_source |
6 | 显示等待frame登录框的出 现.然后切换进入该frame框 | waitFrameToBeAvailableAndSwitchToIt |
7 | 输入登录用户名 | inputValue |
8 | 输入登录密码 | inputValue |
9 | 单击登录按钮 | clickBtn |
这样一个登录就写了9行!可以将登录单独封装一个关键字,抛开打开浏览器访问网址等步骤来说一个登录要定位的至少包含3个元素:用户输入、密码输入、登录按钮,之前封装的关键字都是一个“关键字”,一个“定位方式”,一个“定位值” ,实际Python eval()函数执行是并不知道你这里写的是什么,因此没有必要要一一对应,也可以一个关键字:多个定位方式。多个定制值,多个输入值,如下:
login | xpath,xpath,xpath | //input[@name='email'],//input[@name ='password'],//a[@id='dologin'] | test,abc123 |
这样跟之前的关键字有点不一样,拿输入关键字举例之前的关键字代码是这样的:
# 输入框中输入内容
def inputValue(by, locator, value):
try:
element = getElement(driver, by, locator)
# element.click()
element.send_keys(value)
except Exception as e:
raise e
现在就是同一个表格里多了几个值,引起使用分隔符进行分割然后拿到对应的元素定位方法和对应的定位置,操作值即可:
def login(by, locator, value):
by = by.split(',')
locator = locator.split(',')
value = value.split(',')
user_by, password_by, loginbtn_by = by[0], by[1], by[2]
user_locator, password_loctor, loginbtn_loctor = locator[0], locator[1], locator[2]
user_vlalue, pwd_value = value[0], value[1]
try:
# 用户名输入框定位
user_element = getElement(driver, user_by, user_locator)
user_element.send_keys(user_vlalue)
# 密码输入框定位
pwd_element = getElement(driver, password_by, password_loctor)
pwd_element.send_keys(pwd_value)
# 登录按钮
loginbtn_element = getElement(driver, loginbtn_by, loginbtn_loctor)
loginbtn_element.click()
# element.click()
except Exception as e:
raise e
我这边是用英文逗号分割的,当然也可以用其他符号但是不要和定位表达式里的值冲突就行了