如何确认与水豚的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模式窗口