Je dois vérifier l'existence d'Alert dans WebDriver.
Parfois, une alerte s'affiche, mais parfois, elle ne s'affiche pas. Je dois vérifier si l'alerte existe en premier, puis je peux l'accepter ou la rejeter ou elle dira: aucune alerte trouvée.
public boolean isAlertPresent()
{
try
{
driver.switchTo().alert();
return true;
} // try
catch (NoAlertPresentException Ex)
{
return false;
} // catch
} // isAlertPresent()
consultez le lien ici https://groups.google.com/forum/?fromgroups#!topic/webdriver/1GaSXFK76zY
Ce qui suit (implémentation C #, mais similaire en Java) vous permet de déterminer s’il existe une alerte sans exception ni créer l’objet WebDriverWait
.
boolean isDialogPresent(WebDriver driver) {
IAlert alert = ExpectedConditions.AlertIsPresent().Invoke(driver);
return (alert != null);
}
Je suggère d'utiliser ExpectedConditions et alertIsPresent () . ExpectedConditions est une classe wrapper qui implémente les conditions utiles définies dans ExpectedCondition interface.
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");
J'ai trouvé que l'exception de driver.switchTo().alert();
était si lente dans Firefox
(FF V20 & Selenium-Java-2.32.0).
Alors je choisis une autre manière:
private static boolean isDialogPresent(WebDriver driver) {
try {
driver.getTitle();
return false;
} catch (UnhandledAlertException e) {
// Modal dialog showed
return true;
}
}
Et c'est une meilleure solution lorsque la plupart de vos cas de test ne contiennent AUCUN dialogue (l'exception de lancement est coûteuse).
Je suggère d'utiliser ExpectedConditions et alertIsPresent () . ExpectedConditions est une classe wrapper qui implémente les conditions utiles définies dans ExpectedCondition interface.
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;
}
Note: Ceci est basé sur la réponse de nilesh, mais adapté pour attraper l'exception TimeoutException qui est levée par la méthode wait.until ().
public boolean isAlertPresent () {
try
{
driver.switchTo().alert();
system.out.println(" Alert Present");
}
catch (NoAlertPresentException e)
{
system.out.println("No Alert Present");
}
}
Ce code vérifiera si l'alerte est présente ou non.
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");
}
}
ExpectedConditions
est obsolète, donc:
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;
}
}