您的位置:首页 > 移动开发 > Objective-C

page object模式

2017-06-19 15:35 246 查看
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应该怎么使用呢?基于测试实践,我们一般这样应用:

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

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

测试脚本自由引用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: