Page Objects模式源码分析,看源码不用卖萌_python

先看个定义:

        Page Object模式是使用Selenium的广大同行最为公认的一种设计模式。在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织。

前几天发了篇文告别那个教你Page Objects教得懵逼的人  然后就有人直接微信催我:直接分析下源码呗。

好吧,直接上文,对Page Objects的源码进行一通简单的分析说明,免得路上被碰到了打我一顿就不划算了,总感觉有人要害朕!!!

先看下如何安装Page Objects,命令如下:

> pip install page_objects

Page Objects模式源码分析,看源码不用卖萌_编程语言_02

再看下Page Objects的github地址:https:///eeaston/page-objects

Page Objects模式源码分析,看源码不用卖萌_python_03

看着好像很多文件是不是很复杂的样子?其实一点都不复杂,请忽略所有的文件,只看page_objects/__init__.py这个文件就够了,因为其他的都是不需要的,核心代码就这一个文件。

Page Objects模式源码分析,看源码不用卖萌_编程语言_04

没错,核心代码就在__init__.py里,一共定义了三个类实现了整个Page Object的思想。

PageObject类,实现了Page Object模式的核心封装

PageElement类,实现了Page元素的封装实现

MultiPageElement类,类PageElement类,但可以返回多个结果,可以理解为PageElement的进一步升华。

下面从头开始看源码,进行一一的大体说明。

导入异常和定位依赖,重定义了定位,避免与selenium webdriver的产生冲突

Page Objects模式源码分析,看源码不用卖萌_python_05

实现Page Object模式核心思想

Page Objects模式源码分析,看源码不用卖萌_python_06

__init__函数参数说明:

webdriver - 传入初始化了的webdriver实例对象, 必须传入

root_uri - 目标uri,可以不传入

get函数,用于访问目标uri

uri - 目标uri

这个源码很简单了,不需要过多的说明。

PageElement类源码实现

Page Objects模式源码分析,看源码不用卖萌_设计模式_07

这个稍微多点,我把源码进行了折叠,方便查阅看代码,PageElement类中定义了四个函数:

- __init__  用于初始化

Page Objects模式源码分析,看源码不用卖萌_javascript_08

- find 用于元素定位,并返回定位结果

Page Objects模式源码分析,看源码不用卖萌_设计模式_09

大家必须知道的前后双下划线的,为内部成员,这两个大家可以不用理解

- __get__ 

- __set__ 

Page Objects模式源码分析,看源码不用卖萌_编程语言_10

MultiPageElement源码

Page Objects模式源码分析,看源码不用卖萌_编程语言_11

这个就不解释了,参照PageElement类的说明,请注意与PageElement的区别,在find函数中:

PageElement调用的是: find_element

MultiPageElement调用的是: find_elements

一个没有s ,一个有s,这就是最大的区别

有s的代表可以定位N个元素

最后看一个官方基础实例:

Page Objects模式源码分析,看源码不用卖萌_python_12

官方文档:https://page-objects.readthedocs.io/en/latest/

Page Objects模式源码分析,看源码不用卖萌_编程语言_13

Page Objects模式源码分析,看源码不用卖萌_java_14

在公众号里回复一下关键字获取对应的系列文章

物联网

appium

大数据测试

RobotFramework

Python

自动驾驶

jmeter

selenium

jenkins

接口测试