Статья рассчитана на знакомоство с автотестированием и разверткой среды в Windows 10 и предназначена для тех, кто хоть чуть — чуть знает о Cucumber + Capybara + Selenium-webdriver. Идея для статьи появилась из-за различий в разворачивании окружения на Windows 10 и Linux.
Пару слов о gem-ах (библиотеках) Cucumber + Capybara + Selenium-webdriver, которые нужны для запуска и наполнения проверками UI тесты.
Сucumber — гем, позволяющий писать тесты на человеческом языке. Для этого используется нотация Gherkin, которая определяет структуру и правила написания сценариев. Подробно почитать можно тут
Capybara — гем, позволяющий искать/кликать/… по элементам браузера. Т.е. представляет собой связующее звено между Cucumber шагами (steps) теста, и webdriver-ом (экземпляр вызываемого браузера). Здесь можно глянуть методы этого гема.
Selenium-webdriver — это инструмент для автоматизации действий веб-браузера. По сути это есть экзмеплял (инстанс) браузера.
У нас уже есть установленный RubyMine.
Запускаем,
Вот и все, успешных Вам Cucumber тестов!
Пару слов о gem-ах (библиотеках) Cucumber + Capybara + Selenium-webdriver, которые нужны для запуска и наполнения проверками UI тесты.
Cucumber
Сucumber — гем, позволяющий писать тесты на человеческом языке. Для этого используется нотация Gherkin, которая определяет структуру и правила написания сценариев. Подробно почитать можно тут
Capybara
Capybara — гем, позволяющий искать/кликать/… по элементам браузера. Т.е. представляет собой связующее звено между Cucumber шагами (steps) теста, и webdriver-ом (экземпляр вызываемого браузера). Здесь можно глянуть методы этого гема.
Selenium-webdriver
Selenium-webdriver — это инструмент для автоматизации действий веб-браузера. По сути это есть экзмеплял (инстанс) браузера.
Предварительные действия
Описание предварительных действий
Для удобства демонстрации будем использовать RubyMine. Можно скачать пробную версию на 30 дней.
Скачиваем Firefox и Хром для запуска тестов.
Скачиваем и устанавливаем Git (система управления версиями или аналоичная VCS, оффициальный сайт). Но Git нужен когда у Вас уже есть проект или вы хотите хранить свой код в Git системе.
Скачиваем 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 end Capybara.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: ru Given(/^Переходим на страницу "(.*?)"$/) do |page| visit page end Given(/^Вводим текст "(.*?)" в поле c id "(.*?)"$/) do |text, field_id| find("//input[@id='#{field_id}']").set(text) end Given(/^Выбираем текст "(.*?)" в выпадающем списке с id "(.*?)"$/) do |text, select_id| find("//select[@id='#{select_id}']/option[text()='#{text}']").click end Given(/^Нажимаем кнопку с текстом "(.*?)"$/) do |text| find("//input[@value='#{text}']").click end Given(/^Ожидаем (\d+) секунд(?:|ы)$/) do |sec| sleep sec.to_i end
- А также сам cucumber тест
test.feature# encoding: UTF-8 # language: ru Функция: Открываем почту Сценарий: Открываем почту Дано Переходим на страницу "https://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 тестов!