Je préfère cela, car cela peut littéralement prendre n'importe quelle condition booléenne à "attendre jusqu'à".
public static void WaitUntil(this IWebDriver driver, Func Condition, float timeout = 10f)
{
float timer = timeout;
while (!Condition.Invoke() && timer > 0f) {
System.Threading.Thread.Sleep(500);
timer -= 0.5f;
}
System.Threading.Thread.Sleep(500);
}
driver.WaitUntil(() => driver.FindElements(By.XPath("quelque xPath...").Length == 0);
//Voici l'avantage particulier par rapport aux attentes normales de Selenium. Pouvoir attendre des choses qui n'ont absolument rien à voir avec Selenium, mais qui sont parfois des choses valides à attendre.
driver.WaitUntil(() => "Quelque chose existe dans la base de données");
Je trouve que l'attente implicite me pose plus de problèmes qu'elle n'en vaut la peine. Et je trouve que l'attente explicite de Selenium peut devenir un peu verbeuse, et elle ne couvre pas tout ce dont j'ai besoin dans mon framework, alors j'ai créé un certain nombre d'extensions. En voici une. Notez que j'utilise FindElements pour l'exemple ci-dessus car je ne veux pas qu'une exception soit levée si rien n'est trouvé. Cela devrait fonctionner pour vous.
Remarque : Ceci est en C#, mais il ne devrait pas être difficile de modifier cela pour n'importe quel autre langage (surtout Java). Si votre langage ne permet pas les extensions comme celle-ci, appelez simplement la méthode directement dans une classe. Vous devrez mettre ceci dans une classe statique pour qu'elle soit fonctionnelle. Soyez prudent lorsque vous étendez des classes existantes de cette manière dans la logique, car cela peut perturber les autres lorsqu'ils essaient de déterminer où les méthodes sont définies.