У Python есть что-то вроде Capybara/Cucumber?

Ruby имеет этот отличный слой абстракции поверх Selenium под названием Capybara, который вы можете использовать для тестирования функциональности/принятия/интеграции. У него также есть другая библиотека под названием Cucumber, которая делает это еще дальше и позволяет писать тесты на английском языке.

Обе библиотеки построены поверх Selenium и могут использоваться для тестирования против любого крупного браузера, но из-за их слоев абстракции очень легко написать тесты, используя их (ну, как легко, как функциональное тестирование получается как минимум).

Мой вопрос: у Python есть что-то подобное? Я обнаружил, что Pythonistas выполняет функциональное тестирование с помощью различных инструментов, но...

A) Splinter: не использует Selenium (и не имеет IE-драйвера)

-Edit - Похоже, что Spliter теперь использует Selenium (см. Ответы ниже).

B) Alfajor: не обновляется более года; выглядит мертвым

C) Selenium (raw): многие люди, кажется, используют Selenium напрямую, но кажется, что слой абстракции может сделать его намного проще в использовании.

Итак, кто-нибудь знает что-то вроде Capybara-like или, еще лучше, Cucumber-like, для 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 |

Я бы ЛЮБЛЮ эквивалент Pucon Cucumber, но даже эквивалент Capybara был бы полезен.

Ответ 1

Вы можете протестировать код Python с помощью Cucumber - см. Wiki огурца на github для получения дополнительной информации.

Если вы хотите получить чистое решение Python, просмотрите Lettuce. Я никогда не использовал его, но есть довольно полезная запись в блоге об этом и splinter здесь.

Ответ 2

а. Огурец как: (по-английски)

  • Салат-латук (подход к огурчикам) или
  • Behave (Подход к озеру) или
  • Robotframework (основанный на ключевом слове Approach) (Дополнительная информация: RF больше, чем на английском языке. Подобные критерии. Его ключевое слово и предлагает множество вспомогательных методов и встроенных библиотек. Великая система eco-sysstem для внешних библиотек. Любой python script также может быть модифицирован и использован вместе с RF)
  • Освежить (Подход к озеру) или
  • Горох (подход Охотничий) или
  • RedwoodHQ (Подход на основе ключевых слов) (RedwoodHQ имеет функции, превышающие критерии "English-Like", и инкапсулирует следующие функции: основанная на ключевых словах, веб-тестовая среда, поддерживает python как один из языков и многое другое. Дополнительная информация о RedwoodHQ: теоретически это возможно, все существующие встроенные библиотеки робота-рамки и все внешние библиотеки-теги robot-framework или, что то другое, библиотеки python, могут быть вызваны или использованы из этой веб-основы тестирования без особых изменений)

  • Калибровка (подход Gherkin): Ссылка на python: (https://gauge-python.readthedocs.io/en/latest/index.html)


Под огурцом можно было бы использовать Capybara как слой абстракции, который скрывает/группирует многие действия селена.


В. Capybara like: (Абстракция: действие скрывает/группирует)

Как один, например, щелкнуть элемент, его достаточно, чтобы предоставить команду как клик (локатор) вместо работы с raw selenium api, где нужно найти элемент, а затем щелкнуть. Много больше таких абстракций существует в дополнительных библиотеках ниже

  • Вариант-1 (см. ниже)
  • Вариант-2 (см. ниже)
  • Вариант-3 (см. ниже)
  • Вариант-4 (см. ниже)
  • Вариант-5 (см. ниже)
  • Вариант-6: Гелий (от других Ответ/комментарий)
  • Вариант-7: (см. ниже)
  • Вариант-8: (см. ниже)
  • Вариант-9: (см. ниже)
  • Вариант-10: (см. ниже)
  • Вариант-11: (см. ниже)
  • Вариант-12: (см. ниже)
  • Вариант-13: (см. ниже)

Мои исследования: Есть почти полдюжины a. active, b. зрелые c.разработанные параметры.

python поставляется с с разнообразными батареями.


Вариант-1: Selenium2Library

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

Developement: Активный

Цель: одна из многих библиотек robotframework, также может использоваться как "автономная" библиотека для вашей инфраструктуры (например, ниже для использования).

Мысли:

  • Он обеспечивает абстракцию над селеном
  • ввод аргументов в методы в этой библиотеке намного проще. Абстракция, предоставляемая библиотекой, например, скрывает многие ненужные детали для поиска элементов. Для получения дополнительной информации нужно понять библиотеку.
  • Можно использовать эту библиотеку вне контекста robot-framework как таковой без каких-либо изменений, хотя это может быть использование утилит пакета роботов. (Это ваша домашняя работа, чтобы делать дальнейшие эксперименты с этим 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

Разработка: InActive (нет показательных пробок с последним выпуском)

Цель: Одна из библиотек robotframework. Предоставляет абстракцию объекта страницы над Selenium2Library. Может использоваться как автономный для вашего фреймворка (проверьте, например, ниже для использования), или может использоваться вместе с robotframework.

Мысли:

  • Он предоставляет поддержку "pagebject абстракции" поверх Selenium2Library.
  • Можно использовать эту библиотеку вне контекста robot-framework как таковой без каких-либо изменений, хотя это может быть использование утилит пакета роботов. (Его домашняя работа для дальнейших экспериментов на этой ноте!)
  • Следовательно, он может использоваться как отдельная библиотека

Использование:

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

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

Разработка: Активный

Надеюсь, автор поддерживает LTS (Long Term Support):)), Пальцы пересекаются!!

Использование:

pip install robotframework-pageobjectlibrary

Мысли:

  • Невозможно использовать эту библиотеку вне контекста robot-framework. Небольшое изменение в том, как обрабатывается контекст страницы, поможет этой библиотеке использоваться вне контекста robot-framework (ее домашняя работа, чтобы узнать, как!)

Вариант-4: Splinter

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

Developement: Активный

Использование: splinter.readthedocs.org/en/latest/index.html

pip install splinter

На 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

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

Разработка: Функция завершена/активна

Использование: testutils.org/sst/

pip install -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: helium Не открытый источник (коммерческий)

Вариант-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

Комментарии: репозиторий не поддерживается, но достойная ссылка

Вариант-12: Simple-Pageobject

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

Комментарии: Простейшая обертка для объекта страницы, построенная вокруг selenium2library. Я являюсь владельцем репо


Тест-установка:

"Все" тестовые библиотеки в Option-1-13; может быть запущена с использованием любой из следующих фреймворков: Lettuce, Behave, Robotframework или, если на то пошло, любая инфраструктура unit test (например, PyUnit, Nose)... и так далее.

Test Framework обычно используется для управления тестовыми примерами, например

  • Английские форматы, такие как gherkin, keyword, tableular и так далее.
  • отчет о тестировании
  • подключение к CI
  • настройка/срыв тестовых примеров и тестовых наборов
  • пометка тестовых случаев
  • другие функции, о которых можно было бы думать о любой тестовой структуре

Что имеет значение, насколько удобно работать с библиотеками в вышеуказанных параметрах.

Вариант-5: Что касается SST, то он имеет функции самой структуры, например, может генерировать отчет и делать многое другое.

Таким образом, определение библиотеки и фреймворка в случае SST размыто в зависимости от степени возможностей, которые вы хотели бы использовать из этого пакета.


Некоторая математика для удовольствия:

Общее количество способов хорошего, плохого и уродливого Test-setup = (тестовая среда и тестовая библиотека + ваш пользовательский код, заложенный в ч/б рамки и библиотеку):

7 * 13 = 91 Пути

Выберите лучшую комбинацию (из библиотеки Test Framework и Test), которая вам подходит!

Я бы лично пошел на Robot-framework с Selenium2Library или Robot-framework с некоторой библиотекой pageobject

Конечно, я склонен и положительно настроен в своем посте о роботизированной структуре и Selenium2Library

Ответ 3

В то время как OP был счастлив найти эквивалент Pucon Cucumber, то, что привело меня сюда, было вопросом: эквивалент Python Capybara. В то время как огурцы используют Capybara, сам огурец представляет собой совершенно другое "решение", которое только случайно связано с Capybara.

Если вы ищете что-то похожее на Capybara, не имея дело с Cucumber, посмотрите splinter. Я не знаю, что было правдой, когда вопрос был отправлен, но Splinter теперь построен на Selenium и поддерживает другие двигатели (Webkit, PhantomJS, zope.browsertest и другие) и поддерживает как визуальное, так и безгласное тестирование.

Ответ 4

Как насчет Robot Framework. Это довольно здорово. И с Selenium2Library он отлично работает с SE2. http://robotframework.org/

Ответ 5

Вы проверили свежесть или горох?

Горох не использует синтаксис огурца, но автор говорит, что проще https://github.com/gfxmonk/pea

И Freshen пытается клонировать синтаксис и функциональность Cucumber

https://github.com/rlisagor/freshen

Ответ 6

В настоящее время для Python существует порт самой Capybara:

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

Здесь вы можете найти его документацию:

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

Capybara помогает вам тестировать веб-приложения, моделируя, как реальный пользователь будет взаимодействовать с вашим приложением. Агностик о драйвере, выполняющем ваши тесты, поставляется с поддержкой Selenium.

Ответ 7

OP попросил реализации Python огурца или Capybara, но, как сказал Джим Стюарт в его ответе, Cucumber и Capybara - совсем другие вещи. Поскольку название вопроса касается Capybara, то на что я отвечу.

Я один из разработчиков коммерческой обертки Selenium, называемой Helium. Как и Capybara, он предлагает API высокого уровня для веб-автоматизации. Например, вот script, который обновляет ваш статус 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")

Звонки на гелий могут свободно смешиваться с вызовами Селена. Например. мы могли бы расширить приведенный выше script на:

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