Как проверить всплывающее окно подтверждения огурца в Ruby on Rails - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь протестировать функцию моего приложения в Ruby on Rails от Cucumber и Capybara: когда вы нажимаете кнопку «удалить», появляется подтверждение « Вы уверены? »Затем предполагается нажать« ОК ».

Сначала я просто попробовал

Given('I accept the popup') do
  click_button('OK')
end

Тогда огурец сгенерирует ошибку:

Unable to find button "OK" (Capybara::ElementNotFound)

Тогда я попробовал:

Given('I accept the popup') do
  page.driver.browser.switch_to.alert.accept
end

как упомянуто в Как проверить диалог подтверждения с огурцом? Огурец кинь эту ошибку:

undefined method `switch_to' for #<Capybara::RackTest::Browser:0x0000000009241c20> (NoMethodError)

Затем я попытался добавить «@javascript» перед моим сценарием в «test.feature», например:

@javascript
Scenario: Admin can manage scales
  Given I am on Scales page
  Given I destroy a scale
  Given I accept the popup
  Then I should see "Scale deleted"

Тогда огурец сгенерирует ошибку:

Unable to find Mozilla geckodriver. Please download the server from https://github.com/mozilla/geckodriver/releases and place it somewhere on your PATH. More info at https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver.

Я так растерялся. Я неправильно сконфигурировал среду?

Мой Gemfile:

group :test do
  gem 'shoulda-matchers'
  gem 'simplecov', :require => false
  gem 'rails-controller-testing', '1.0.2'
  gem 'minitest-reporters', '1.1.14'
  gem 'guard', '2.13.0'
  gem 'guard-minitest', '2.4.4'
  gem 'capybara'
  gem 'launchy'
  gem 'selenium-webdriver'
  gem 'cucumber-rails', :require => false
  gem 'cucumber-rails-training-wheels'
end

Мой web_steps.rb:

require 'uri'
require 'cgi'
require 'selenium-webdriver'

1 Ответ

0 голосов
/ 12 апреля 2019

При тестировании с драйвером, который не поддерживает JS (RackTest), очевидно, что вы не можете протестировать модальные системы, запускаемые JS. Добавив тег @javascript в свой тест, вы сказали Capybara переключиться на использование драйвера, который поддерживает JS (драйвер селена).

Следующая ошибка, которую вы получаете, говорит само за себя - у вас не установлено geckodriver в вашей системе, что необходимо для селена для общения с Firefox - если вы настроили свой драйвер для общения с Chrome, это нужно chromedriver. Самый простой способ установить их - добавить webdrivers к вашим тестовым гемам - https://github.com/titusfortner/webdrivers#usage

Как только вы это решите, вам нужно будет написать свои шаги, чтобы они в итоге запустили код

page.accept_confirm do
  click_button('delete') # The action that causes the confirm modal to appear
end

Если вы также хотите проверить сообщение в модале подтверждения, это будет

page.accept_confirm "Are you sure? do
  click_button('delete')
end
...