从警报中获取文本以与字符串进行比较 - Cucumber + Capybara + Rspec

Get text from Alert to compare with string - Cucumber + Capybara + Rspec

我需要获取出现在警报中的文本,以便与测试预期的文本字符串进行比较。

我正在使用 Cucumber + Ruby + rspec 和 Capybara。

我尝试了以下方法:

Then(/^I see the message "([^"]*)"$/) do |mensagemsucesso|

    TextAlert = page.driver.browser.switch_to.alert.text
    sleep(5)
    Expect(textAlert).to eql mensagemsucesso

End

错误:

No modal dialog is currently open (Selenium::WebDriver::Error::NoSuchAlertError)

假设您正在谈论由 JS alertconfirmprompt 触发的模态系统警报,那么您需要使用水豚方法 accept_alertaccept_confirmdismiss_confirmaccept_promptdismiss_prompt - http://www.rubydoc.info/gems/capybara/Capybara/Session#accept_alert-instance_method

所有这些都将 return 模态显示的文本,或者您可以传入一个字符串,该字符串将根据模态的文本进行测试,如果不匹配则引发错误。他们还需要采取一个具有触发模态的动作的块,因此如果单击 link 触发它,您的步骤可能类似于

When /^(?:|I ) click "([^"]*)" and accept "([^"]*)"$/ do |link, msg|
  accept_alert msg do
    click_link(link)
  end
end