我已经尝试了几个在网上找到的示例,但是没有运气。我希望确认删除链接的确认消息。最后的尝试是下面的代码,但是导致Capybara :: NotSupportedByDriverError错误。
def confirm_dialog
page.evaluate_script('window.confirm = function() { return true; }')
end
我已经尝试了几个在网上找到的示例,但是没有运气。我希望确认删除链接的确认消息。最后的尝试是下面的代码,但是导致Capybara :: NotSupportedByDriverError错误。
def confirm_dialog
page.evaluate_script('window.confirm = function() { return true; }')
end
Answers:
为2016年及以后实现这一目标的人添加答案。现在,您可以直接使用水豚来接受确认框。您可以通过包装使确认框显示在accept_confirm函数。
accept_confirm do
click_link 'Destroy'
end
首先,通过在场景前面放置@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
正如@NobbZ所说,此问题在此之前已被问过并回答过:如何用Cucumber测试确认对话框?。
这里也提供了更多硒文档:http : //code.google.com/p/selenium/wiki/RubyBindings#JavaScript_dialogs
Capybara.current_driver = :selenium
否则在示例中添加js:true即可将驱动程序:selenium
默认设置为默认值Capybara.javascript_driver
page.driver.browser.switch_to
但收到了DEPRECATION警告,但被提示:stackoverflow.com/questions/26275359/…–
对于capybara-webkit:
page.driver.browser.accept_js_confirms
page.driver.browser.reject_js_confirms
仍然可以使用,但是文档中还显示:
page.driver.accept_js_confirms!
page.driver.accept_js_confirms!
参见https://github.com/thoughtbot/capybara-webkit,搜索“ accept_js_confirms”
在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
我必须在webkit测试中使用睡眠,因为它会立即失败,否则会失败。
这是我阅读每个人的帖子后想到的:
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
我猜想您必须将硒添加到您的gem文件中并对其进行配置,并且必须使capybara使用capybara使用硒作为驱动程序。
我也认为如何用黄瓜测试确认对话框?与您的问题非常相似,尤其是已接受的答案。
尝试添加:js => true
到您的测试中。
RSpec的元数据功能可用于切换到其他驱动程序。使用:js => true可以切换到javascript驱动程序,或者提供:driver选项可以切换到一个特定的驱动程序。例如:
it 'will use the default js driver' :js => true do
...
end