Обработка предупреждений в Selenium WebDriver (selenium 2) с Java
Я хочу определить, появилось ли предупреждение или нет. В настоящее время я использую следующий код:
try {
Alert alert = webDriver.switchTo().alert();
// check if alert exists
// TODO find better way
alert.getText();
// alert handling
log().info("Alert detected: {}" + alert.getText());
alert.accept();
} catch (Exception e) {
}
Проблема заключается в том, что если в текущем состоянии веб-страницы нет предупреждения, она ожидает определенное количество времени до достижения таймаута, а затем генерирует исключение, и поэтому производительность очень плохая.
Есть ли лучший способ, возможно, обработчик предупреждений, который я могу использовать для динамически возникающих предупреждений?
Ответы
Ответ 1
Это то, что сработало для меня с помощью Explicit Wait отсюда WebDriver: расширенное использование
public void checkAlert() {
try {
WebDriverWait wait = new WebDriverWait(driver, 2);
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = driver.switchTo().alert();
alert.accept();
} catch (Exception e) {
//exception handling
}
}
Ответ 2
Напишите следующий метод:
public boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} // try
catch (Exception e) {
return false;
} // catch
}
Теперь вы можете проверить наличие оповещения или нет, используя метод, написанный выше, как показано ниже:
if (isAlertPresent()) {
driver.switchTo().alert();
driver.switchTo().alert().accept();
driver.switchTo().defaultContent();
}
Ответ 3
Alert alert = driver.switchTo().alert();
alert.accept();
Вы также можете отказаться от окна предупреждения:
Alert alert = driver.switchTo().alert();
alert().dismiss();
Ответ 4
try
{
//Handle the alert pop-up using seithTO alert statement
Alert alert = driver.switchTo().alert();
//Print alert is present
System.out.println("Alert is present");
//get the message which is present on pop-up
String message = alert.getText();
//print the pop-up message
System.out.println(message);
alert.sendKeys("");
//Click on OK button on pop-up
alert.accept();
}
catch (NoAlertPresentException e)
{
//if alert is not present print message
System.out.println("alert is not present");
}
Ответ 5
Вы можете попробовать
try{
if(webDriver.switchTo().alert() != null){
Alert alert = webDriver.switchTo().alert();
alert.getText();
//etc.
}
}catch(Exception e){}
Если это не сработает, вы можете попробовать выполнить цикл через все дескрипторы окна и посмотреть, существует ли предупреждение. Я не уверен, откроется ли предупреждение в виде нового окна с использованием селена.
for(String s: webDriver.getWindowHandles()){
//see if alert exists here.
}