Selenium C# WebDriver : gérer efficacement les attentes des éléments
Une automatisation robuste des tests nécessite de s'assurer que les éléments existent avant d'interagir avec eux. WebDriverWait
est la clé pour y parvenir dans Selenium C#. Cet article aborde les défis courants et fournit des solutions optimales pour configurer WebDriverWait
pour vérifier la présence d'éléments.
Problème courant : condition d'attente incomplète
Une erreur fréquente consiste à mal définir la condition d'attente. Considérez cet exemple incomplet :
<code class="language-csharp">WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 5)); wait.Until(By.Id("login")); // Incorrect: Missing wait condition</code>
Cet extrait de code ne dispose pas de la fonction anonyme cruciale qui vérifie l'existence de l'élément.
Solutions efficaces
1. Attente explicite avec ExpectedConditions
:
L'approche la plus simple et la plus recommandée utilise ExpectedConditions
pour définir explicitement la condition d'attente :
<code class="language-csharp">wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.Id("login")));</code>
Cela garantit que l'attente ne se poursuit que jusqu'à ce que tous les éléments correspondant au localisateur (By.Id("login")
) soient présents sur la page.
2. Méthode d'extension personnalisée pour les délais d'attente :
Pour améliorer la lisibilité et la réutilisabilité du code, envisagez de créer une méthode d'extension pour IWebDriver
:
<code class="language-csharp">public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds) { if (timeoutInSeconds > 0) { var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds)); return wait.Until(drv => drv.FindElement(by)); } return driver.FindElement(by); }</code>
Cette méthode ajoute un paramètre de délai d'attente à la méthode FindElement
standard. Utilisation :
<code class="language-csharp">IWebElement btn = driver.FindElement(By.CssSelector("#login_button"), 10); // 10-second timeout</code>
Optimisation des performances :
Évitez d'utiliser des attentes implicites, car elles introduisent des retards inutiles à chaque FindElement
appel, ce qui a un impact sur les performances globales des tests. Les attentes explicites, comme démontré ci-dessus, offrent un contrôle précis et évitent ces goulots d'étranglement en termes de performances. Ils n'attendent que lorsque cela est nécessaire, améliorant ainsi l'efficacité.
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!