Примеры использования site-prism с архитектурой Webdriver, Cucumber, Capybara.

Решил еще раз попробовать внедрить использование site_prism на проекте.
Напомню, что для тестов используется Webdriver, Cucumber, Capybara.

Хотелось бы увидеть хороший пример реализации site-prism с именно такой связкой, возможно примеры на github.

И еще, удавалось ли кому-то успешно использовать Webdriver, Cucumber, Capybara с классическим page-object от Cheesy, потому как я где-то читал, его коммент о том, что они не поддерживаются.

я на постоянной основе использую page-object by Cheezy

  1. никак не могу его назвать классическим ) (он от этого не перестает быть классным)
  2. он не поддерживает Capybara (так как у него свои методы для работы с элементами)
  3. он поддерживает Selenium Webdriver так же как и Watir Webdriver
  4. он поддерживает Cucumber, RSpec, TestUnit ну или любой другой тул для организации тестов
  5. site-prism в основном повторяет page-object, и основная разница между ними именно в поддержке capybara

Для меня разница как раз в избыточности.
Конкретно сейчас столкнулся с тем, что при клике на ссылку которая редиректит на другую страницу меня не перекидывает на эту страницу, а тест просто закрывается.
Для того чтобы использовать проверку в шаге “Then” мне нужно юзать " .load " конкретного класса для его открытия, однако вдруг работа функционала сломался и редирект ведет на другую страницу, однако мне придется грузить искомую.

Сталкивался ли кто-то с подобной проблемой?

Вот с наглядным примером, страница регистрации mail.ru

Given(/^I open registration page$/) do
    @go=Go.new
    @go.mail.load
    #@go.mail.displayed?
end

Далее, идет When, его я описывать не стану, главное что последнее действие там это сабмит страницы интересует момент Then

   Then(/^I verify registration$/) do
      @registration_form = Registration_form.new
      @registration_form.load
end 

Ожидаемый результат: По сабмиту форма редиректится на другую страницу в независимости от заполнения шага Then
Фактический: Если шаг пустой то тест просто закрывается.

Дело в том, что шаг Then должен содержать какую либо проверку (в данном случае ты вероятно хочешь проверить что ты на верной странице), с использованием матчеров. Есть набор стандартных rspec матчеров https://relishapp.com/rspec/rspec-expectations/v/3-3/docs/built-in-matchers
Если ты используешь капибару - то там есть набор своих не плохих матчеров, написанных на базе стандартных rspec Module: Capybara::RSpecMatchers — Documentation for jnicklas/capybara (master)

В других степах в общем проверки тоже могут быть, но не обязательно. В данном же случае вне зависимости от состояния приложения, которое ты тестишь - код твой выполнится. Верно он с работал или нет - ты не проверяешь, поэтому и шаг зеленый

Проблема в том, что юзая Capybara без обертки в срабатывают waiter-ы и я вижу как после клика происходит переход на другую страницу. А при использовании обертки этого не происходит, страница просто закрывается и всё.

Соответственно возникает предположение о том, что после клика откроется та страница которая прописана в класе, вне зависимости от того на какую ссылку ведет кнопка сабмита.

А как ты загружаешь элементы?
Вот так тест закрывается при переходе на другую страницу, если ты ее тут же не подгрузил.
page = IndexPage.new
page.load do |cp|
cp.submit_btn.click
assert_text cp.name_validation_error
end
Вот так будет норм:
page = IndexPage.new
page.load

1 лайк

Уже не актуально, 2 года все таки прошло) однако спасибо

Это хорошо, а то я как перешел на Ruby/Capibara/SitePrism с Java тоже столкнулся с этой проблемой :slight_smile:

Может вы знаете аналог TestNG для запуска System тестов на рельсах - в нужной последовательности?

Наши разрабы справляются Rspec-ом, целиком и полностью хватает с их потребностями.

Если вы не понимаете суть вопроса - зачем отвечать что попало?

Простите, не дочитал последнюю строчку про запуск в определенной последовательности…
В Рубях нет прямого аналога TestNG, для System и юнит-тестов есть 2 самых популярных фреймворка - Test::Unit + RSpec, однако так уж вышло, что часть фич которые есть в джава фреймворке для тестирования нет в Ruby.
Но это в общем и целом нормально, в Ruby такой подход, что для разных фич необходимо юзать разные джемы.
Если вы хотите распараллелить тесты или как-то определенно запускать то надо либо писать что-то свое либо юзать к примеру вот этот джем GitHub - grosser/parallel_tests: Ruby: 2 CPUs = 2x Testing Speed for RSpec, Test::Unit and Cucumber

Благодарю вас. Паралельный запуск попробую.