4

我有一个带有 onbeforeunload 功能的“ask_a_question”页面,可以在未保存某些内容之前提醒用户(嘿!像 SO :P)。我正在使用带有 capybara 和 webdriver 的 cucumber 对其进行测试,添加 @javascript 标签,因为它使用了大量的 javascript。黄瓜功能可能如下所示:

@javascript
Scenario: add a question
    Given I login as "Mauricio"
    And I go to the create question page 
    Then I should see "Ask a Question" within "header"

但是一旦测试通过,Capybara(或 WebDriver,我不知道)会尝试为其他测试重用相同的浏览器窗口,然后会显示 onbeforeunload 警报,使以下测试出错。

因为我的功能本身并没有关闭或退出页面。我认为添加一些内容来接受警报可能不是一个好主意。但老实说,我很迷茫。

如何告诉 capybara 为每个 @javascript 测试使用新的浏览器窗口或自动关闭 onbeforeunload 警报?

谢谢

4

2 回答 2

5

您可以使用 page.driver.browser.switch_to.alert.dismiss (此处的文档)来摆脱警报。

你可以在钩子后把这个放在黄瓜里

After "@javascript" do
  page.driver.browser.switch_to.alert.dismiss
  # or accept it if that is what you prefer
  page.driver.browser.switch_to.alert.accept
end
于 2011-04-12T09:34:26.967 回答
2

对于任何使用 Rspec 和 Capybara 的人来说,一个类似的答案。此代码在每次测试后访问“about:blank”。

context 'page that displays an alert when navigating away' do

  after(:each) do
    begin
      accept_confirm { visit('about:blank') }
    rescue Capybara::ModalNotFound
      # For examples that don't end with an alert
    end
  end

  ...
end
于 2015-05-06T20:53:03.590 回答