Maison >développement back-end >C++ >Pourquoi mon WebDriverWait n'attend-il pas l'élément ?
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.
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.
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!