在不引发异常的情况下,如何使用Capybara和Selenium测试是否存在JavaScript警报?

时间:2012-10-29 05:53:00

标签: selenium capybara

我正在使用Capybara和Selenium为我正在编写的Cucumber功能驱动Firefox浏览器。 (不是黄瓜问题,但是当它发生时,我正在使用Cucumber。)我有一步:

Then /^I should see a confirmation of the change$/ do
  expect{page.driver.browser.switch_to.alert}.not_to raise_exception
end

(真实的实现测试了异常的类型并使用一些魔法来确定我看到的确认具有正确的文本。为简洁起见,该代码被排除在外。)

我的问题是,为了测试是否存在模态对话框,我可能需要引发异常。从哲学上讲,这是一个问题,因为这不是例外行为。这很简单。

Selenium中有一个#is_alert_present方法,但似乎没有任何方法可以访问它:

  • page.driver给了我一个Capybara::Selenium::Driver
  • page.driver.browser给了我一个Selenium::WebDriver::Driver(在我的例子中,它是一个Firefox驱动程序)。
  • 这两个对象似乎都无法访问包含Selenium::Client::Base模块的Selenium::Client::GeneratedDriver,该模块定义了#is_alert_present

如果没有引发异常,如何使用Capybara和Selenium测试是否存在JavaScript警报?仅提供Selenium::WebDriver::Driver,是否有办法访问Selenium::Client:Base

1 个答案:

答案 0 :(得分:0)

嗯 我会试试这个:

WebDriverWait wait = new WebDriverWait(driver, 300 /*timeout in seconds*/);
 if(wait.until(ExpectedConditions.alertIsPresent())==null)
      return false;
 else
      return true;

ExpectedConditions是一个包装类,它实现了ExpectedCondition接口中定义的有用条件。