Maison >développement back-end >C++ >Pourquoi mon WebDriverWait n'attend-il pas l'élément ?

Pourquoi mon WebDriverWait n'attend-il pas l'élément ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-03 16:29:39598parcourir

Why Isn't My WebDriverWait Waiting for the Element?

WebDriverWait n'attend pas l'élément spécifié

Problème

Lors de l'implémentation d'un WebDriverWait pour attendre qu'un élément apparaisse avant de récupérer son texte, la fonctionnalité d'attente semble être ignoré, ce qui entraîne une exception.

Explication

Raison sous-jacente :

Par défaut, WebDriverWait utilise un intervalle d'interrogation pour vérifier périodiquement la présence de l'élément. Si l'élément n'est pas immédiatement disponible lors de la vérification initiale, les intervalles d'interrogation suivants peuvent ne pas être suffisamment fréquents pour détecter l'apparence de l'élément, conduisant à l'exception.

Solutions

1. Augmentation de la fréquence d'interrogation :

Pour garantir que WebDriverWait vérifie plus fréquemment l'élément, augmentez l'intervalle d'interrogation en transmettant un TimeSpan avec une valeur plus petite au constructeur WebDriverWait :

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1));

2. Utilisation de ExpectedConditions.ElementIsVisible :

Vous pouvez également utiliser la méthode ExpectedConditions.ElementIsVisible de SeleniumExtras.WaitHelpers, qui attend explicitement que l'élément devienne visible et disponible pour l'interaction. Cela élimine la dépendance au sondage :

string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");

3. Utilisation de DotNetSeleniumExtras.WaitHelpers :

Si vous utilisez le package nuget DotNetSeleniumExtras.WaitHelpers, vous pouvez directement importer la classe ExpectedConditions et l'utiliser :

string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(30)).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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn