Python有没有像水豚/黄瓜?
Ruby在Selenium上面有一个叫做Capybara的很好的抽象层,你可以使用它来做function/验收/集成testing。 另外还有一个名为“黄瓜”的图书馆,让你更进一步,让你用英语写实验。
这两个库都build立在Selenium之上,可以用来testing任何主要的浏览器,但是由于它们的抽象层,使用它们来编写testing是非常容易的(就像functiontesting至less可以这么简单)。
我的问题是:Python是否有类似的东西? 我发现Pythonistas用各种工具做functiontesting,但是…
A)分裂:不使用Selenium(并且没有IE驱动程序)
-EDIT-看起来分割器现在使用selenium(见下面的答案)。
B)Alfajor:一年多没有更新; 看起来死了
C)selenium(生):很多人似乎直接使用selenium,但它似乎是一个抽象层可以使它更容易使用
那么,有没有人知道任何类似Capybara的,或者更好的,对于Python来说,它更像Cucumber(它不一定非要使用Selenium,但它需要支持所有的主stream浏览器)?
*编辑*
对于那些不熟悉Capybara的人来说,它基本上只是增加了一个API,所以你可以这样来代替普通的Selenium API:
When /I sign in/ do within("#session") do fill_in 'Login', :with => 'user@example.com' fill_in 'Password', :with => 'password' end click_link 'Sign in' end
它被黄瓜使用,让你进一步抽象(几乎英文):
Scenario Outline: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Examples: | input_1 | input_2 | button | output | | 20 | 30 | add | 50 |
我会喜欢一个Python黄瓜相当于,但即使只是一个水豚等价物将是有益的。
您可以使用CucumbertestingPython代码 – 请参阅github上的Cucumber wiki以获取更多信息。
如果你想要一个纯粹的Python解决scheme,看看生菜 。 我从来没有使用它,但有一个相当有用的看起来博客条目和分裂在这里 。
A.黄瓜喜欢:(英文喜欢)
- 莴苣(接近小黄瓜)或
- 行为(接近小黄瓜)或
- 机器人框架(基于关键字的方法)(附加信息:RF大于英语像标准,基于关键字,并提供大量的帮助方法和内置库。与RF)
- 变得新鲜(接近嫩黄)或
- 豌豆(接近小黄瓜)或
-
RedwoodHQ(基于方法关键字)(RedwoodHQ具有比“类似英语”标准更大的特征,并封装了以下function:基于关键字的基于Web的testing框架,支持python作为语言之一等等。可能的话,所有现有的机器人框架内置库和所有机器人框架外部testing库或者任何python库都可以在这个基于web的testing框架中调用或使用,
-
Gauge(小黄瓜方法): python的参考: ( https://gauge-python.readthedocs.io/en/latest/index.html )
在黄瓜底下,人们可以将水豚像抽象层一样隐藏/分组许多selenium的行动
B.水豚喜欢:(抽象:皮肤/群体行动)
作为一个例如点击一个元素,它足以提供像点击(定位器),而不是使用原始selenium api
,其中一个需要find一个元素,然后单击。 下面的可选库中存在更多这样的抽象
- 选项-1(见下文)
- 选项-2(见下文)
- 选项-3(见下文)
- 选项-4(见下文)
- 选项-5(见下文)
- 选项-6:氦气(来自其他人答复/评论)
- 选项-7 :(见下文)
- 选项-8 :(见下文)
- 选项-9 :(见下文)
- 选项-10:(见下文)
- 选项-11 :(见下文)
- 选项-12 :(见下文)
- 选项-13 :(见下文)
我的研究:有几乎一半。 活跃的,b。 成熟的c.developed选项。
python随附各种电池!
选项-1: Selenium2Library
Githuburl: https : //github.com/rtomac/robotframework-selenium2library
发展:积极
目的: robotframework
的许多库之一,也可以作为你的框架的“独立”库( robotframework
下面的使用情况)。
思考:
- 它提供了selenium的抽象
- 为这个库中的方法input参数要简单得多。 例如,图书馆提供的抽象隐藏了许多查找元素的不必要细节。 有关更多细节,需要了解图书馆
- 虽然可以使用机器人包的实用程序,但是可以在没有任何修改的情况下在机器人框架外部使用这个库。 (你的作业在这个笔记上做这个lib的进一步的实验!)
- 因此,可以用作您的框架的独立库。
用法:
pip安装robotframework-selenium2library
导入您的ipython或闲置控制台,并开始播放如:
>>from Selenium2Library import Selenium2Library >>start_testing= Selenium2Library() >>start_testing.create_webdriver("Firefox") >>start_testing.go_to("http://www.google.com") >>. ...so on
选项-2: Pageobjects
Githuburl: https : //github.com/ncbi/robotframework-pageobjects
开发: InActive(没有显示最新版本的塞子)
目的: robotframework
一个库。 提供Selenium2Library
的页面对象抽象。 可以作为你的框架独立使用(请检查下面的使用情况),也可以和机器人一起使用。
思考:
- 它在Selenium2Library上提供了一个“pageobject抽象”支持
- 虽然可以使用机器人包的实用程序,但是可以在没有任何修改的情况下在机器人框架外部使用这个库。 (你的作业在这个笔记做进一步的实验!)
- 因此,可以作为独立的库使用
用法:
pip安装robotframework-pageobjects
例如:在ipython或闲置做:
>>from robotpageobjects import Page >>start_testing=Page() >>start_testing.create_webdriver("Firefox") >>start_testing.go_to("http://google.com")
选项-3: robotframework-pageobjectlibrary
Githuburl: https : //github.com/boakley/robotframework-pageobjectlibrary
发展:积极
希望作者支持LTS(长期支持):)),手指交叉!
用法:
pip安装robotframework-pageobjectlibrary
思考:
- 在robot-framework上下文中不能使用这个库。 如何处理页面上下文的一个小的变化将有助于这个库在机器人框架上下文中使用(它是你的作业,以了解如何!)
选项-4: 分裂
Githuburl: https : //github.com/cobrateam/splinter
发展:积极
用法: splinter.readthedocs.org/en/latest/index.html
点安装碎片
在ipython或闲置做:
>>from splinter import Browser >>browser = Browser() >>browser.visit('http://google.com') >>browser.fill('q', 'splinter - python acceptance testing for web applications') >>browser.find_by_name('btnG').click()
选项-5: SST库
Githuburl: https : //github.com/Work4Labs/selenium-simple-test
开发:function完整/主动
用法: testutils.org/sst/
pip安装-U sst
在ipython上还是闲置呢:
>>> from sst.actions import * >>> start() Starting Firefox >>> go_to('http://google.com') Going to... http://google.com Waiting for get_element
选项-6: 氦气 不开源(商业)
选项-7: holmium.core
Githuburl: https : //github.com/alisaifee/holmium.core
选项-8: wtframework
Githuburl: https : //github.com/wiredrive/wtframework
选项-9: webium
Githuburl: https : //github.com/wgnet/webium
选项-10: elementium
Githuburl: https : //github.com/actmd/elementium
选项-11: saunter
Githuburl: https : //github.com/Element-34/py.saunter
用法: saunter
选项-12: webdriverplus
Githuburl: https : //github.com/tomchristie/webdriverplus
用法: webdriverplus
评论:存储库没有维护,但体面的参考
Option-12: 简单的Pageobject
Githuburl: https : //github.com/rama-bornfree/simple-pageobject/tree/master/PageObjectLibrary
评论:围绕selenium2library构build的最简单的pageobject包装。 我是回购的所有者
testing设置:
选项-1-13中的“所有”testing库; 可以使用以下任何框架来运行: Lettuce, Behave, Robotframework
框架或者任何unit testing框架(例如PyUnit
, Nose
)…等等。
testing框架通常用于pipe理testing用例,例如
- 英文格式,如小黄瓜,关键字,表格等…
- 报告testing运行
- 连接到CI
- 设置/拆卸testing用例和testing套件
- 标记testing用例
- 其他function,可以考虑任何testing框架
重要的是,在上述选项中,图书馆是多么的舒适。
选项-5:就SST
而言,它具有框架本身的特征,例如可以生成报告并做更多的事情。
因此,在SST的情况下,图书馆和框架的定义是模糊的 ,这取决于人们想从该包中使用的特征的程度
一些有趣的math:
testing设置=(testing框架和testing库+您的自定义代码夹在框架和库中)的总数:
7 * 13 = 91种方式
select适合的最好的组合(testing框架和testing库)!
我个人会去Selenium2Library的机器人框架或Robot-framework与一些pageobject库
当然,我倾向于在我的关于机器人框架和Selenium2Library的post中积极偏袒
虽然OP很高兴find一个Python黄瓜的等价物,但是在这里引起了我的一个疑问:一个相当于Capybara的Python。 而黄瓜使用水豚,黄瓜本身是一个完全不同的“解决scheme”,只是偶然有关水豚。
如果你正在寻找像水豚一样的东西,而不必与黄瓜打交道,看看分裂 。 当问题发布时,我不知道什么是真实的,但是Splinter现在build立在Selenium上,并支持其他引擎(Webkit,PhantomJS,zope.browsertest等),并支持视觉和无头testing。
如何机器人框架。 这真是太棒了。 和Selenium2Library一起使用SE2的效果非常好。 http://robotframework.org/
现在有一个水豚本身的端口,以Python:
https://github.com/elliterate/capybara.py
你可以在这里find它的文档:
https://elliterate.github.io/capybara.py/
水豚可以通过模拟真实用户如何与您的应用进行交互来帮助您testingWeb应用。 对于运行testing的驱动程序是不可知的,并且内置了Selenium支持。
OP要求黄瓜或水豚的Python实现,但正如Jim Stewart在他的回答中指出的,Cucumber和Capybara是非常不同的东西。 由于这个问题的题目是关于水豚,那么我会回答。
我是名为Helium的商业Selenium封装的开发人员之一。 像Capybara一样,它为Web自动化提供了一个非常高级的API。 例如,以下是更新您的Facebook状态的脚本:
from helium.api import * start_chrome("facebook.com") write(your_fb_email, into="Email or Phone") write(your_fb_password, into="Password") click("Log In") write("Test", into="Update Status") click("Post")
呼叫氦气可以自由地与呼叫selenium混合。 例如。 我们可以通过以下方式扩展上述脚本
# get_driver() returns the WebDriver created by start_chrome() above. chrome = get_driver() chrome.find_element_by_id('btnG').click()