WebDriver で Alert の存在を確認する必要があります。
アラートがポップアップする場合もありますが、ポップアップしない場合もあります。最初にアラートが存在するかどうかを確認する必要があります。次に、アラートを受け入れるか無視するか、「アラートが見つかりません」と表示されます。
public boolean isAlertPresent()
{
try
{
driver.switchTo().alert();
return true;
} // try
catch (NoAlertPresentException Ex)
{
return false;
} // catch
} // isAlertPresent()
ここのリンクを確認してください https://groups.google.com/forum/?fromgroups#!topic/webdriver/1GaSXFK76zY
次の (C# の実装ですが、Java での実装と似ています) を使用すると、WebDriverWait
オブジェクトを作成せずに、例外なしでアラートがあるかどうかを判断できます。
boolean isDialogPresent(WebDriver driver) {
IAlert alert = ExpectedConditions.AlertIsPresent().Invoke(driver);
return (alert != null);
}
ExpectedConditionsとalertIsPresent()を使用することをお勧めします。ExpectedConditions は、 ExpectedConditionインターフェイスで定義された便利な条件を実装するラッパー クラスです。
WebDriverWait wait = new WebDriverWait(driver, 300 /*timeout in seconds*/);
if(wait.until(ExpectedConditions.alertIsPresent())==null)
System.out.println("alert was not present");
else
System.out.println("alert was present");
(FF V20 & selenium-java-2.32.0)での例外のキャッチdriver.switchTo().alert();
が非常に遅いことがわかりました。Firefox
だから私は別の方法を選択します:
private static boolean isDialogPresent(WebDriver driver) {
try {
driver.getTitle();
return false;
} catch (UnhandledAlertException e) {
// Modal dialog showed
return true;
}
}
また、ほとんどのテスト ケースにダイアログが存在しない場合 (例外のスローはコストがかかる) には、より良い方法です。
ExpectedConditionsとalertIsPresent()を使用することをお勧めします。ExpectedConditions は、 ExpectedConditionインターフェイスで定義された便利な条件を実装するラッパー クラスです。
public boolean isAlertPresent(){
boolean foundAlert = false;
WebDriverWait wait = new WebDriverWait(driver, 0 /*timeout in seconds*/);
try {
wait.until(ExpectedConditions.alertIsPresent());
foundAlert = true;
} catch (TimeoutException eTO) {
foundAlert = false;
}
return foundAlert;
}
注: これは nilesh による回答に基づいていますが、wait.until() メソッドによってスローされる TimeoutException をキャッチするように調整されています。
public boolean isAlertPresent() {
try
{
driver.switchTo().alert();
system.out.println(" Alert Present");
}
catch (NoAlertPresentException e)
{
system.out.println("No Alert Present");
}
}