poium测试库介绍
poium测试库前身为selenium-page-objects测试库,我在以前的文章中也有介绍过:这可能是最简单的Page Object库,项目的核心是基于Page Objects实现元素定位的封装。该项目由我个人在维护,目前在公司项目中已经得到的应用。
### poium的优势
Page Objects设计模式大家都懂,以往我们对Page层的封装大概是这样的。
class BasePage():
def __init__(self, driver):
self.dr =driver
def by_id(self, elem):
returnself.dr.find_element_by_id(elem)
class BaiduIndexPage(BasePage):
# 搜索框
@property
def search_input(self):
return self.by_id("kw")
# 搜索按钮
@property
def search_button(self):
return self.by_id("su")
大体上是每个操作元素封装为一个方法,这样并没什么不好的,只是不够简洁。而poium可以极大的简化元素的定义,甚至接近,配置文件。
from poium import Page, PageElement
class BaiduIndexPage(Page):
search_input= PageElement(css="#kw", describe="搜索框")
search_button= PageElement(css="#su", describe="搜索按钮")
几百个元素的也只不过几百行代码,使用也远比配置文件简单。将元素写到配置文件里,你还要考虑如何读取。
不管是前一种page层封装,还是使用poium封装在测试用例中的使用并无太大的差别。
from selenium import webdriver
import unittest
defbaiduTest(unittest.TestCase):
defsetUp(self):
self.driver =webdriver.Chrome()
self.base_url ="https://www.baidu.com"
def tearDown(self):
self.driver.quit()
def test_search(self):
page= BaiduIndexPage(driver)
page.get(self.base_url)
page.search_input.send_keys("poium")
page.search_button.click()
# .....
### JavaScript API
在我们项目中,时常要用到JavaScript操作,比如日期控件不好操作,那会通过JS的removeAttribute() 删除掉元素的某些属性,使他可以通过输入完成日期的“选择”。比如,有些元素用Selenium点击不了,但JS的click()却可以,再比如有些弹窗不是必现的,就必须使用异常捕捉,但JS可以更轻松的处理弹窗。
于是,我封装了一组由JS实现的API。
from poium import Page
class BaiduPage(Page):
# 元素定位只支持CSS语法
search_input ="#kw"
search_button ="#su"
def test_attribute(self):
"""
元素属性修改/获取/删除
:param browser: 浏览器驱动
"""
driver= webdriver.Chrome()
page =BaiduPage(browser)
page.get("https://www.baidu.com")
page.remove_attribute(page.search_input,"name")
page.set_attribute(page.search_input, "type", "password")
value =page.get_attribute(page.search_input, "type")
assert value =="password"
不过,JS实现的API中的只支持CSS定位。
强列推荐使用CSS定位,因为poium还可以将操作过的元素在自动化的运行过程中给你标记出来。
这样当程序运行失败需要截图时就比较清晰了,但是,这个功能还不完善。
### appium 支持
为什么不是不叫selenium-page-objects了?因为poium也支持appium了呀,使用之前的名字如何表达对appium的支持呢?
from appium import webdriver
from poium import Page,PageElement
class CalculatorPage(Page):
number_1 = PageElement(id_="com.android.calculator2:id/digit_1")
number_2 = PageElement(id_="com.android.calculator2:id/digit_2")
add = PageElement(id_="com.android.calculator2:id/op_add")
eq = PageElement(id_="com.android.calculator2:id/eq")
# APP定义运行环境
desired_caps = {
'deviceName': 'AndroidEmulator',
'automationName': 'appium',
'platformName': 'Android',
'platformVersion': '7.0',
'appPackage': 'com.android.calculator2',
'appActivity': '.Calculator',
}
driver =webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
page =CalculatorPage(driver)
page.number_1.click()
page.add.click()
page.number_2.click()
page.eq.click()
driver.quit()
在appium中的使用与selenium是一致的!当然,appium扩展了更多的定位方法。
- ios_uiautomation
- ios_predicate
- ios_class_chain
- android_uiautomator
- android_viewtag
- android_datamatcher
- accessibility_id
- image
- custom
poium同样支持这些定位,在appium中如何使用,那么这里也是一样的。
最后,poium并不会对你的现有自动化产生太多的影响,它只是对元素操作的封装,你可以在项目当中随意的选择是否要用它。
项目地址:poium
支持pip安装:
pip install poium
poium测试库介绍的更多相关文章
- Page Object设计模式(二)——poium测试库
一.简介 poium是一个基于Selenium/appium的Page Object测试库,最大的特点是简化了Page层元素的定义. 项目地址:https://github.com/SeldomQA/ ...
- poium测试库之JavaScript API封装原理
poium一直我在维护的一个开源项目,它的定位是以极简的方式在自动化项目中Page Objects设计模式.我在之前的文章中也有介绍. 本篇文章主要介绍一个JavaScript元素操作的封装原理. 为 ...
- Android开发中用到的框架、库介绍
Android开发中用到的框架介绍,主要记录一些比较生僻的不常用的框架,不断更新中...... 网路资源:http://www.kuqin.com/shuoit/20140907/341967.htm ...
- logminer使用测试库进行挖掘分析,10.2.0.5
上一篇测试是在dg环境进行测试挖掘,但是如果客户存在一个测试库,那样使用日志挖掘的影响性更小.本篇进行测试分析. 测试环境介绍: oracle linux 5.6,vmware虚拟机,安装两套单实例 ...
- Robot Framework(十四) 扩展RobotFramework框架——创建测试库
4.1创建测试库 Robot Framework的实际测试功能由测试库提供.有许多现有的库,其中一些甚至与核心框架捆绑在一起,但仍然经常需要创建新的库.这个任务并不复杂,因为正如本章所示,Robot ...
- Robot Framework(五)使用测试库
使用测试库 测试库包含那些最低级别的关键字,通常称为 库关键字,实际上与被测系统交互.所有测试用例总是使用某些库中的关键字,通常是通过更高级别的用户关键字.本节介绍如何使用测试库以及如何使用它们提供的 ...
- Python的标准库介绍与常用的第三方库
Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...
- RF框架自定义测试库开发
静态库 方法(methods)直接映射为关键字名称.关键字接受和方法相同的参数, 通过抛异常来 报告错误, 通过往标准输出里写入来写 log, 同时可以通过return 来返回结果. 创建步骤: ▲ ...
- Robot Framework(5)- 使用测试库
如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 前言 在RF 测 ...
随机推荐
- MUI开发大全
最近很久没有更新博客了,因为一直在学习前端h5 手机app的开发.曾经一度觉得自己css和js学得不错,进入到前端领域后才发现水很深~,写代码时HBuilder和VS混用,HBuilder的快捷键和代 ...
- Java面向对象概述及三大特征(封装,继承和多态)
一.面向对象思想 Java是面向对象的高级语言,对于Java语言来说,万事万物皆对象! 它的基本思想是使用类,对象,继承,封装,消息等基本概念进行程序设计.面向对象程序的最小单元是类,类代表了客观世界 ...
- Java基础重要知识点-反射
反射,如何把.java文件转化为.class文件 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信 ...
- mac 下常用命令备忘录
1.查看端口号 lsof -i: 2.杀死进程 kill 41321 3.查看文件夹文件 ls ls -l //看到文件及文件夹更多的内容 ls -a //隐藏的文件 ls -la //上面的组合 4 ...
- dmidecode的Python解析
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 解析dmidecode命令输出结果,返回JSON格式数据 测试服务器D ...
- count()聚合函数正确用法
count()聚合计算 count()是聚合函数,对于返回的结果集,一行行地判断,累计值加1,最后返回累计值,count(*).count(主键ID)和count(1)表示返回满足条件的结果集的总行数 ...
- 使用+Leapms查看线性规划的单纯形表,itsme命令
知识点 +Leapms的itsme命令 +Leapms的直接代数模型 查看线性规划直接代数模型的单纯形表和计算过程 +Leapms的直接代数模型 +Leapms的直接代数模型十分简单,只是使用了s.r ...
- 简述java接口和C++虚类的相同和不同之处
C++虚类相当于java中的抽象类,与接口的不同处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方法 ...
- [Javascript] encodeURIComponent()方法
在vue項目中使用vue-router通过url进行传值 encodeURIComponent encodeURIComponent() 函数可把字符串作为 URI 组件进行编码.encodeURIC ...
- List去重的实现
List<T> 当T为值类型的时候 去重比较简单,当T为引用类型时,一般根据业务需要,根据T的中几个属性来确定是否重复,从而去重. 查看System.Linq下的Enumerable存在一 ...