
Пару слов о gem-ах (библиотеках) Cucumber + Capybara + Selenium-webdriver, которые нужны для запуска и наполнения проверками UI тесты.
Cucumber
Сucumber — гем, позволяющий писать тесты на человеческом языке. Для этого используется нотация Gherkin, которая определяет структуру и правила написания сценариев. Подробно почитать можно тут

Capybara
Capybara — гем, позволяющий искать/кликать/… по элементам браузера. Т.е. представляет собой связующее звено между Cucumber шагами (steps) теста, и webdriver-ом (экзмепляр вызываемого браузера). Здесь можно глянуть методы этого гема.
Selenium-webdriver
Selenium-webdriver — это инструмент для автоматизации действий веб-браузера. По сути это есть экзмеплял (инстанс) браузера.
Предварительные действия
Скачиваем Firefox и Хром для запуска тестов.
Скачиваем и устанавливаем Git (система управления версиями или аналоичная VCS, оффициальный сайт). Но Git нужен когда у Вас уже есть проект или вы хотите хранить свой код в Git системе.
И так, начнем
У нас уже есть установленный RubyMine.
- Нужно установить сам язык Ruby. Для этого идем сюда и ставим RubyInstaller. Я выбрал самый последний релиз (RubyInstaller 2.5.1-2) c пакетом DevKit. Через этот настроечный пакет можно запускать тесты из консольки, как в Linux, а также гибко управлять гемами.
- Пакет RubyInstaller установлен и мы переходим к настройке.
В случае если мы хотим создать проект новый, то открываем RubyMine и создаем пустой проект, указав установленный Ruby.
- Далее нам нужно создать вот такую структуру папок и файлов согласно аннотации

Подробно описано здесь
- Gemfile — содержит список гемов, которые используются в проекте
Вот содержимое нашего гемфайла, с самыми основными гемами для UI тестовsource ‘https://rubygems.org’
gem ‘cucumber’
gem ‘capybara’
gem ‘selenium-webdriver’
gem ‘chromedriver-helper’Эти 4 гема необходмо указать в Gemfile.
gem ‘chromedriver-helper’ — хромдрайвер, позволяющий запускать тестики на Chrome
С помощью данного Gemfile нужно установить наши избранные гемы. Устанавливать на Windows проще всего из интерфейса RubyMine: Меню Tools -> Bundler -> Install. Bundler — это тоже гем, но служит для управления гемами. Но также это можно сделать и из командной строки, которая находится в меню программ под именем Start Command Prompt…Кстати, при помощи этой командной строки можно и запускать тесты минуя RubyMine.
- Файл env.rb — ключевой rb файл для запуска UI тестов. При инициализации переменных и файлов теста именно env.rb будет самым первым. В нем происходит регистрация браузера, на котором будут выполняться тестики. Готовый пример env.rb, где происходит регистрация Chrome, Firefox или даем понять что нам браузер и не нужен вовсе для выполнения тестов.
Случаи когда не нужен бразуер — проверяем рест запросы, интеграционное тестирование, хотя и считается, что Cucumber тесты для этого не совсем подходят.
Пишем env.rbrequire ‘capybara/cucumber’
require ‘selenium-webdriver’Capybara.register_driver :driver do |app|
case ENV[‘DRIVER’]
when ‘chrome’
Capybara::Selenium::Driver.new(app, :browser => :chrome)
when ‘without_browser’
Capybara.default_driver = :mechanize
else
client = Selenium::WebDriver::Remote::Http::Default.new
Capybara::Selenium::Driver.new(app, :browser => :firefox, port: 10000 + Random.rand(1000), http_client: client)
end
endCapybara.default_driver = :driver
Capybara.default_selector = :xpathТакже, здесь нужно упомянуть вопрос версионности Firefox.
Если у Вас установлен Firefox версии 46 или ниже, то для корректного запуска тестов нужен gem ‘capybara’ версии ‘2.53.4’ или ниже.Если Firefox версии выше 46 — то он работает по другим принципам на основе «geckodriver» и поэтому для корректного запуска тестиков нужно установить geckodriver.
Экскурс в причины за чем нужен geckodriverДо версии 47 версии драйвер автоматизации Firefox был всего лишь расширением, которое включалось в каждый клиент. Но это расширение было удалено из-за изменения политики, требющей теперь, чтобы все расширения подписывались Mozilla.Marionette — это новый драйвер, который поставляется вместе с Firefox. У этого драйвера есть собственный протокол, который несовместим с протоколом Selenium/WebDriver.
Geckodriver — это сервер приложений, реализующий протокол Selenium/WebDriver. Он переводит команды Selenium и перенаправляет их в драйвер Marionette.
Важный ньюанс, после установки «geckodriver» нужно обязательно прописать системные пути, для того чтобы наш «geckodriver» нашелся при выполнении env.rb.
системные пути
- Далее всего лишь осталось написать тестовый тест и запустить на Chrome, Firefox и без браузера :). Например, напишем несколько шагов для входа в почту mail.ru
Описание шагов
# encoding: UTF-8
# language: ruGiven(/^Переходим на страницу "(.*?)"$/) do |page|
visit page
endGiven(/^Вводим текст "(.*?)" в поле c id "(.*?)"$/) do |text, field_id|
find("//input[@id=’#{field_id}’]").set(text)
endGiven(/^Выбираем текст "(.*?)" в выпадающем списке с id "(.*?)"$/) do |text, select_id|
find("//select[@id=’#{select_id}’]/option[text()=’#{text}’]").click
endGiven(/^Нажимаем кнопку с текстом "(.*?)"$/) do |text|
find("//input[@value=’#{text}’]").click
endGiven(/^Ожидаем (\d+) секунд(?:|ы)$/) do |sec|
sleep sec.to_i
end - А также сам cucumber тест
test.feature
# encoding: UTF-8
# language: ruФункция: Открываем почту
Сценарий: Открываем почту
Дано Переходим на страницу «mail.ru»
И Вводим текст «dorian.grey.2019» в поле c id «mailbox:login»
И Вводим текст "********" в поле c id «mailbox:password»Когда Выбираем текст "@inbox.ru" в выпадающем списке с id «mailbox:domain»
Тогда Нажимаем кнопку с текстом «Войти»И Ожидаем 5 секунд
- Осталось лишь проверить все наши усилия и наслаждаться успешной работой UI тестов (в примере 1 теста) :). Осталась последняя настройка — настройка запуска тестов. Идем в меню RubyMine -> Edit Configurations -> Runner Options — Здесь как раз и производим выбор драйвера 🙂
ENV[‘DRIVER’] из env.rb это и есть настройка запуска. И нам всего лишь нужно указать в Runner Options «DRIVER=firefox» или «DRIVER=chrome».
Запускаем,

Вот и все, успешных Вам Cucumber тестов!
ссылка на оригинал статьи https://habr.com/post/423123/
Добавить комментарий