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");
Firefox
(FF V20&Selenium-Java-2.32.0)では、driver.switchTo().alert();
の例外のキャッチが非常に遅いことがわかりました。
だから私は別の方法を選択します:
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 static void isAlertPresent(){
try{
Alert alert = driver.switchTo().alert();
System.out.println(alert.getText()+" Alert is Displayed");
}
catch(NoAlertPresentException ex){
System.out.println("Alert is NOT Displayed");
}
}
public boolean isAlertPresent(){
try
{
driver.switchTo().alert();
system.out.println(" Alert Present");
}
catch (NoAlertPresentException e)
{
system.out.println("No Alert Present");
}
}
ExpectedConditions
は廃止されているため、次のとおりです。
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.AlertIsPresent());
public static void handleAlert(){
if(isAlertPresent()){
Alert alert = driver.switchTo().alert();
System.out.println(alert.getText());
alert.accept();
}
}
public static boolean isAlertPresent(){
try{
driver.switchTo().alert();
return true;
}catch(NoAlertPresentException ex){
return false;
}
}