这可能是最简单的Page Object库
做过web自动化测试的同学,对Page object设计模式应该不陌生。
Page object库应该根据以下目标开发:
Page object应该易于使用
清晰的结构
PageObjects 对于页面对象
PageModules对于页面内容
只写测试,而不是基础。
在可能的情况下防止样板代码。
不需要自己管理浏览器。
在运行时选择浏览器,而不是在类级别。
不需要直接接触selenium。
这只是一种设计模式,只要遵循它有思想,不借助第三方库,我们一样可以实现这种设计模式。
创建baidu_page.py
文件,实现page层封装。
class BasePage:
"""
基础Page
"""
def __init__(self, driver):
self.driver = driver
def get(self, url):
self.driver.get(url)
def id_(self, id_):
return self.driver.find_element_by_id(id_)
def xpath(self, xpath):
return self.driver.find_element_by_xpath(xpath)
class BaiduPage(BasePage):
"""
百度首页Page
"""
@property
def search_box(self):
return self.id_("kw")
@property
def search_button(self):
return self.xpath("//*[@id='su']")
我们本质上要将元素的定位和元素的操作分开,page层用来定义元素的定位。
接下来创建,test_baidu.py
文件,用来实现自动化测试。
from selenium import webdriver
from baidu_page import BaiduPage
dr = webdriver.Chrome()
page = BaiduPage(dr)
page.get("https://www.baidu.com")
page.search_box.send_keys("page object")
page.search_button.click()
dr.close()
这里你将看不到元素的定位,分层的好处就是,当元素的定位发生改变时,只需要维护好page层即可,对于测试用例来说不需要关心元素怎么定位,只要专心设计好用例即可。
可是,Page层的编写并不太简便,本质上它的作用只是定义一些元素的定位。那我告诉你,只需要4行代码也可以实现上面baidu_page.py的功能,你会不会太简单了?
from page_objects import PageObject, PageElement
class BaiduPage(PageObject):
search_box = PageElement(css='#kw')
search_button = PageElement(id_='su')
是的,就这么简单,专注于元素的定位的编写,几乎没有多月的东西。而且还可以添加超时时间哦!
from page_objects import PageObject, PageElement
class BaiduPage(PageObject):
search_box = PageElement(css='#kw', time_out=2)
search_button = PageElement(id_='su', time_out=10)
这样再也不用写恶心的显式等待了,是不是很爽!?
定位一组元素也是非常简单的说。
from page_objects import PageElements
class BaiduPage(PageObject):
……
# 百度搜索结果
search_result = PageElements(xpath="//div/h3/a")
啥? 项目地址? 别急!别急!
GitHub地址:
https://github.com/defnngj/selenium_page_objects
原项目已经不再维护,我阅读了原项目代码,虽然只有100多行,但设计非常精妙。可惜缺少元素的等待,这将有助于定位元素的稳定性,所以,在原有项目的基础上增加的该功能。
下载安装:
$ python setup.py install
通过pip命令安装:
$ pip install -i https://testpypi.python.org/pypi selenium-page-objects
该项目已经更新为:poium
项目地址:https://github.com/defnngj/poium
这可能是最简单的Page Object库的更多相关文章
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- Selenium Page object Pattern usage
使用Selenium的framework,大家免不了要使用他的page object pattern来开发适合自己的framework,原因很简单,page object 可以将测试的对象抽象成一个个 ...
- 浅析selenium的page object模式
selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好 ...
- Page Object 模式编写UiAutomator脚本
在我们学习Page Object Model之前,我们先了解一下Page Object Model(以下简称POM). 为什么要POM 用UiAutomator启动UI自动化测试不是一件困难的任务.你 ...
- python+selenium自动化软件测试(第7章):Page Object模式
什么是Page ObjectModel模式Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页 ...
- Page Object设计模式实践
Page Object模式是使用Selenium的广大同行最为公认的一种设计模式.在设计测试时,把元素和方法按照页面抽象出来,分离成一定的对象,然后再进行组织. Page Object模式,创建一个对 ...
- Python+Selenium笔记(十三):Page Object设计模式
(一) 前言 简单的说就是分为2层,页面class 和测试class. 页面class:分为父类和子类(子类指具体的页面,每一个页面都创建一个类),父类中定义公有的属性和方法(操作). #对面向对象有 ...
- Selenium Page Object(PO)设计模式
Webdriver UI自动化测试火了好几年了,具体怎么设计自动化测试测试工程,组织测试用例完全凭借着自己的经验和习惯. 最近忽然听说了Page Object(简称PO)火了起来,也有面试的时候被问到 ...
- Page Object设计模式(项目整体结构)
1. 什么是框架 1.1 定义: 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件(类)及构件(类)实例间交互的方法. 1.2 为什么要搭建自动化测试框架 自动化测试的开发, ...
随机推荐
- 细说 JavaScript 七种数据类型
在 JavaScript 规范中,共定义了七种数据类型,分为 “基本类型” 和 “引用类型” 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined ...
- Taurus.MVC 2.3 开源发布:增强属性Require验证功能,自带WebAPI文档生成功能
背景: 上周,把 Taurus.MVC 在 Linux (CentOS7) 上部署任务完成后. 也不知怎么的,忽然就想给框架集成一下WebAPI文档功能,所以就动手了. 以为一天能搞完,结果,好几天过 ...
- iOS可视化动态绘制连通图(Swift版)
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- 一些关于StringAPI的题目
一:知识点 1.字符串"你好北京"中每个字符占用2个内存字节数.字符串底层由字符数组构成,每个字符占用内存2个字节. 2.重写toString 一般对象都有这个方法,目的是将对象按 ...
- synchronized的四种作用域以及不能被继承解析
synchronized是java中用于同步的关键字,其典型的作用域如下所示. 1 对象锁 @Slf4j public class SynchronizedExample1 { private fin ...
- 【Python语言】--Crontab结合Python脚本实现将日志每天写入到文件中
一.前述 实际工作中将Python脚本每天定时写入到日志文件中的使用场景还是蛮多的,有很多种方法可以实现这种效果.本文选择一种方式实现,特将实现细节做如下分享,不当之处烦请指正. 二.具体 1.pyt ...
- 微信小程序开发03-这是一个组件
编写组件 基本结构 接上文:微信小程序开发02-小程序基本介绍 我们今天先来实现这个弹出层: 之前这个组件是一个容器类组件,弹出层可设置载入的html结构,然后再设置各种事件即可,这种组件有一个特点: ...
- 值得一看的35个Redis常用问题总结
1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库 ...
- confd+etcd实现高可用自动发现
Confd是什么 Confd是一个轻量级的配置管理工具. 通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload. 对应的后端存储可以是etcd,redi ...
- java爬虫系列目录
1. java爬虫系列第一讲-爬虫入门(爬取动作片列表) 2. java爬虫系列第二讲-爬取最新动作电影<海王>迅雷下载地址 3. java爬虫系列第三讲-获取页面中绝对路径的各种方法 4 ...