page object模式

PageObject模式将面向过程转变为面向对象,提高代码复用率和可维护性。此模式通过将测试对象及其操作封装在Page对象中,使得UI变化时只需在一个地方修改代码。

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

PageObject 模式是什么?它如何起到到减少冗余代码,提升测试效率的目的?

先想象下这个例子:
在自动化测试过程中,特别是基于UI的功能自动化,我们经常要进行查找元素,操作元素的操作,一般来说,代码是如下这个样子的:

self.driver.find_element_by_xpath("//option[@value='10']")

如果这个元素会被多个method用到,那么当元素变化时(例如XPATH变了), 我们就不得不更新每个引用到这个元素的代码,非常麻烦。


有没有好的办法解决这个问题呢? PageObject 应运而生

Page Objects

Within your web app’s UI there are areas that your tests interact with. A Page Object simply models these as objects within the test code. This reduces the amount of duplicated code and means that if the UI changes, the fix need only be applied in one place.

简单来说就是:

PageObject是一种程序设计模式,将面向过程转变为面向对象(页面对象),将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。可以使代码复用,降低维护成本,提高程序可读性和编写效率。
PageObject可以将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),提高用例的可维护性。

记住,PageObject是一种程序设计模式,是一种思想。

PageObject 的好处是:

Creating reusable code that can be shared across multiple test cases
Reducing the amount of duplicated code
If the user interface changes, the fix needs changes in only one place

PageObject应该怎么使用呢?基于测试实践,我们一般这样应用:

  1. 把每个要测试的对象封装在一个page内, 这个page里包含这个对象可能的所有操作。

  2. 创建一个BasePage,这个BasePage包含所有待测page都能用到的公用方法,这个BasePage对应的类应该是个抽象类。

  3. 测试脚本自由引用page及page里的方法。


python里有个第三方库page-objects, 基于python实现了PageObject模式,并且封装了很多有用的方法。我们以它为例,举例如下(例子基于我的Github项目):

abstract_base_page.py

解释如下:
1.abc 模块用来创建抽象类。
2.page_objects模块用来实现pageobject模式。
语法请自行google。

baidu.py


解释如下:

1.page_objects封装了Selenium的一些方法,我们不需要通过driver.find_element_by_xpath()等来查找元素,转而用
pageelement(locator)这样的方式来定位, page-objects支持的locator如下:

keyword ArgDescription
id_Element ID attribute
cssCSS Selector
nameElement name attribute
class_nameElement class name
tag_nameElement HTML tag name
link_text AnchorElement text content
partial_link_textAnchor Element partial text content
xpathXPath

2.每个子类,都应该实现抽象类里的抽象方法, 在本例中是is_target_page().

test.py(测试用例)

测试脚本,可以任何组合各个page的任意方法。

由此可以见, 使用了page_objects 后, 测试对象, 测试方法, 测试脚本全部解耦, 测试对象的任何改变,只需要更改相应的page对应的类就好了。

最后附上:
Page_objects的pypi地址

https://pypi.python.org/pypi/page-objects/1.1.0

Page_objects文档

https://page-objects.readthedocs.io/en/latest/index.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值