我已经查看了水豚的帖子+点击警告框但似乎没有任何工作。以下是我的情景:
场景:点击更新按钮时会出现一个警告框,其中包含“确定”和“取消”按钮。点击“确定”,然后出现新表格。
我正在编写请求规范,即使用rspec和capybara。主要问题是单击警告框:以下是我的代码:
context "update" do
before(:all) do
Capybara.current_driver = :selenium
end
after(:all) do
Capybara.use_default_driver
end
it "update user to trainer" do
click_button('Search')
sleep 3
page.evaluate_script('data-confirm = function() { return true; }')
page.click('OK')
click_button('Upgrade')
end
end
但是执行脚本会给我以下错误:
失败/错误:page.evaluate_script('data-confirm = function(){return true;}')Selenium :: WebDriver :: Error :: UnexpectedJavascriptError:无效的赋值左侧#。/ spec / requests / user_upgrades_spec.rb:30
对于第二个例子,即
page.driver.browser.switch_to.alert.accept
我的代码:
context "update" do
before(:all) do
Capybara.current_driver = :selenium
end
after(:all) do
Capybara.use_default_driver
end
it "update user to trainer" do
click_button('Search')
sleep 3
click_button('Upgrade')
page.driver.browser.switch_to.alert.accept
end
end
我收到错误:
失败/错误:page.driver.browser.switch_to.alert.accept Selenium :: WebDriver :: Error :: UnhandledError:
请让我知道如何继续进行
答案 0 :(得分:28)
您可以点击如下警告框:
page.driver.browser.switch_to.alert.accept
答案 1 :(得分:25)
此处更新了答案,因为上述选项似乎已全部弃用。
Capybara :: Session#accept_alert现在似乎是实现此目的的最佳方式,其中触发警报的操作应该在块中传递。 http://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_alert
e.g:
page.accept_alert 'Alert text here' do
click_button('Search')
end
答案 2 :(得分:19)
page.accept_alert
使用Selenium为我工作。其他驱动程序可能有自己的语法。
正如Jillian Foley所说,其他答案似乎已被弃用。
答案 3 :(得分:13)
如果要单击警告框的“确定”按钮,请尝试使用此行:
page.evaluate_script('window.confirm = function() { return true; }')
不要忘记使用javascript标记
标记您的测试it "update user to trainer", js: true do
...
end
并在您的spec_helper文件中启用Capybara.javascript_driver:webkit或:selenium
答案 4 :(得分:9)
对于WebKit:
page.accept_confirm { click_button "Upgrade" }
对于Selenium:
page.driver.browser.switch_to.alert.accept
答案 5 :(得分:1)
我知道这已经过时了,但现在也可以在恶作剧中使用:
page.accept_alert