2013-05-08 1 views
1

Je le script suivant Sélénium pour l'ouverture d'alerte sur rediff.com:Alert ne ferme pas en utilisant Selenium WebDriver avec Google Chrome.

public class TestC { 
    public static void main(String[] args) throws InterruptedException, Exception { 
     System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe"); 
     WebDriver driver = new ChromeDriver(); 
     driver.get("http://www.rediff.com/"); 
     driver.findElement(By.xpath("//*[@id='signin_info']/a[1]")).click(); 
     driver.findElement(By.id("btn_login")).click(); 
     Thread.sleep(5000); 
     Alert alert=driver.switchTo().alert(); 
     alert.accept(); 
    } 
} 

Ce même script fonctionne bien dans Firefox et IE9, mais en utilisant Google Chrome après l'ouverture de l'alerte, reste du code n'est pas travail. La chose principale est que cela ne montre aucune exception, erreur ou quoi que ce soit.

Veuillez fournir une solution dès que possible. Merci beaucoup!

Note: Si nous devons changer n'importe quel paramètre du navigateur ou quelque chose s'il vous plaît faites le moi savoir.

Selenium version:Selenium(2) Webdriver 
OS:Windows 7 
Browser:Chrome 
Browser version:26.0.1410.64 m 
+0

Quelle version de chromedriver.exe vous utilisez? Si vous utilisez chromedriver2, je ne crois pas que la gestion des alertes fonctionne avec Chrome 26. – JimEvans

+0

Yup..i avait trié mon problème en utilisant le changement de pilote. Maintenant l'alerte est très bien fermée dans mon script. – user2346307

Répondre

1

Je suis assez sûr que votre problème est très commun, c'est pourquoi je conseille de ne jamais en utilisant Thread.sleep(), car il ne garantit pas le code ne fonctionnera que lorsque le Alert apparaît, aussi, il peut ajouter le temps à vos tests même lorsque l'alerte est affichée.

Le code ci-dessous devrait attendre seulement qu'une alerte soit affichée sur la page, et je vous conseille d'utiliser celui-ci Firefox et IE9 aussi.

public class TestC { 
    public static void main(String[] args) throws InterruptedException, Exception { 
     System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe"); 
     WebDriver driver = new ChromeDriver(); 
     WebDriverWait wait = new WebDriverWait(driver, 5); 

     driver.get("http://www.rediff.com/"); 
     driver.findElement(By.xpath("//*[@id='signin_info']/a[1]")).click(); 
     driver.findElement(By.id("btn_login")).click(); 

     wait.until(ExpectedConditions.alertIsPresent()); 

     Alert alert = driver.switchTo().alert(); 
     alert.accept(); 
    } 
} 

La plupart du temps tout ce qui est fait ici, est en train de changer Thread.sleep(), pour une condition qui en fait ne fera aller de l'avant sur le code dès un alert() est présent dans la page. Dès que quelqu'un le fait, il passera à l'accepter.

Vous pouvez trouver le Javadoc pour l'ensemble ExpectedConditions classe here.

0

Malheureusement AlertIsPresent n'existe pas en C# API http://selenium.googlecode.com/git/docs/api/dotnet/index.html

Vous pouvez utiliser quelque chose comme ceci:

private static bool TryToAcceptAlert(this IWebDriver driver) 
{ 
    try 
    { 
     var alert = driver.SwitchTo().Alert(); 
     alert.Accept(); 
     return true; 
    } 
    catch (Exception) 
    { 
     return false; 
    } 
} 


public static void AcceptAlert(this IWebDriver driver, int timeOutInSeconds = ElementTimeout) 
{ 
    new WebDriverWait(driver, TimeSpan.FromSeconds(timeOutInSeconds)).Until(
     delegate { return driver.TryToAcceptAlert(); } 
     ); 
} 
+0

Merci pour la réponse, mais j'utilise java c'est ainsi que je trouve la méthode AlertIsPresent. – user2346307

Questions connexes