Rspec+;水豚:如何点击警报框
我已经通过水豚+点击警告框的帖子,但似乎没有任何效果。以下是我的设想: 场景:单击更新按钮时,会出现一个警报框,其中包含“确定”和“取消”按钮。单击“确定”,然后出现新表单Rspec+;水豚:如何点击警报框,rspec,capybara,Rspec,Capybara,我已经通过水豚+点击警告框的帖子,但似乎没有任何效果。以下是我的设想: 场景:单击更新按钮时,会出现一个警报框,其中包含“确定”和“取消”按钮。单击“确定”,然后出现新表单 我正在编写请求规范,即使用rspec和capybara。主要问题是单击警报框:以下是我的代码: context "update" do before(:all) do Capybara.current_driver = :selenium end after(:all) do Capy
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_脚本('data-confirm=function(){return true;}')Selenium::WebDriver::Error::unexpected JavaScriptError:无效分配左侧#。/spec/requests/user_upgrades#spec.rb:30
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
如果要单击警报框的“确定”按钮,请尝试此行:
page.evaluate_script('window.confirm = function() { return true; }')
别忘了用javascript标志标记测试
it "update user to trainer", js: true do
...
end
并在您的spec_helper文件中启用Capybara.javascript_驱动程序:webkit或:selenium此处更新了答案,因为上面的选项似乎都已被弃用 水豚:Session#accept_警报现在似乎是实现这一点的最佳方式,触发警报的操作应该在块中传递。 e、 g: 使用硒为我工作。其他驱动程序可能有自己的语法 正如Jillian Foley所提到的,其他答案似乎已被弃用。对于WebKit:
page.accept_confirm { click_button "Upgrade" }
对于硒:
page.driver.browser.switch_to.alert.accept
我知道这很古老,但这在恶作剧中也适用:
page.accept_alert
非常感谢您的反馈。但是我已经使用了上面的代码,但是没有成功。也不适合我;另外,我相信这个问题明确地解决了这个方法(请参阅列出的最后一条错误消息)。因此,答案似乎表明,在阿米特目前的设置中,使用问题已经指出的东西对他不起作用。考虑到问题的背景,我不得不投反对票。抱歉>。这不适用于Capybara webkit,就像适用于我的Opybara 1.1.4一样。Selenium driverFor capybara webkit:expect(page.driver.alert\u messages.last)。要平衡文本,不能用破折号命名JavaScript变量<代码>数据确认=功能…不合法。它看起来像
(foo-bar)=function(){…}
。这是左侧#…用户升级_spec.rb:30
错误。用camelCase命名JavaScript变量。我得到一个未定义的方法
接受#`的#`警报',尽管根据文档,这是一个Capybara::Session
的方法。有什么想法吗?可能是水豚的旧版本,accept\u alert
于年引入。考虑运行<代码>捆绑更新CybBARA<代码> @ @ B-7提到其他驱动程序,在编写时,PoTeGIST驱动程序对于PHOTANMOJS还不支持<代码> AcctTyAlgt/<代码>。太好了!对我来说很好@在所有答案中,这是唯一一个对我有效的答案。
page.driver.browser.switch_to.alert.accept
page.accept_alert