0

我正在使用 Capybara 和 Selenium 为我正在编写的 Cucumber 功能驱动 Firefox 浏览器。(不是 Cucumber 问题,但碰巧我正在使用 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模块的 a ,该模块定义#is_alert_present

在不引发异常的情况下,如何使用 Capybara 和 Selenium 测试 JavaScript 警报是否存在?仅给定 a Selenium::WebDriver::Driver,有没有办法访问 a Selenium::Client:Base

4

1 回答 1

0

嗯,我会试试这个:

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

ExpectedConditions是实现ExpectedCondition 接口中定义的有用条件的包装类。

于 2012-10-29T18:15:18.410 回答