网站建设需要什么语言,外国人学做中国菜的网站,产品推广渠道有哪些方式,网站建设公司写在前面#xff1a;
Page Object模式#xff0c;目的是将元素定位和元素操作分层#xff0c;只接触测试内容#xff0c;不写基础内容#xff0c;便于后续对自动化测试用例体系的维护#xff0c;这是中心思想#xff0c;也是核心。
那么我们继续将简洁延续#xff0c…写在前面
Page Object模式目的是将元素定位和元素操作分层只接触测试内容不写基础内容便于后续对自动化测试用例体系的维护这是中心思想也是核心。
那么我们继续将简洁延续这里沿用Java的Page Factory模式思想旨在减少代码冗余简单易用具有高度的可扩展能力。
所以这里我们使用基于Python 的Page Factory设计模式
Page Factory的使用
作用
支持以注解的方式定义元素支持同一个元素多种定位方式支持动态的定位方式
1、安装
pip install pythium
2、使用 Page Factory 模式将页面元素分离
我们将继续沿用Page Object模式的风格这里我又加了一层自己暂时定义叫基础层现在就变成了四层基础层、对象层、操作层、业务层。
下面将举例说明Page Factory设计模式以登陆功能为例来做进一步讲解。
3、基础层
用来存放driver及初始化使用示例代码如下
# -*- coding: utf-8 -*-Time 2022/12/5 21:07
Auth 软件测试君
File BasePage.py
IDE PyCharm
MottoABC(Always Be Coding)from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManagerfrom pagefactory.LoginPage import LoginPageclass BasePage(object):用来存放driver及初始化使用def __init__(self) - None:初始化driverself.driver webdriver.Chrome(ChromeDriverManager().install())self.driver.maximize_window()def open_url(self, url: str) - None:打开项目首页:param url::return:self.driver.get(url)def quit_browser(self) - None:退出浏览器:return:self.driver.quit()def get_LoginPage(self) - LoginPage:# 返回登陆实体return LoginPage(self.driver)4、对象层
用于存放页面元素定位和控件操作示例代码如下
# -*- coding: utf-8 -*-Time 2022/12/5 21:13
Auth 软件测试君
File LoginPage.py
IDE PyCharm
MottoABC(Always Be Coding)import timefrom pythium import find_by, Page
from selenium.webdriver.remote.webelement import WebElementclass LoginPage(Page):用于存放页面元素定位和控件操作# 定位用户名元素find_by(cssinput[typetext])def username_el(self) - WebElement: ...# 定位密码元素find_by(cssinput[typepassword])def password_el(self) - WebElement: ...# 定位登陆元素find_by(namesubmit)def loginbtn_el(self) - WebElement: ...# 定位错误信息元素find_by(id_alert)def errormsg_el(self) - WebElement: ...# 输入用户名def send_username(self, username: str):输入用户名:param self::param username::return:self.username_el().clear()self.username_el().send_keys(username)# 输入密码def send_password(self, password: str):输入密码:param self::param password::return:self.password_el().clear()self.password_el().send_keys(password)# 点击登陆按钮def click_loginbtn(self):点击登陆按钮:return:self.loginbtn_el().click()# 获取错误信息def get_erorMsg(self) - str:获取错误信息:return:time.sleep(1)return self.errormsg_el().text5、操作层
则是一些封装好的功能用例模块也可以理解成我们写测试用例的步骤示例代码如下
# -*- coding: utf-8 -*-Time 2022/12/5 21:33
Auth 软件测试君
File LoginAction.py
IDE PyCharm
MottoABC(Always Be Coding)from pagefactory.BasePage import BasePageclass LoginAction(object):登陆操作def login(self, username: str, password: str):登陆操作:param username: 用户名:param password: 密码:return:basepage BasePage()basepage.open_url(http://localhost:8080/login)basepage.get_LoginPage().send_username(username)basepage.get_LoginPage().send_password(password)basepage.get_LoginPage().click_loginbtn()msg basepage.get_LoginPage().get_erorMsg()basepage.quit_browser()return msg6、业务层
则是我们真正的测试用例的操作部分示例代码如下
# -*- coding: utf-8 -*-Time 2022/12/5 21:40
Auth 软件测试君
File TestLogin.py
IDE PyCharm
MottoABC(Always Be Coding)import unittestfrom pagefactory.LoginAction import LoginActionclass TestLogin(unittest.TestCase):测试登陆功能def test_login(self):msg LoginAction().login(1, 1)self.assertEquals(msg, 用户名或密码错误)从以上代码看如果页面元素发生变化我们在对应类里修改对应元素即可而操作和业务层流程类及用例都不用改如果仅是业务流程更改只需要维护业务层流程类业务脚本其他几个类都不用改从而做到了很好的将页面、元素、脚本进行了分离。
至此关于Page Factory的使用分享完毕有兴趣的同学可以自行拓展。
写在最后
又有很久没有更文了因为一直都是996工作制很难有时间去写文章这里还请各位粉丝朋友理解不过我会努力持续更文。
我是六哥如果觉得文章对您有帮助请继续关注我原创不易不求打赏只求转发