Comment faites-vous attendre Selenium 2.0 pour charger la page?
Vous penseriez que quelque chose comme ça serait intégré. Attendre le chargement des pages est assez courant sur le web.
Comment faites-vous attendre Selenium 2.0 pour charger la page?
Vous penseriez que quelque chose comme ça serait intégré. Attendre le chargement des pages est assez courant sur le web.
Est-ce que cela fonctionne vraiment tout le temps? Peut-être que je manque quelque chose dans votre code mais vous attendez que le DOM soit prêt. Mais gardez à l'esprit que si votre code s'exécute trop rapidement, la page précédente pourrait ne pas être déchargée et il renverra true même si vous êtes toujours sur l'ancienne page. Ce que vous devez faire est d'attendre que la page actuelle se décharge, puis appeler votre code ci-dessus. Une façon de détecter le déchargement de la page est d'obtenir un élément web sur la page actuelle et d'attendre qu'il devienne obsolète. obeythetestinggoat.com/…
FYI - Même ainsi, ce qui précède ne garantit pas que la page est complète - simplement que le dom est prêt. Un élément dojo/jquery peut toujours être en train de construire dynamiquement des éléments sur la page, donc vous pourriez avoir besoin d'attendre d'abord les éléments dynamiques avant d'interagir avec eux.
Utilisez la classe WebDriverWait
Voir aussi ici
Vous pouvez vous attendre à afficher un élément, quelque chose comme en C#:
WebDriver _driver = new WebDriver();
WebDriverWait _wait = new WebDriverWait(_driver, new TimeSpan(0, 1, 0));
_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement")));
Qu'est-ce que ce TimeSpan signifie, devrions-nous créer une méthode comme TimeSpan ou est-ce une méthode intégrée?
Si vous définissez l'attente implicite du pilote, puis appelez la méthode findElement
sur un élément que vous vous attendez à trouver sur la page chargée, le WebDriver va interroger cet élément jusqu'à ce qu'il le trouve ou atteigne la valeur de temps d'attente.
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
source: attentes-implicites
Cela signifie qu'il va essayer quelque chose pendant 10 secondes, avant de lever une exception. Ainsi, il ne peut pas garantir un délai de 10 secondes.
En général, avec Selenium 2.0, le pilote Web ne devrait rendre le contrôle au code appelant que lorsqu'il a déterminé que la page a été chargée. Sinon, vous pouvez appeler waitforelemement
, qui tourne en boucle en appelant findelement
jusqu'à ce qu'il soit trouvé ou que le délai d'attente soit dépassé (le délai d'attente peut être défini).
En ajoutant à la réponse de Paul. Veuillez également vérifier stackoverflow.com/questions/5858743/….
Malheureusement, Selenium 2 n'attend pas dans tous les cas le chargement d'une page. Par exemple, WebElement:click() n'attend pas et cela est explicitement indiqué dans le Javadoc correspondant. Cependant, ils ne disent pas comment je peux vérifier si une nouvelle page est chargée. Si click() provoque le chargement d'une nouvelle page via un événement ou est effectué en envoyant un événement natif (ce qui est courant sur Firefox, IE sur Windows) alors la méthode n'attendra pas que la page soit chargée et l'appelant devrait vérifier qu'une nouvelle page a été chargée.
Equivalence en Python: WebDriverWait(driver, 10).until(lambda d: d.execute_script('return document.readyState') == 'complete')
Python utilise le code ci-dessus mais n'oubliez pas cette ligne..| from selenium.webdriver.support.ui import WebDriverWait
J'ai eu un problème en cliquant sur un élément lorsque la page n'était pas entièrement chargée. En Python, j'ai essayé time.sleep(30). Ça a fonctionné. Il attendra toujours au maximum 30 secondes cependant. J'ai ensuite essayé le code suivant et c'est plus efficace maintenant, plus rapide. WebDriverWait(driver, 10).until(lambda d: driver.find_element_by_xpath("//div[. = 'Administration']").click())
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
8 votes
À mes yeux, seule la réponse de Paul semble correcte, la plupart des réponses les mieux votées parlent d'attendre un élément particulier.
0 votes
Voir aussi: load - Selenium attendre que le document soit prêt - Stack Overflow et Python Selenium - Attendre que la page suivante soit chargée après la soumission du formulaire - Stack Overflow