Selenium之PO设计思想

本文深入探讨了PageObject设计模式的概念及其在软件测试中的应用。PageObject模式通过将测试用例与测试对象分离,提高了代码的可维护性和复用性,支持并行开发,降低了测试成本。文章详细介绍了PO模式的设计原则,包括创建basepage、封装测试对象和方法的使用与实现原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是PO
PageObject是一种测试设计模式
减少冗余的代码和对代码进行管理
分离测试步骤及测试对象
2.PO的好处
将测试用例及测试对象分离,提高用例可维护性
集中管理元素对象
代码可复用,降低成本
不同PO之间没有交叉,可以支持并行开发
2.PO的设计原则
2.1 总的原则
创建一个basepage,其basepage中包含所有待测试的page的公共方法
把每个要测试的对象封装在一个class类中
所有的pageobject继承basepage
2.2 方法的使用原则
公共方法代表UI功能,如元素定位方法封装,点击,设置内容等
2.3 方法的实现原则
不要暴露页面的内部元素给外面,可以使用私有属性及私有方法,即以下划线开头

    _username_field = (By.ID,'login_username')
    _password_field = (By.NAME,'login_passwd')

    def _locate_login_frame(self):
    return self.extend_find_element(LoginPageObject._login_frame)

PageObject中不要加assert断言,相关断言加在测试用例中

Page Object(PO)是一种常用的 Selenium 设计模式,它的基本思想是将每个页面看作是一个对象,通过封装页面的元素和操作,实现测试代码和页面的解耦,提高测试脚本的可读性、可维护性和可重用性。下面是一个简单的示例: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class LoginPage: def __init__(self, driver): self.driver = driver self.username = (By.NAME, "username") self.password = (By.NAME, "password") self.login_button = (By.XPATH, "//button[@type='submit']") def open(self, url): self.driver.get(url) def input_username(self, value): element = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located(self.username) ) element.clear() element.send_keys(value) def input_password(self, value): element = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located(self.password) ) element.clear() element.send_keys(value) def click_login_button(self): element = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable(self.login_button) ) element.click() class HomePage: def __init__(self, driver): self.driver = driver self.user_info = (By.XPATH, "//a[@class='user-info']") def get_user_info(self): element = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located(self.user_info) ) return element.text driver = webdriver.Chrome() login_page = LoginPage(driver) login_page.open("https://example.com/login") login_page.input_username("username") login_page.input_password("password") login_page.click_login_button() home_page = HomePage(driver) user_info = home_page.get_user_info() print(user_info) driver.quit() ``` 在这个示例中,我们将登录页面和首页分别封装为 LoginPage 和 HomePage 两个类,每个类都包含了页面的元素和操作。LoginPage 类包含了用户名输入框、密码输入框和登录按钮,而 HomePage 类包含了用户信息。测试脚本只需要创建相应的对象,然后调用对象的方法即可完成测试过程,而不需要关心页面元素和操作的细节。这样可以大大简化测试脚本,并提高代码的可读性和可维护性。 需要注意的是,Page Object 设计模式需要对页面的元素和操作进行封装,这需要一定的技巧和经验。在实践中,可以根据具体的项目需求和实际情况来进行设计和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

管火火火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值