Czy Python ma coś takiego jak Capybara/ogórek?

Ruby ma świetną warstwę abstrakcji na szczycie Selenium o nazwie Capybara, której możesz użyć do testów funkcjonalnych/akceptacyjnych / integracyjnych. Posiada również inną bibliotekę o nazwie Cucumber, która idzie o krok dalej i pozwala pisać testy w języku angielskim.

Obie biblioteki są zbudowane na bazie Selenium i mogą być używane do testowania w dowolnej przeglądarce, ale ze względu na ich warstwy abstrakcyjne bardzo łatwo jest pisać testy za ich pomocą (cóż, tak proste, jak testy funkcjonalne dostaje co najmniej).

Moje pytanie brzmi: czy Python ma coś takiego? Znalazłem Pythonistas robi testy funkcjonalne z różnych narzędzi, ale ...

A) Splinter: nie używa selenu (i nie ma sterownika IE)

-EDIT - Wygląda na to, że Spliter używa teraz selenu(patrz Odpowiedzi poniżej).

B) Alfajor: nie był aktualizowany od ponad roku; wygląda na martwego

C) selen (surowy): Wiele osób wydaje się używać selenu bezpośrednio, ale wydaje się, że warstwa abstrakcji może sprawić, że będzie o wiele łatwiejsza w użyciu

Czy ktoś zna coś podobnego do Capybary, albo jeszcze lepiej do Pythona (nie musi faktycznie używać Selenium, ale musi obsługiwać wszystkie główne przeglądarki)?

* EDIT *

Dla tych, którzy nie są zaznajomieni z Capybara, to po prostu dodaje API tak, że zamiast normalnego API Selenium można zrobić coś takiego:

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

Jest używany przez ogórek, który pozwala dalsze streszczenie (prawie po angielsku):

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 |
[2]}chciałbym odpowiednik pytona ogórkowego, ale nawet odpowiednik Capybary byłby pomocny.
Author: Ripon Al Wasim, 2012-02-28

7 answers

Możesz przetestować kod Pythona używając Cucumber - zobacz Cucumber wiki na GitHubie, aby uzyskać więcej informacji.

Jeśli chcesz mieć czyste rozwiązanie Pythona, sprawdź Lettuce. Nigdy go nie używałem, ale jest o nim dość przydatny wpis na blogu i splinter tutaj .

 22
Author: D_Bye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-01 10:44:51

A. ogórek jak: (angielski jak)

  • sałata (Korniszon) lub
  • Behave (Approach Gherkin) or
  • Robotframework (podejście oparte na słowach kluczowych) (Dodatkowe Info: RF jest większy niż Angielski jak kryteria. Jego słowa kluczowe oparte i oferuje mnóstwo metod pomocniczych i wbudowanych bibliotek. Świetny eco-sysstem dla bibliotek zewnętrznych. Każdy skrypt Pythona może być również modyfikowany i używany wraz z RF)
  • odświeżyć (podejście Korniszon) lub
  • Pea (Podejście Korniszon) lub
  • RedwoodHQ (podejście oparte na słowach kluczowych) (RedwoodHQ ma funkcje większe niż "angielskie" kryteria i zawiera następujące funkcje: oparte na słowach kluczowych, webowy Framework testowy, obsługuje python jako jeden z języków i wiele więcej. Dodatkowe informacje na temat RedwoodHQ: teoretycznie możliwe, wszystkie istniejące wbudowane biblioteki robot-framework i wszystkie zewnętrzne biblioteki testowe robot-framework lub dowolna biblioteka Pythona, mogą być wywoływane lub używane z tej strony internetowej Framework testowy z niewielką modyfikacją)

  • Gauge (Gherkin approach): odniesienie do Pythona: (https://gauge-python.readthedocs.io/en/latest/index.html)


Pod ogórkiem można mieć Capybarę jak warstwę abstrakcji, która ukrywa/ grupuje wiele działań selenu


B. Capybara like: (Abstraction: hides / groups action)

Jako jeden np. do kliknięcia elementu, wystarczy podać polecenie jak click (locator) zamiast pracować z raw selenium api, gdzie trzeba znaleźć element, a następnie kliknąć. O wiele więcej takich abstrakcji istnieje w bibliotekach opcjonalnych poniżej

  • Opcja - 1 (patrz niżej)
  • Opcja - 2 (patrz niżej)
  • Opcja - 3 (patrz niżej)
  • opcja - 4 (patrz niżej)
  • Opcja-5 (patrz niżej)
  • opcja - 6: Hel (od innych Odpowiedz/skomentuj)
  • opcja-7: (patrz niżej)
  • opcja-8 : (Zobacz poniżej)
  • opcja-9: (patrz niżej)
  • opcja-10: (patrz niżej)
  • opcja-11: (patrz niżej)
  • opcja-12: (patrz niżej)
  • opcja-13: (patrz niżej)

Moje badania: istnieje prawie pół tuzina aktywnych, B. dojrzałych c. rozwiniętych opcji.

python jest dostarczany z różnymi bateriami w zestawie !!


Opcja-1: Selenium2Library

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

rozwinięcie: Active

cel: jedna z wielu bibliotek robotframework, może być również używana jako" samodzielna " biblioteka dla Twojego frameworka (Sprawdź np.

myśli:

  • dostarcza abstrakcji nad selenem
  • wprowadzanie argumentów do metod w tej bibliotece jest o wiele prostsze. Abstrakcji dostarczonej przez Bibliotekę, jeden np. ukrywa wiele zbędnych szczegółów do znajdowania elementów. Aby uzyskać więcej informacji, należy zrozumieć bibliotekę
  • Biblioteka ta może być używana poza kontekstem robot-framework jako taka bez żadnej modyfikacji, chociaż może być używana z narzędziami pakietu robot. (To Twoja praca domowa do dalszych eksperymentów z tym lib, na tej nucie!)
  • dlatego może być używany jako samodzielna biblioteka dla ramy.

użycie:

Pip install robotframework-selenium2library

Importuj do konsoli ipython lub idle i zacznij grać e. g:

>>from Selenium2Library import Selenium2Library
>>start_testing= Selenium2Library()
>>start_testing.create_webdriver("Firefox")
>>start_testing.go_to("http://www.google.com")
>>.
...so on

Option-2: Pageobjects

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

rozwój: Nieaktywne (No show stoppers with latest release)

cel: Jeden z bibliotek robotframework. Zapewnia abstrakcję obiektu strony nad Selenium2Library. Może być używany jako samodzielny framework (Sprawdź np. poniżej) lub może być używany wraz z robotframework.

myśli:

    Dzięki temu, że jest on dostępny w wielu wersjach językowych, można go używać również w innych językach.]} Biblioteka ta może być używana poza kontekstem robot-framework jako taka bez żadnej modyfikacji, chociaż może być używana z narzędziami pakietu robot. (To Twoja praca domowa do dalszych eksperymentów na tej nucie!) Dlatego może być używana jako samodzielna biblioteka

użycie:

Pip install robotframework-pageobjects

E. g: w ipythonie lub idle do:

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

Option-3: robotframework-pageobjectlibrary

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

rozwój: Active

Mam nadzieję, że autor wspiera LTS (Long Term Support):)), trzymam kciuki !!

użycie:

Pip install robotframework-pageobjectlibrary

myśli:

  • nie jest możliwe użycie tej biblioteki poza kontekstem robot-framework. Drobna zmiana sposobu działania strony context is handed pomogłoby tej bibliotece używać poza kontekstem robot-framework (to Twoja praca domowa, aby dowiedzieć się, jak!)

Opcja-4: Splinter

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

rozwinięcie: Active

sposób użycia: splinter.readthedocs.org/en/latest/index.html

Pip install splinter

Na ipythonie lub bezczynności do:

>>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()

Opcja-5: biblioteka SST

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

rozwój: Funkcja complete / Active

sposób użycia: testutils.org/sst /

Pip install-U SST

Na ipython lub idle do:

>>> from sst.actions import *
>>> start()

    Starting Firefox
>>> go_to('http://google.com')
    Going to... http://google.com
    Waiting for get_element

Opcja-6: Hel Nie open source (Komercyjne)

Opcja-7: Holm.rdzeń

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

Opcja-8: wtframework

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

Opcja-9: webium

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

Opcja-10: elementium

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

Opcja-11:

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

sposób użycia: saunter

Opcja-12: webdriverplus

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

sposób użycia: webdriverplus

Komentarze: repozytorium nie jest utrzymywane, ale przyzwoite odniesienie

Option - 12: Simple-Pageobject

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

Komentarze: Najprostszy wrapper stron zbudowany wokół selenium2library. Jestem właścicielem repo


Test-setup:

"wszystkie" biblioteki testowe w opcji-1-13; mogą być uruchamiane przy użyciu dowolnego z następujących frameworków: Lettuce, Behave, Robotframework lub dowolnego frameworku testów jednostkowych(np. PyUnit, Nose)...i tak dalej .

Framework testowy jest ogólnie używany do zarządzania przypadkami testowymi, np.]}

  • angielskie formaty, takie jak gherkin, keyword, tabular itd ...
  • raportowanie przebiegu testu
  • hooking to CI
  • konfiguracja / usuwanie przypadków testowych i zestawów testowych
  • oznaczanie przypadków testowych
  • inne funkcjonalności, nad którymi można pomyśleć o dowolnym frameworku testowym

To, co ma znaczenie, to komfort korzystania z bibliotek w powyższych opcjach.

Opcja-5: jeśli chodzi o SST, ma ona cechy samego frameworka, np. może generować raporty i robić wiele innych rzeczy.

Tak więc definicja biblioteki i frameworka w przypadku SST jest niewyraźne , w zależności od zakresu funkcji, które chcesz użyć z tego pakietu


trochę matematyki dla Zabawy:

Total number of ways one could have a good, bad , and Brzydula Test-setup = (Framework testowy i biblioteka testowa + Twój kod niestandardowy):

7 * 13 = 91 sposoby

Wybierz najlepszą kombinację (frameworka testowego i biblioteki testowej), która garnitury potrzebne !!

Osobiście wybrałbym Robot-framework z Selenium2Library lub Robot-framework z jakąś biblioteką pageobject

Oczywiście, jestem pochylony i pozytywnie stronniczy w moim poście o robot-framework i Selenium2Library

 19
Author: Steve Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-29 01:23:04

Podczas gdy OP był zadowolony ze znalezienia odpowiednika Python Cucumber, co doprowadziło mnie tutaj był tytuł pytania: Python odpowiednik Capybara. Podczas gdy ogórek używa Capybary, Sam ogórek jest zupełnie innym "rozwiązaniem", które jest tylko przypadkowo związane z Capybarą.

Jeśli szukasz czegoś podobnego do Capybary bez konieczności radzenia sobie z ogórkiem, sprawdź splinter. Nie wiem, co było prawdą, gdy pytanie zostało opublikowane, ale Splinter jest teraz zbudowany na Selenie, a obsługuje również inne silniki (Webkit, PhantomJS, zope.browsertest i inne) oraz obsługuje zarówno testowanie wizualne, jak i bezgłowe.

 12
Author: Jim Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-16 18:20:59

A co z robotami? To niesamowite. A Z Selenium2Library to działa naprawdę dobrze z SE2. http://robotframework.org/

 9
Author: Aaron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-13 02:24:02

Sprawdziłeś odświeżacz, czy groszek?

Groszek nie używa składni ogórka, ale autor twierdzi, że łatwiej https://github.com/gfxmonk/pea

I Freshen próbuje sklonować składnię i funkcjonalności ogórka

Https://github.com/rlisagor/freshen

 7
Author: Tony S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-27 13:14:33

Istnieje obecnie port samego Capybara do Pythona:

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

Jego dokumentację znajdziesz tutaj:

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

Capybara pomaga testować aplikacje internetowe, symulując, jak prawdziwy użytkownik wchodzi w interakcję z Twoją aplikacją. Jest on niezależny od Sterownika przeprowadzającego testy i posiada wbudowaną obsługę Selenium.

 7
Author: Brandon Rhodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-12 00:14:12

OP poprosił o implementacje Pythona Cucumber lub Capybara, ale jak Jim Stewart zwrócił uwagę w jego odpowiedź , Cucumber i Capybara to bardzo różne rzeczy. Skoro tytuł pytania dotyczy Kapybary, to na to odpowiem.

Jestem jednym z twórców komercyjnego opakowania selenu o nazwie Hel . Podobnie jak Capybara, oferuje bardzo wysoki poziom API do automatyzacji sieci. Na przykład, oto skrypt, który aktualizuje Facebook status:

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")
Połączenia z helem można dowolnie mieszać z połączeniami z selenem. Np. możemy rozszerzyć powyższy skrypt o:
# get_driver() returns the WebDriver created by start_chrome() above.
chrome = get_driver()
chrome.find_element_by_id('btnG').click()
 3
Author: Michael Herrmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:17