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