Maison >développement back-end >C++ >Pourquoi mon WebDriverWait ne parvient-il pas à attendre lors de l'exécution sans points d'arrêt ?
WebDriverWait n'attend pas comme prévu
Lors de la tentative de récupération du texte d'un élément, une attente est implémentée pour garantir que l'élément est visible avant récupération. Cependant, l'attente semble être contournée lorsque le code est exécuté sans points d'arrêt, ce qui entraîne une exception.
Explication du problème
L'extrait de code fourni utilise la méthode FindElement de la classe WebDriverWait, qui lève une exception si l'élément est introuvable dans le délai d'attente spécifié (30 secondes dans ce cas). Cette immédiateté pourrait résulter du fait que l'élément n'est pas visible ou chargé au moment où la période d'attente expire.
Solution
Comme alternative, vous pouvez utiliser la condition ElementIsVisible de la classe ExpectedConditions en combinaison avec WebDriverWait. Cette approche induira une attente jusqu'à ce que l'élément satisfasse à la condition (dans ce cas, être visible). De plus, vous pouvez utiliser la méthode GetAttribute pour obtenir le HTML interne de l'élément au lieu de la propriété Text.
Voici un exemple utilisant la condition ElementIsVisible :
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
Option DotNetSeleniumExtras.WaitHelpers
Si vous employez SeleniumExtras.WaitHelpers via NuGet, vous pouvez exploiter la condition ElementIsVisible de la classe ExpectedConditions comme suit :
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
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!