PythonUI By/登录未授权/测试用例实现流程
一、By的类属性的方式的好处
-
能够减少错误
-
能够提高可读性
from selenium.webdriver.common.by import By # login_btn_locator = {"by": "class name", "value": "btn-special"} login_btn_locator = {"by": By.CLASS_NAME, "value": "btn-special"} # username_locator = {"by": "name", "value": "phone"} username_locator = {"by": By.NAME, "value": "phone"}
"""登录页面""" from selenium.webdriver.common.by import By from middware.pages.index import IndexPage from middware.handler import HandlerMiddle class LoginPage: """登录""" URL =HandlerMiddle.yaml_data["host"] + "/Index/login.html" #登录按钮,元祖形式 #login_btn_locator = ("name","btn-special") #登录按钮 login_btn_locator = {"by":By.CLASS_NAME,"value":"btn-special"} #用户名 username_locator = {"by":By.NAME,"value":"phone"} #密码 password_locator = {"by":By.NAME,"value":"password"} #登陆失败的错误信息 error_msg_locator = {"by":By.CLASS_NAME,"value":"form-error-info"} #初始化driver def __init__(self,driver): self.driver = driver def get(self): """访问页面""" self.driver.get(self.URL) return self def login_fail(self,username,password): # 元素定位+元素操作,输入用户名和密码,点击登录进行提交 self.enter_username(username) self.enter_password(password) #self.driver.find_element(*self.login_btn_locator).click() self.driver.find_element(**self.login_btn_locator).click()#点击登录按钮 return self def login_success(self,username,password): # 元素定位+元素操作,输入用户名和密码,点击登录进行提交 self.enter_username(username) self.enter_password(password) self.driver.find_element(**self.login_btn_locator).click()#点击登录按钮 return IndexPage(self.driver) def enter_username(self,username): "输入用户名" self.driver.find_element(**self.username_locator).send_keys(username) return self def enter_password(self,password): "输入密码" self.driver.find_element(**self.password_locator).send_keys(password) return self def get_error_info(self): "获取登录失败的错误信息" return self.driver.find_element(**self.error_msg_locator).text
二、登录未授权(密码错误,提示信息一闪而过)
场景:在账号/密码输入错误的时候,有个弹框,弹出来几秒就消失了,无法进行元素定位
解决:弹框弹出的时候,暂停JS操作,让弹框暂停不动。
找到F12 resource ==》pause 暂停js执行
toast弹窗的定位元素: 断点调试
-
在F12的模式下,切换到tab:sources ,
-
然后执行该情况的用例,执行后点击pause script execution,
-
暂停后进行元素定位
注意事项:
-
通过隐式等待是可以等待元素被加载
-
但是元素被加载并不表示里面的动态文办内容能被获取到
解决: 1、通过显示等待visible 2、text文件定位,也需要用显示等待的 3、强制等待把握好时间
三、web自动化测试用例实现流程
1.准备前置后置,conftest
2.编写测试用例,测试用例的函数注释,docstring
如:登录未授权 测试步骤:
-
1、登录页面输入用户名
-
2、登录页面输入密码
-
3 、登录页面点击登录
-
4、登录页面获取未授权信息
注意:如果有要用到的方法还没有定义,就到登录页面的对象中封装这个方法,然后再回来调用 写明页面是因为方便封装方法的时候能找到在哪个页面
3.根据测试步骤封装页面行为
4.调用页面行为,获取实际结果
5.断言
四、basepage
页面行为分为两种:
-
--某个页面特定的行为,定位登录按钮这个元素
-
--每个页面通用的行为,如定位一个元素
每个页面的通用方法放在一个公共页面类中
每个页面都能直接调用,不会因为项目不同发生改变的浏览器通用操作的封装
放在一个类中,类就是basepage
-
--basepage是每个页面类的父类
-
--basepage思想===》类继承