Rspec+;水豚:如何点击警报框

Rspec+;水豚:如何点击警报框,rspec,capybara,Rspec,Capybara,我已经通过水豚+点击警告框的帖子,但似乎没有任何效果。以下是我的设想: 场景:单击更新按钮时,会出现一个警报框,其中包含“确定”和“取消”按钮。单击“确定”,然后出现新表单 我正在编写请求规范,即使用rspec和capybara。主要问题是单击警报框:以下是我的代码: context "update" do before(:all) do Capybara.current_driver = :selenium end after(:all) do Capy

我已经通过水豚+点击警告框的帖子,但似乎没有任何效果。以下是我的设想:

场景:单击更新按钮时,会出现一个警报框,其中包含“确定”和“取消”按钮。单击“确定”,然后出现新表单

  • 我正在编写请求规范,即使用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_脚本('data-confirm=function(){return true;}')Selenium::WebDriver::Error::unexpected JavaScriptError:无效分配左侧#。/spec/requests/user_upgrades#spec.rb:30

  • 对于第二个例子,即

    page.driver.browser.switch_至.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:


    请让我知道如何继续

    您可以单击如下警告框:

    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