Rspec + Capybara:如何点击警告框

时间:2011-08-03 05:54:41

标签: rspec capybara

我已经查看了水豚的帖子+点击警告框但似乎没有任何工作。以下是我的情景:

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

  1. 我正在编写请求规范,即使用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

  2. 对于第二个例子,即

      

    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 
    
  3. 我收到错误:

      

    失败/错误:page.driver.browser.switch_to.alert.accept Selenium :: WebDriver :: Error :: UnhandledError:

    请让我知道如何继续进行

6 个答案:

答案 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