Rspec + Capybara:如何点击警告框

Ami*_*rni 38 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
    
    Run Code Online (Sandbox Code Playgroud)

    但执行脚本会给我以下错误:

    失败/错误:page.evaluate_script('data-confirm = function(){return true;}')Selenium :: WebDriver :: Error :: UnexpectedJavascriptError:左侧无效赋值#./ spec/summary/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 
    
    Run Code Online (Sandbox Code Playgroud)

我收到错误:

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

请让我知道如何进一步

sol*_*nic 32

您可以单击如下警告框:

page.driver.browser.switch_to.alert.accept
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于Capybara-webkit,就像OP一样 (6认同)
  • 非常感谢您的反馈.但我已经使用了上述代码,但没有成功. (3认同)
  • 也不适合我; 另外,我相信这个问题明确地解决了这个问题(参见上面列出的错误信息).因此,答案似乎建议使用已经陈述的问题在他目前的设置中对Amit不起作用.考虑到问题的背景,我不得不投票.对不起>.< (3认同)
  • 为我工作的水豚1.1.4.硒司机 (3认同)
  • 对于capybara-webkit:expect(page.driver.alert_messages.last).to eq text (2认同)

小智 26

这里更新了答案,因为上面的选项似乎都被弃用了.

Capybara :: Session#accept_alert似乎是现在实现此目的的最佳方式,其中触发警报的操作应该在块中传递. http://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_alert

例如:

page.accept_alert 'Alert text here' do
    click_button('Search')
end
Run Code Online (Sandbox Code Playgroud)


B S*_*ven 20

page.accept_alert
Run Code Online (Sandbox Code Playgroud)

使用Selenium为我工作.其他驱动程序可能有自己的语法.

正如Jillian Foley所说,其他答案似乎已被弃用.

  • 正如@ b-seven提到的其他驱动程序,在撰写本文时,PhantomJS的Poltergeist驱动程序还不支持`accept_alert`. (2认同)

chr*_*ill 13

如果要单击警告框的"确定"按钮,请尝试以下行:

page.evaluate_script('window.confirm = function() { return true; }')
Run Code Online (Sandbox Code Playgroud)

不要忘记用javascript标记标记您的测试

it "update user to trainer", js: true do
    ...
end
Run Code Online (Sandbox Code Playgroud)

并在您的spec_helper文件中启用Capybara.javascript_driver:webkit或:selenium


小智 11

对于WebKit:

page.accept_confirm { click_button "Upgrade" }
Run Code Online (Sandbox Code Playgroud)

对于Selenium:

page.driver.browser.switch_to.alert.accept
Run Code Online (Sandbox Code Playgroud)


stu*_*ujo 6

我知道这很旧,但这现在也适用于 poltergeist:

page.accept_alert
Run Code Online (Sandbox Code Playgroud)