web-dev-qa-db-fra.com

Comment attendre une page avant de passer à une autre page de Selenium WebDriver en Java?

Je suis nouveau dans le sélénium. J'utilise Selenium WebDriver avec Java. J'utilise Eclipse comme IDE. J'ai écrit du code pour la page de connexion et il est exécuté avec succès. Maintenant, je veux aller à la page désirée après une connexion réussie, mais je veux attendre quelques temps avant de passer à une autre page. Comment puis-je attendre une page avant de charger une autre page?

6
Nasrin Naher

Pour autant que je sache, il y a 3 façons:

  1. Attente implicite: (applicable à tous les éléments de la page)

    driver.manage().timeouts().implicitlyWait(A_GIVEN_NUMBER, TimeUnit.SECONDS);

  2. Attente explicite: (Applicable pour un élément particulier)

    WebDriverWait.until(CONDITION_THAT_FINDS_AN_ELEMENT);

Le code plus spécifique est comme ci-dessous:

WebDriverWait wait = new WebDriverWait(driver, 40);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
  1. Utilisation du fil:

    Thread.sleep(NUMBER_OF_MILLIS);

12
M. Abbas

Je déconseille vraiment d'utiliser Thread.sleep (NUMBER_OF_MILLS). Il ne sera pas stable et vous aurez des occasions où le sommeil n'est pas assez long.

Si vous attendez simplement le chargement du DOM, un événement WebDriver qui déclenche le chargement de la page attendra toujours le chargement du DOM avant de rendre le contrôle.

Toutefois, si AJAX est utilisé pour modifier le code HTML après le DOM, je vous conseillerais d'utiliser WebDriverWait et d'attendre qu'un événement connu se produise (par exemple, Object apparaît en HTML, modifications de texte, etc.).

Si vous supprimez une chose de ce message, arrêtez d’utiliser Sleep!

4
Robbie Wareham

Utilisez la classe WebDriverWait

Sélénium attente explicite/implicite

Vous pouvez attendre que l'élément attendu de la page suivante apparaisse. :

WebDriver _driver = new WebDriver();
WebDriverWait _wait = new WebDriverWait(_driver, TimeSpan(0, 1, 0));

_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));
1
r3ap3r

J'ai utilisé cette approche. Essayez de déterminer quel élément de la page est le dernier à charger. En prenant le localisateur de cet élément et en vérifiant son existence à l'aide de isDisplayed, vous pourrez voir quand la page entière sera chargée.

0
Pinakin Chaubal

Essayez en utilisant implicitementAttendez 60 secondes. comme suit dans Selenium WebDriver:

driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);//wait for 60 sec.

Si vous avez besoin d’attendre plus, rendez-vous à 80, 90, etc.

Pour Selenium RC, vous pouvez utiliser le code ci-dessous:

Selenium.waitForPageToLoad("60000");//wait for 60 sec.

Cela peut être fait en utilisant Thread comme ci-dessous:

Thread.sleep(NUMBER_OF_MILLIS);

Pour une attente explicite dans WebDriver, identifiez un élément dans la page de chargement et écrivez le code comme suit:

WebDriverWait wait = new WebDriverWait(driver, 40);//wait for 40 sec.
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
0
Ripon Al Wasim