Avons-nous une fonction générique pour vérifier si la page est complètement chargée dans Selenium ?
Vous essayez de déterminer si une page Web a chargement terminé avec Selenium. Bien que vous ayez tenté d'utiliser le code, même lorsque la page est en cours de chargement, elle n'attend pas. Vous recherchez une solution générique par opposition à une solution qui examine la visibilité ou la cliquabilité d'un élément particulier.
Réponse :
Non, il n'existe pas de méthode générique Selenium pour confirmer la chargement complet d'une page web.
Explication :
Voyons examinez votre code :
new WebDriverWait(firefoxDriver, pageLoadTimeout).until( webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));
La variable pageLoadTimeout dans ce code ne correspond pas réellement à la vraie fonction pageLoadTimeout().
Cependant, pour votre cas d'utilisation consistant à vérifier si une page a complètement chargé, vous pouvez utiliser pageLoadStrategy() défini sur "normal" (les autres valeurs possibles incluent "aucun" et "eager") en utilisant les classes DesiredCapabilities ou ChromeOptions. Voici des exemples :
Utilisation de DesiredCapabilities :
DesiredCapabilities dcap = new DesiredCapabilities(); dcap.setCapability("pageLoadStrategy", "normal"); FirefoxOptions opt = new FirefoxOptions(); opt.merge(dcap); WebDriver driver = new FirefoxDriver(opt);
Utilisation des options Chrome :
ChromeOptions opt = new ChromeOptions(); opt.setPageLoadStrategy(PageLoadStrategy.NORMAL); WebDriver driver = new FirefoxDriver(opt);
Considérations :
Définition de la stratégie de chargement de page La valeur "normal" garantit que le client du navigateur a atteint l'état dans lequel "document.readyState" est égal à "complet". Cependant, cela ne garantit pas que tous les appels JavaScript et Ajax soient terminés.
Pour résoudre ce problème, vous pouvez utiliser une fonction pour attendre la fin de tous les appels JavaScript et Ajax :
public void WaitForAjax2Complete() throws InterruptedException { while (true) { if ((Boolean) ((JavascriptExecutor)driver).executeScript("return jQuery.active == 0")){ break; } Thread.sleep(100); } }
Vous pouvez également utiliser WebDriverWait en conjonction avec ExpectedConditions pour attendre un événement ou un élément spécifique. état :
// Wait for a specific part of the page title new WebDriverWait(driver, 10).until(ExpectedConditions.titleContains("partial_title_of_application_under_test")); // Wait for a specific element to become visible WebElement ele = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xpath_of_the_desired_element")));
Références :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!