web-dev-qa-db-ja.com

Python Capybara / Cucumberのようなものはありますか?

Rubyには、Seleniumの上にCapybaraと呼ばれるこの優れた抽象化層があり、機能/受け入れ/統合テストを実行できます。また、Cucumberと呼ばれる別のライブラリがあり、これをさらに一歩進めて、実際にテストを英語で書くことができます。

どちらのライブラリもSeleniumの上に構築されており、主要なブラウザに対するテストに使用できますが、抽象化レイヤーのため、それらを使用してテストを書くのは非常に簡単です(少なくとも、機能テストと同じくらい簡単です)。

私の質問は:Pythonそのようなものはありますか?Pythonistaがさまざまなツールで機能テストを行っているのを発見しましたが...

A)Splinter:Seleniumを使用しません(IEドライバーはありません)

-EDIT- SpliterはSeleniumを使用するようになりました(以下の回答を参照)。

B)Alfajor:1年以上更新されていません。死んでいるように見える

C)Selenium(raw):多くの人がSeleniumを直接使用しているように見えますが、抽象化レイヤーを使用すると使いやすくなります

だから、誰かがCapybaraのような、またはもっと良いのはCucumberのような何かを知っていますか?Python(実際にSeleniumを使用する必要はありませんが、すべての主要なブラウザをサポートする必要があります)?

*編集*

Capybaraに慣れていない人のために、基本的にAPIを追加するだけなので、通常のSelenium APIの代わりに次のようなことができます。

When /I sign in/ do
  within("#session") do
    fill_in 'Login', :with => '[email protected]'
    fill_in 'Password', :with => 'password'
  end
  click_link 'Sign in'
end

Cucumberによって使用され、さらに抽象化することができます(ほぼ英語まで):

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 Cucumberに相当するものが大好きですが、Capybaraに相当するものであっても役立ちます。

41
machineghost

Cucumberを使用して、Pythonコードをテストできます。詳細については、githubの Cucumber wiki を参照してください。

純粋なPythonソリューションが必要な場合は、 Lettuce をご覧ください。私はそれを使用したことはありませんが、それと破片についてかなり有用なブログエントリがあります- ここ

22
D_Bye

A.キュウリのような:(英語のような)

  • レタス(アプローチガーキン)または
  • Behave(Approach Gherkin)または
  • Robotframework(Approachキーワードベース)(追加情報:RFはEnglish Like基準よりも大きい。キーワードベースであり、ヘルパーメソッドと組み込みライブラリの負荷を提供します。外部ライブラリ用の優れたエコシステム。 pythonスクリプトは修正してRFとともに使用することもできます)
  • Freshen(Approach Gherkin)または
  • エンドウ(アプローチガーキン)または
  • RedwoodHQ(キーワードベースのアプローチ)(RedwoodHQには「英語のような」基準よりも大きな機能があり、次の機能がカプセル化されています。キーワードベース、Webベースのテストフレームワーク、言語の1つとしてpython RedwoodHQに関する追加情報:理論的には、既存のすべてのロボットフレームワークの組み込みライブラリとすべてのロボットフレームワークの外部テストライブラリ、または任意のpythonライブラリ、またはこのWebベースのテストフレームワークから少し変更を加えて使用)

  • ゲージ(ガーキンアプローチ):Pythonのリファレンス:https://gauge-python.readthedocs.io/en/latest/index.html


Cucumberの下には、Seleniumアクションの多くを非表示/グループ化する抽象レイヤーのようなCapybaraがあります


B.カピバラのような:(抽象化:非表示/グループアクション)

たとえば、要素をクリックすると、要素を見つけてクリックする必要がある生の_Selenium api_を操作する代わりに、click(locator)などのコマンドを提供するのに十分です。以下のオプションライブラリには、このような抽象化がさらに多くあります。

  • オプション1(以下を参照)
  • オプション2(以下を参照)
  • オプション3(以下を参照)
  • オプション4(以下を参照)
  • オプション5(以下を参照)
  • オプション-6:ヘリウム(他から回答/コメント)
  • オプション-7:(以下を参照)
  • オプション-8:(以下を参照)
  • オプション-9:(以下を参照)
  • オプション-10:(以下を参照)
  • オプション-11:(以下を参照)
  • オプション-12:(以下を参照)
  • オプション-13:(以下を参照)

私の研究:ほぼ半ダースが存在します。アクティブ、b。成熟したc.developedオプション。

pythonが付属していますさまざまなバッテリーが含まれています!!


オプション-1: Selenium2Library

Github url:https://github.com/rtomac/robotframework-Selenium2library

開発:アクティブ

目的:robotframeworkの多くのライブラリの1つは、フレームワークの「スタンドアロン」ライブラリとしても使用できます(使用方法については、以下を確認してください)。

思考:

  • Seleniumの抽象化を提供します
  • このライブラリのメソッドへの引数の入力は、はるかに簡単です。たとえば、ライブラリによって提供される抽象化は、要素を見つけるための不要な詳細の多くを隠します。詳細については、ライブラリを理解する必要があります
  • このライブラリは、ロボットパッケージのユーティリティを使用することもできますが、ロボットフレームワークコンテキストの外部で変更なしで使用できます。 (このノートでは、このlibでさらに実験を行うのが宿題です!)
  • したがって、フレームワークのスタンドアロンライブラリとして使用できます。

使用法:

pip install 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

Github url:https://github.com/ncbi/robotframework-pageobjects

開発:非アクティブ(最新リリースではショーストッパーなし)

目的:robotframeworkのライブラリの1つ。 _Selenium2Library_に対するページオブジェクトの抽象化を提供します。フレームワークのスタンドアロンとして使用することができます(使用方法については以下を確認してください)か、ロボットフレームワークと一緒に使用できます。

思考:

  • Selenium2Libraryの上に「pageobject abstraction」サポートを提供します
  • このライブラリは、ロボットパッケージのユーティリティを使用することもできますが、ロボットフレームワークコンテキストの外部で変更なしで使用できます。 (このノートでさらに実験を行うのはあなたの宿題です!)
  • したがって、スタンドアロンライブラリとして使用できます。

使用法:

pip install robotframework-pageobjects

例:ipythonまたはidleの場合:

_>>from robotpageobjects import Page
>>start_testing=Page()
>>start_testing.create_webdriver("Firefox")
>>start_testing.go_to("http://google.com")
_

オプション-3: robotframework-pageobjectlibrary

Github Url:https://github.com/boakley/robotframework-pageobjectlibrary

開発:アクティブ

著者がLTS(長期サポート)をサポートしていることを願っています:))、Fingers crossed !!

使用法:

pip install robotframework-pageobjectlibrary

思考:

  • このライブラリをロボットフレームワークコンテキスト外で使用することは[〜#〜] not [〜#〜]可能です。ページコンテキストの処理方法を少し変更すると、このライブラリをロボットフレームワークコンテキストの外部で使用できるようになります(方法については宿題です!)

オプション-4: Splinter

Github url:https://github.com/cobrateam/splinter

開発:アクティブ

使用法:splinter.readthedocs.org/en/latest/index.html

pip install splinter

Ipythonまたはidleの場合:

_>>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ライブラリ

Github url:https://github.com/Work4Labs/Selenium-simple-test

開発:機能の完了/アクティブ

使用法:testutils.org/sst/

pip install -U sst

ipythonまたはidleの場合:

_>>> 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

Github url:https://github.com/alisaifee/holmium.core

オプション-8: wtframework

Github url:https://github.com/wiredrive/wtframework

オプション-9: webium

Github url:https://github.com/wgnet/webium

オプション-10: elementium

Github url:https://github.com/actmd/elementium

オプション-11: saunter

Github url:https://github.com/Element-34/py.saunter

使用法:saunter

オプション-12: webdriverplus

Github url:https://github.com/tomchristie/webdriverplus

使用法:webdriverplus

コメント:リポジトリは保持されませんが、適切な参照

Option-12: Simple-Pageobject

Github url:https://github.com/rama-bornfree/simple-pageobject/tree/master/PageObjectLibrary

Comments:Selenium2libraryを中心に構築された最も単純なpageobjectラッパー。私はレポの所有者です


テストセットアップ:

Option-1-13の「すべて」のテストライブラリ。次のフレームワークのいずれかを使用して実行できます:_Lettuce, Behave, Robotframework_またはそのことについては、任意の単体テストフレームワーク(たとえばPyUnitNose)...など.

テストフレームワークは、一般にテストケースの管理に使用されます。

  • ガーキン、キーワード、表などの英語形式...
  • テスト実行の報告
  • cIへのフック
  • テストケースとテストスイートのセットアップ/分解
  • テストケースのタグ付け
  • テストフレームワークについて考えることができる他の機能

mattersとは、上記のオプションでライブラリを使用する場合の快適さです。

オプション5:SSTに関する限り、フレームワーク自体の機能を備えています。たとえば、レポートを生成したり、より多くのことを実行したりできます。

したがって、SSTの場合のライブラリとフレームワークの定義はblurredであり、そのパッケージから使用したい機能の範囲によって


いくつかの楽しみのための数学:

goodbad、およびglyを持つことができるウェイの総数Test-setup =(テストフレームワークANDテストライブラリ+カスタムコードを挟むb/wフレームワークとライブラリ):

7 * 13 = 91 Ways

ニーズに合った最適な組み合わせ(テストフレームワークとテストライブラリ)を選択してください。

個人的には、Selenium2Libraryを使用したRobot-frameworkまたはpageobjectライブラリを使用したRobot-frameworkに行きます

もちろん、私はロボットフレームワークとSelenium2Libraryについての投稿に傾いており、積極的に偏っています

19
Steve Harrison

OPはPython Cucumberの同等物を見つけることに満足していましたが、ここで私を導いたのは質問タイトルです:a Python Capybaraの同等物。キュウリ自体は、偶然カピバラに関連するだけのまったく異なる「解決策」です。

Cucumberを使用せずにCapybaraのようなものを探している場合は、 splinter をご覧ください。質問が投稿されたときに何が真実であったかはわかりませんが、Splinterは現在Selenium上に構築されており、他のエンジン(Webkit、PhantomJS、zope.browsertestなど)もサポートしており、ビジュアルテストとヘッドレステストの両方をサポートしています。

12
Jim Stewart

ロボットフレームワークはどうですか。とても素晴らしいです。また、Selenium2Libraryを使用すると、SE2で非常にうまく機能します。 http://robotframework.org/

9
Aaron

現在、カピバラ自体のPythonへの移植版が存在します。

https://github.com/elliterate/capybara.py

以下のドキュメントをご覧ください。

https://elliterate.github.io/capybara.py/

Capybaraは、実際のユーザーがアプリを操作する方法をシミュレートすることにより、Webアプリケーションのテストを支援します。テストを実行するドライバーにとらわれず、Seleniumサポートが組み込まれています。

8
Brandon Rhodes

フレッシュ、またはエンドウをチェックしましたか?

エンドウはキュウリの構文を使用しませんが、著者はそれが簡単だと言います https://github.com/gfxmonk/pea

FreshenはCucumberの構文と機能を複製しようとしています

https://github.com/rlisagor/freshen

7
Tony S.

OPはPython CucumberまたはCapybaraの実装を要求しましたが、ジムスチュワートが 彼の答え で指摘したように、CucumberとCapybaraは非常に異なるものです。カピバラについてです、それは私が答えることです。

私は Helium という商用Seleniumラッパーの開発者の1人です。 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")

ヘリウムへの呼び出しは、セレンへの呼び出しと自由に混在させることができます。例えば。上記のスクリプトは次の方法で拡張できます。

# get_driver() returns the WebDriver created by start_chrome() above.
chrome = get_driver()
chrome.find_element_by_id('btnG').click()
3