капибара селен и JavaScript уничтожить - PullRequest
5 голосов
/ 13 мая 2010

Я использую рельсы 2.3.5, и это то, что я сделал. У меня установлены последние огурцы, огурцы и капибара.

rails demo
cd demo
ruby script/generate cucumber --rspec --capybara
ruby script/generate feature post title:string body:text published:boolean
ruby script/generate scaffold post title:string body:text published:boolean
rake db:migrate
rake cucumber

Все тесты проходят. Теперь я хочу протестировать, используя Javascript.

В настоящее время так выглядит сценарий

  Scenario: Delete post
    Given the following posts:
      |title|body|published|
      |title 1|body 1|false|
      |title 2|body 2|true|
      |title 3|body 3|false|
      |title 4|body 4|true|
    When I delete the 3rd post
    Then I should see the following posts:
      |Title|Body|Published|
      |title 1|body 1|false|
      |title 2|body 2|true|
      |title 4|body 4|true|

Я добавил @javascript вверху.

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

Что мне нужно сделать, чтобы автоматически нажимать ОК и тестирование продолжалось.

Ответы [ 3 ]

8 голосов
/ 31 мая 2010

Ну, это своего рода хак, но я думаю, что сейчас это единственный способ:

When /^I confirm a js popup on the next step$/ do
  page.evaluate_script("window.alert = function(msg) { return true; }")
  page.evaluate_script("window.confirm = function(msg) { return true; }")
end

Вы должны поместить этот шаг прямо перед тем, который вызывает всплывающее окно подтверждения (по ссылке) Это изменит стандартное предупреждение и подтвердит поведение, чтобы всегда возвращать true. Таким образом, вам не нужно нажимать кнопку «ОК» самостоятельно.

2 голосов
/ 11 июля 2011

Я реализовал вариант решения Тобиаса.

Я хотел, чтобы были такие шаги, как When I follow the "Delete" link for customer "Alice Angry", поэтому у меня есть следующее:

When /^(.*) and (?:|I )click "OK"$/ do |step|
  click_ok_after { When step }
end

module JavascriptHelpers
  def click_ok_after
    begin
      page.evaluate_script("window.alert = function(msg) { return true; }")
      page.evaluate_script("window.confirm = function(msg) { return true; }")
    rescue Capybara::NotSupportedByDriverError
      # do nothing: we're not testing javascript
    ensure
      yield
    end
  end
end
World(JavascriptHelpers)

Полное объяснение можно найти в сообщении в блоге, о котором я написал здесь http://davidsulc.com/blog/2011/07/10/cucumber-tweaks/ (включая полезное определение шага для тестирования содержимого в контейнерах HTML).

0 голосов
/ 05 ноября 2010

Спасибо Стивену за его решение, вот как я изменил его, чтобы он читался немного лучше:

When /^I follow "([^"]*)" and click OK$/ do |text|
  page.evaluate_script("window.alert = function(msg) { return true; }")
  page.evaluate_script("window.confirm = function(msg) { return true; }")
  When %{I follow "#{text}"}
end
...