Ruby имеет этот отличный слой абстракции поверх Selenium под названием Capybara, который вы можете использовать для функционального / приемочного / интеграционного тестирования. В нем также есть еще одна библиотека под названием Cucumber, которая идет дальше и позволяет вам писать тесты на английском языке.
Обе библиотеки построены на основе Selenium и могут использоваться для тестирования в любом крупном браузере, но из-за их уровней абстракции очень легко писать тесты с их помощью (ну, по крайней мере, так же просто, как и функциональное тестирование).
У меня вопрос: есть ли в Python что-нибудь подобное? Я обнаружил, что Pythonistas проводят функциональное тестирование с помощью различных инструментов, но ...
A) Splinter: не использует Selenium (и не имеет драйвера IE)
-EDIT- Похоже, что Spliter теперь использует Selenium (см. Ответы ниже).
B) Альфахор: не обновлялся более года; выглядит мертвым
C) Селен (необработанный): многие люди, кажется, используют Selenium напрямую, но похоже, что уровень абстракции может значительно упростить его использование
Итак, кто-нибудь знает что-нибудь Capybara- как, а еще лучше, как Cucumber, для Python (он не обязательно должен использовать Selenium, но он должен поддерживать все основные браузеры)?
* EDIT *
Для тех, кто не знаком с 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
Он используется 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 эквивалент, но даже просто эквивалент Капибары был бы полезен.
Вы можете протестировать код Python, используя Cucumber - для получения дополнительной информации см. Вики Cucumber на github.
Если вы хотите получить чистое решение Python, посмотрите Салат . Я никогда не использовал его, но есть довольно полезная запись в блоге об этом и splinter здесь .
В то время как ОП был счастлив найти эквивалент Python Cucumber, меня привел вот вопрос о названии: эквивалент Capybara на Python. В то время как огурец использует капибару, сам огурец - это совершенно другое «решение», которое только случайно связано с капибарой.
Если вы ищете что-то похожее на Капибару, не имея дело с огурцом, посмотрите занозу . Я не знаю, что было правдой, когда вопрос был опубликован, но Splinter теперь построен на Selenium и также поддерживает другие движки (Webkit, PhantomJS, zope.browsertest и другие), а также поддерживает визуальное и автономное тестирование.
Как насчет Robot Framework. Это довольно круто. А с Selenium2Library он очень хорошо работает с SE2. http://robotframework.org/
Вы проверяли освежение или горох?
Горох не использует синтаксис огурца, но автор говорит, что это проще https://github.com/gfxmonk/pea
И Фрешен пытается клонировать синтаксис и функциональность Cucumber
ОП попросил Python реализации Cucumber или Capybara, но, как отметил Джим Стюарт в , его ответ , Cucumber и Capybara - это очень разные вещи. Поскольку заголовок вопроса о Капибаре, я отвечу на него.
Я являюсь одним из разработчиков коммерческой обертки Selenium под названием Helium . Как и Capybara, он предлагает 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")
Звонки в Helium можно свободно смешивать со звонками в Selenium. Например. мы могли бы расширить вышеуказанный скрипт на:
# get_driver() returns the WebDriver created by start_chrome() above.
chrome = get_driver()
chrome.find_element_by_id('btnG').click()