首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Page Objects模式源码分析,看源码不用卖萌

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

作者头像
苦叶子
发布2019-09-05 16:58:35
4850
发布2019-09-05 16:58:35
举报
文章被收录于专栏:开源优测开源优测

先看个定义:

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

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

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

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

> pip install page_objects

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

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

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

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

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

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

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

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

实现Page Object模式核心思想

__init__函数参数说明:

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

root_uri - 目标uri,可以不传入

get函数,用于访问目标uri

uri - 目标uri

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

PageElement类源码实现

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

- __init__ 用于初始化

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

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

- __get__

- __set__

MultiPageElement源码

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

PageElement调用的是: find_element

MultiPageElement调用的是: find_elements

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源优测 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档