Je veux détecter si une alerte est apparue ou non. J'utilise actuellement le code suivant:
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) {
}
Le problème est que s'il n'y a pas d'alerte sur l'état actuel de la page Web, celle-ci attend pendant un laps de temps spécifique jusqu'à ce que le délai soit atteinte, puis émet une exception et les performances sont donc vraiment mauvaises.
Existe-t-il un meilleur moyen, peut-être un gestionnaire d'événements d'alerte que je peux utiliser pour les alertes dynamiques?
C'est ce qui a fonctionné pour moi en utilisant l'attente explicite d'ici WebDriver: Utilisation avancée
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
}
}
Écrivez la méthode suivante:
public boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} // try
catch (Exception e) {
return false;
} // catch
}
Maintenant, vous pouvez vérifier si alert est présent ou non en utilisant la méthode décrite ci-dessus:
if (isAlertPresent()) {
driver.switchTo().alert();
driver.switchTo().alert().accept();
driver.switchTo().defaultContent();
}
Alerte alerte = driver.switchTo (). Alert (); Alert.accept ();
Vous pouvez également refuser la boîte d’alerte:
Alerte alerte = driver.switchTo (). Alert (); Alert ().
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");
}
Tu pourrais essayer
try{
if(webDriver.switchTo().alert() != null){
Alert alert = webDriver.switchTo().alert();
alert.getText();
//etc.
}
}catch(Exception e){}
Si cela ne fonctionne pas, vous pouvez essayer de parcourir toutes les poignées de fenêtre et voir si l'alerte existe. Je ne sais pas si l'alerte s'ouvre dans une nouvelle fenêtre à l'aide de Selenium.
for(String s: webDriver.getWindowHandles()){
//see if alert exists here.
}