大家好,欢迎来到IT知识分享网。
一、PO模式简介
PO(Page Object Model)设计模式是selenium自动化测试中最佳的设计模式之一,主要体现在对界面交互细节的封装,让代码结构清晰,增加复⽤性。
从上图可以看出PO分层模型,PO分为以下三层:
表现层:页面上可见的元素,都属于表现层。
操作层:对页面可见元素的操作。
业务层:上面2层的组合,并联合到一起形成某个业务动作,在页面中对若干元素操作后所实现的操作。
二、PO模式设计准则
1.使用公共方法来代表页面提供的服务;
2.不要暴露页面的内部细节;
3.PO本身通常不应进行判断或断言,判断和断言是测试的一部分,应始终在测试的代码内,而不是在PO中;
4.方法返回其他的页面对象,进行页面的关联;
5.PO不一定需要代表整个页面,定义所需要实现的业务的部分即可;
6.相同的操作带来的不同结果可以封装成不同的方法。
三、简单PO模式实现
以登录百度为例,项目结构如下图所示:
1.首先进行浏览器的封装。
comm_driver.py 示例代码
from selenium import webdriver
class Comm_Driver:
def getdriver(self):
# 创建driver对象
self.driver=webdriver.Chrome()
# 最大化窗口
self.driver.maximize_window()
# 隐式等待
self.driver.implicitly_wait(10)
# 返回driver对象
return self.driver
2.基类封装
功能:
- 打开浏览器
- 输入网址
- 定位元素
- 点击元素
- 输入文本
- 获取元素文本
basePage.py 示例代码
from common.comm_driver import Comm_Driver
class BasePage(Comm_Driver):
def __init__(self):
self.driver=Comm_Driver().getdriver()
# 打开网址
def get_url(self,url):
self.driver.get(url)
# 定位元素
def get_ele(self,locator):
return self.driver.find_element(*locator)
# 点击元素
def click_ele(self,locator):
self.get_ele(locator).click()
# 输入文本
def input_text(self,locator,text,append=True):
if append:
self.get_ele(locator).clear()
self.get_ele(locator).send_keys(text)
else:
self.get_ele(locator).send_keys(text)
# 获取元素的文本
def get_ele_text(self,locator):
return self.get_ele(locator).text
3.登录页封装
功能:
- 打开百度
- 打开登录弹窗
- 登录系统
loginPage.py 示例代码
from common.basePage import BasePage
from common.elements import *
class LoginPage(BasePage):
# 打开百度
def open_page(self):
self.get_url('https://www.baidu.com')
# 点击右上角登录,打开登录弹窗
def click_loginbutton(self):
self.click_ele(login_button)
# 登录
def login_baidu(self,phonenum,password):
self.input_text(phone_input,phonenum)
self.input_text(password_input,password)
self.click_ele(login_button_two)
4.定位器
login_button=('id','s-top-loginbtn')
phone_input=('name','userName')
password_input=('id','TANGRAM__PSP_11__password')
login_button_two=('id','TANGRAM__PSP_11__submit')
5.测试用例
test_login.py 示例代码
from pageObjects.loginPage import LoginPage
class Test_Login():
def test_login(self):
test_loginpage=LoginPage()
test_loginpage.open_page()
test_loginpage.click_loginbutton()
test_loginpage.login_baidu('你的手机号','你的密码')
assert test_loginpage.get_ele_text(['xpath',"//*[text()='安全验证']"])=='安全验证'
6.测试结果
四、总结
首先抽象封装成一个BasePage类,这个基类拥有一些指向Webdriver实例的属性,然后每一个Page继承基类BasePage,可以通过driver管理每一个Page中的元素,而且Page将这些操作封装为一个个的方法。有元素变化,我们只需要维护每一个Page,测试步骤变化,只需要维护TestCase即可。
此文只是简单举个例子,后续持续优化,实现数据分离,封装日志与截图,生成Allure报告等。
有错误欢迎指出~~
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23543.html