-
locator分层
隔离元素定位表达式和浏览器操作,当元素定位表达式发生变化时,只需要修改元素定位表达式。
方式1:直接放在po页面对象,作为类属性。
分层前代码:
from selenium.webdriver.common.by import By
from pages.basepage import Page
from setting import config
class LoginPage(Page):
url = config.host + '/User/login.html'
def load(self):
"""加载页面"""
return self.browser.get(self.url)
def login(self, username, password):
"""登录"""
locator_username = (By.NAME, 'account')
locator_password = (By.NAME, 'pass')
locator_signin_btn = (By.CSS_SELECTOR, '.btn-btn')
self.fill(locator_username, locator_password)
self.fill(locator_password, password)
self.click(locator_signin_btn)
def get_error_tips(self):
"""获取错误信息"""
return self.browser.find_element(By.CSS_SELECTOR, '.error-tips').text
分层后代码:
from selenium.webdriver.common.by import By
from pages.basepage import Page
from setting import config
class LoginPage(Page):
url = config.host + '/User/login.html'
# 存储所有的登录页面的元素定位表达式
# 用户名
locator_username = (By.NAME, 'account')
# 密码
locator_password = (By.NAME, 'pass')
# 登录按钮
locator_signin_btn = (By.CSS_SELECTOR, '.btn-btn')
# 错误信息提示框定位
locator_error_tips = (By.CSS_SELECTOR, '.error-tips')
def load(self):
"""加载页面"""
return self.browser.get(self.url)
def login(self, username, password):
"""登录"""
self.fill(self.locator_username, username)
self.fill(self.locator_password, password)
self.click(self.locator_signin_btn)
def get_error_tips(self):
"""获取错误信息"""
return self.browser.find_element(*self.locator_error_tips).text
方式2:创建一个独立的文件来管理元素定位表达式(使用前先导入模块)。
from selenium.webdriver.common.by import By
class HomePageLocator:
"""存放homepage中所有元素定位表达式"""
# 头像定位
locator_avatar = (By.CSS_SELECTOR, '.avatar')
class LoginPageLocator:
"""存放loginpage中所有元素定位表达式"""
# 存储所有的登录页面的元素定位表达式
# 用户名
locator_username = (By.NAME, 'account')
# 密码
locator_password = (By.NAME, 'pass')
# 登录按钮
locator_signin_btn = (By.CSS_SELECTOR, '.btn-btn')
# 错误信息提示框定位
locator_error_tips = (By.CSS_SELECTOR, '.error-tips')
-
签到功能复杂用例编写
以课堂派签到为例:
步骤:签到涉及到两种角色,由老师或者管理员发起考勤,生成签到码;学生获得签到码登录进行签到。需要打开两个浏览器进行相关操作。
老师或者管理员端:
1、需要打开老师的浏览器
2、登录老师账号
3、在首页点击课堂名称“python九歌”进入教室,link text =python九歌
4、在教室界面点击"考勤"按钮,xpath=//span[text()='考勤']/..
5、在教室界面切换到iframe,定位iframe,id=layui-layer-content1
6、在iframe界面定位“新建考勤”,xpath=//a[contains(text(),'新建考勤')],点击
7、在教室页面,同一个iframe,定位“数字考勤”,xpath=//span[text='数字考勤']
8、在教室页面,同一个iframe,定位“开始考勤”,link text ='开始考勤'
9、在教室页面,获取签到码:定位4个span元素,driver.find_elements(xpath,"//div[@class='number-box']/span"),取出四个元素的text文本,列表转化成字符串,"".join([])
10、学生签到成功后,添加强制等待,在教室页面获取签到人数的文本,css=.ing ,assert 断言人数=="1"
11、结束签到 link text='结束'
12、确认结束签到 ,xpath=/html/body/div[3]/div/div[3]/span/button[2]/span
学生端:
1、打开一个学生角色的浏览器
2、登录学生账号
3、在首页点击课堂名称“python九歌”进入教室,link text =python九歌
4、在教室界面点击“立即签到”,link text=’立即签到‘
5、在签到输入框输入签到码,定位输入框,id=phoneVer_modalAuthInput
web/ui自动化测试的特征:
特征1:效率慢
特征2:不稳定(元素定位不稳定;前端界面经常发生变化)