Dans WebDriver, WebDriverWait est conçu pour suspendre l'exécution des tests jusqu'à ce qu'une condition spécifique soit remplie. Cependant, dans certains scénarios, les utilisateurs rencontrent le problème déroutant de WebDriverWait ignorant apparemment l'élément d'attente spécifié.
Le puzzle :
Un utilisateur tente de faire attendre WebDriver pendant un élément à apparaître avant de récupérer son texte. Cependant, lors de l'exécution du code sans points d'arrêt, l'attente est contournée et une exception se produit.
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); IWebElement message = wait.Until(driver => driver.FindElement(By.ClassName("block-ui-message"))); string messageText = message.Text;
Aperçu de la solution :
Le nœud du problème réside dans la stratégie de localisation utilisée. L’utilisation de FindElement seule n’est pas toujours suffisante pour garantir la visibilité des éléments. Pour résoudre ce problème, envisagez d'utiliser la condition ElementIsVisible avec une stratégie de localisation plus détaillée :
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
Alternatives avec NuGet :
Si DotNetSeleniumExtras.WaitHelpers est installé via NuGet, vous pouvez simplifier la syntaxe comme suit :
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
En utilisant ces techniques, vous pouvez vous assurer que WebDriver suspend efficacement l'exécution jusqu'à ce que l'élément spécifié soit visiblement présent et récupérable.
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!