一种实现页面对象模式的好方法。

stere的Python项目详细描述


PyPIPyPI - Python VersionGitHubUpdateshttps://travis-ci.org/jsfehler/stere.svg?branch=masterhttps://coveralls.io/repos/github/jsfehler/stere/badge.svg?branch=masterhttps://api.codacy.com/project/badge/Grade/e791ab09e14c4483943a26a2fd180577https://saucelabs.com/buildstatus/jsfehler 立方米是一个用于编写页面对象的库,用于在现有的自动化库上工作。

设计理念

页面对象模型的许多实现都侧重于消除测试中元素定位器的重复。 stere更进一步,为驱动自动化的代码提供了一个完整的包装器。

本项目的目标是:

1-消除测试函数中的实现代码。测试应该像行为描述一样阅读,而不是selenium命令。

2-减少在页面对象中手工编写助手方法的需要。共同行动应该有普遍的解决办法。

3-为编写可维护的页面对象提供一个简单的模式。

没有自动化能力直接构建到项目中;它完全依赖于与其他库的连接。 但是,使用SplinterAppium的实现是现成的。

基本用法

基本上,页面对象只是一个python类。

最小的stere page对象应该:

1-对页类进行子类划分

2-在初始化方法中声明字段和区域

例如,这里是维基百科的主页:

fromstereimportPagefromstere.areasimportArea,RepeatingAreafromstere.fieldsimportButton,Input,Link,Root,TextclassWikipediaHome(Page):def__init__(self):self.search_form=Area(query=Input('id','searchInput'),submit=Button('xpath','//*[@id="search-form"]/fieldset/button'))self.other_projects=RepeatingArea(root=Root('xpath','//*[@class="other-project"]'),title=Link('xpath','//*[@class="other-project-title"]'),tagline=Text('xpath','//*[@class="other-project-tagline"]'))

搜索表单表示为一个Area,其中有两个Fields

字段表示单个项,而区域表示字段的唯一集合。

查询和提交字段不必放置在区域内。 但是,这样做可以使用area的perform()方法。

其他产品的链接表示为RepeatingArea。 repeatingarea表示页面上字段的非唯一集合。 使用根参数作为非唯一选择器,repeatingarea将找到所述根的所有实例, 然后用所有其他字段构建适当数量的区域。

把其他产品作为一个单独的区域来声明也是有效的 一次一个,就像这样:

self.commons=Area(root=Root('xpath','//*[@class="other-project"][1]'),title=Link('xpath','//*[@class="other-project-title"]'),tagline=Text('xpath','//*[@class="other-project-tagline"]'))self.wikivoyage=Area(root=Root('xpath','//*[@class="other-project"][2]'),title=Link('xpath','//*[@class="other-project-title"]'),tagline=Text('xpath','//*[@class="other-project-tagline"]'))

您选择哪种样式完全取决于您希望如何对页面建模。 repeatingarea对区域数量和/或区域内容最多的集合最有效 无法预测,如库存清单。

在测试中使用页面对象可以这样做:

deftest_search_wikipedia():home=WikipediaHome()home.search_form.perform('kittens')

许可证

根据MIT许可证的条款分发,“stere”是免费的开源软件

问题

如果您遇到任何问题,请file an issue连同详细说明。

谢谢

跨浏览器测试平台和开源<;3由Sauce Labs

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android Studio:我的短信应用程序不是默认短信应用程序的选项之一   java处理字符串问题   java为什么我的程序打印“null”而不是字符串?   java为什么要创建一个无限循环?   java循环在一段时间后将布尔值更改为false?   java Android Rest Api Post 400错误请求   java调用另一个方法以获取resultset并正确关闭连接?   java我想在2d数组中添加一行   Java:我需要从outputstream中获取字节数组   C语言中Java元注释的等价物#   java如何在从web下载图像时保持原始图像的dpi?   java中基于输入值的spring boot动态值   java从请求中获取主机名   java可以复制Swing代码并在intelliJ中的designer中查看它吗   spring如何使用java配置多个ldap   安卓如何在Java中使用具有多个类似参数的JSON请求/响应循环?   java LIbGDX如何在语言更改时翻译所有文本?