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#is_alert_present

例外を発生させずに、Capybara と Selenium を使用して JavaScript アラートの存在をテストするにはどうすればよいですか? のみが与えられた場合、Selenium::WebDriver::Driverにアクセスする方法はあります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;

ExpectedConditionsExpectedCondition インターフェイスで定義された便利な条件を実装するラッパー クラスです。

于 2012-10-29T18:15:18.410 に答える