Dans Java Seleneium-WebDriver, vous pouvez rencontrer des scénarios dans lesquels l'application met du temps à charger son interface utilisateur, provoquant des échecs de localisation des éléments. Pour résoudre ce problème, vous disposez de deux options d'attente : l'attente implicite et explicite.
Attente implicite :
Comme démontré dans votre extrait de code, vous définissez une attente implicite de 2 secondes :
<code class="java">driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);</code>
Cela signifie que le pilote attendra un maximum de 2 secondes qu'un élément devienne disponible avant de générer une erreur.
Attente explicite :
L'attente explicite nécessite qu'une condition spécifique soit remplie avant que le conducteur ne continue. La méthode WebDriverWait.until peut être utilisée à cet effet :
<code class="java">WebDriverWait wait = new WebDriverWait(driver, 10); WebElement textbox = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("textbox")));</code>
Ici, le pilote attendra jusqu'à 10 secondes que l'élément avec l'ID "textbox" devienne visible avant de continuer.
Quel est le meilleur ?
Le choix entre l'attente implicite et explicite dépend de la situation :
Recommandation :
Pour des situations comme la vôtre, où la présence de l'élément n'est pas garantie dans un laps de temps précis, utiliser une attente explicite, en particulier une attente fluide comme celui fourni dans la réponse est recommandé.
<code class="java">public WebElement fluentWait(final By locator) { // Fluent wait implementation provided in the answer... } WebElement textbox = fluentWait(By.id("textbox"));</code>
L'attente fluide vous permet de personnaliser le délai d'attente et l'intervalle d'interrogation, offrant plus de flexibilité et évitant les retards inutiles.
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!