如何使用Capybara确认javascript弹出窗口?

Eri*_* M. 67 testing ruby-on-rails capybara

我在网上尝试了几个例子,但没有运气.我期待确认删除链接的确认消息.最后一次尝试是下面的代码,但是导致了Capybara :: NotSupportedByDriverError错误.

def confirm_dialog
  page.evaluate_script('window.confirm = function() { return true; }')
end
Run Code Online (Sandbox Code Playgroud)

Pet*_*xey 51

首先,通过在场景前添加@javascript标记,切换到使用Selenium作为驱动程序.

黄瓜步骤中的以下代码将确认对话:

page.driver.browser.switch_to.alert.accept
# or
page.driver.browser.switch_to.alert.dismiss
# or
page.driver.browser.switch_to.alert.text
Run Code Online (Sandbox Code Playgroud)

正如@NobbZ所说,这个问题在此之前已经被问及并回答:如何测试与Cucumber的确认对话框?.

此处提供了更多的selenium文档:http://code.google.com/p/selenium/wiki/RubyBindings#JavaScript_dialogs

  • 未定义的方法`switch_to'for#<Capybara :: RackTest :: Browser:0x007ffca8a79890> (3认同)

ret*_*ant 45

为2016年及以后的人们提供答案.您现在可以直接使用Capybara接受确认框.您可以通过包装导致确认框出现在accept_confirm函数中的代码来完成此操作.

accept_confirm do
  click_link 'Destroy'
end
Run Code Online (Sandbox Code Playgroud)

  • 你好,未来(2017年).谢谢你的回答. (8认同)
  • Stills 也适用于 Rails 6。谢谢! (2认同)

小智 15

for capybara-webkit:

page.driver.browser.accept_js_confirms
page.driver.browser.reject_js_confirms
Run Code Online (Sandbox Code Playgroud)

这仍然有效,但文档也说:

page.driver.accept_js_confirms!
page.driver.accept_js_confirms!
Run Code Online (Sandbox Code Playgroud)

请参阅https://github.com/thoughtbot/capybara-webkit,搜索"accept_js_confirms"

  • 它通过page.driver.accept_js_confirms为我工作!(确实来自https://github.com/thoughtbot/capybara-webkit) (2认同)

小智 10

我在CI环境中遇到了浏览器对话框的时间问题,因此我在接受之前轮询对话框:

def accept_browser_dialog
  wait = Selenium::WebDriver::Wait.new(:timeout => 30)
  wait.until {
    begin
      page.driver.browser.switch_to.alert
      true
    rescue Selenium::WebDriver::Error::NoAlertPresentError
      false
    end
  }
  page.driver.browser.switch_to.alert.accept
end
Run Code Online (Sandbox Code Playgroud)


Mic*_*aev 6

我不得不在webkit测试中使用sleep,因为它会在每次运行时失败,否则会失败.

以下是我在阅读每篇文章后想出的内容:

if page.driver.class == Capybara::Selenium::Driver
  page.driver.browser.switch_to.alert.accept
elsif page.driver.class == Capybara::Webkit::Driver
  sleep 1 # prevent test from failing by waiting for popup
  page.driver.browser.accept_js_confirms
else
  raise "Unsupported driver"
end
Run Code Online (Sandbox Code Playgroud)


Nob*_*bbZ 2

我猜你必须将 selenium 添加到你的 gem 文件中并配置它,并且水豚使用 selenium 作为驱动程序。

我还认为如何使用 Cucumber 测试确认对话框?与您的问题非常相似,尤其是接受的答案。