如何确认与水豚的JavaScriptpopup?

我已经尝试了几个在线发现的例子,但没有运气。 我正在查看确认删除链接的确认消息。 最后一次尝试是下面的代码,但是导致了一个Capybara :: NotSupportedByDriverError错误。

def confirm_dialog page.evaluate_script('window.confirm = function() { return true; }') 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所说,这个问题已经在这里被问及回答了: 如何用黄瓜testing确认对话框? 。

更多的selenium文件在这里也可以: http : //code.google.com/p/selenium/wiki/RubyBindings#JavaScript_dialogs

为2016年及以后的人添加一个答案。 您现在可以直接使用水豚接受确认框。 您可以通过包装导致确认框出现在accept_confirm函数中的代码来执行此操作。

 accept_confirm do click_link 'Destroy' end 

对于水豚-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 ,search“accept_js_confirms”

我不得不在WebKittesting中使用睡眠,因为它会每一次都会失败。

这是我阅读每个人的post后想到的:

 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 

我在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 

我猜想你必须把selenium加到你的gem文件中,并configuration它和capybara,那水豚使用selenium作为驱动程序。

我想也是如何testing与黄瓜确认对话框? 与你的问题非常相似,尤其是被接受的答案。

尝试添加:js => true你的testing。

RSpec的元数据function可以用来切换到不同的驱动程序。 使用:js => true切换到javascript驱动程序,或者提供:driver选项来切换到一个特定的驱动程序。 例如:

 it 'will use the default js driver' :js => true do ... end 

在水豚它很容易接受模型窗口。 即使我们在selenium中也能做到这一点,但对于不了解selenium的人来说,这是一件难事。

page.accept_modal#这将接受模态窗口

page.dismiss_modal#这将拒绝/closures模式窗口