Comment obtenir webDriver attendre que la page à charger (C# Sélénium projet)
J'ai commencé une Sélénium projet en C#. Essayer d'attendre de page à la fin du chargement et seulement ensuite passer à la prochaine action.
Mon code ressemble à ceci:
loginPage.GoToLoginPage();
loginPage.LoginAs(TestCase.Username, TestCase.Password);
loginPage.SelectRole(TestCase.Orgunit);
loginPage.AcceptRole();
à l'intérieur de loginPage.SelectRole(Cas De Test.Orgunit):
RoleHierachyLabel = CommonsBasePage.Driver.FindElement(By.XPath("//span[contains(text(), " + role + ")]"));
RoleHierachyLabel.Click();
RoleLoginButton.Click();
Je recherche pour l'élément RoleHierachyLabel. J'ai essayé de l'utiliser de multiples façons d'attendre que la page à charger ou à la recherche d'un élément de propriété permettant un délai d'attente:
1. _browserInstance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
2. public static bool WaitUntilElementIsPresent(RemoteWebDriver driver, By by, int timeout = 5)
{
for (var i = 0; i < timeout; i++)
{
if (driver.ElementExists(by)) return true;
}
return false;
}
Comment voulez-vous lutter contre cet obstacle?
- Double Possible de Attente pour le chargement de la page en Sélénium
Vous devez vous connecter pour publier un commentaire.
J'ai été la recherche de solutions de rechange, et je l'ai réglé pour les versions suivantes. Toute utilisation explicite de l'attendre avec un délai d'expiration et sont basées sur les propriétés de l'élément dans le premier cas et sur l'élément de caducité dans le second cas.
Premier choix serait la vérification de propriétés de l'élément jusqu'à ce qu'un délai est atteint. J'en suis arrivé à la propriétés suivantes qui confirment qu'il est disponible sur la page:
Existence - Une attente de vérifier qu'un élément est présent sur le DOM d'une page. Cela ne signifie pas nécessairement que l'élément est visible.
Visibilité - Une attente de vérifier qu'un élément est présent sur le DOM d'une page et visible. La visibilité signifie que l'élément n'est pas affiché seulement, mais aussi a une hauteur et une largeur qui est supérieure à 0.
Cliquable - Une attente pour la vérification d'un élément est visible et activé de telle sorte que vous pouvez cliquer dessus.
Deuxième choix s'applique lorsque le déclencheur de l'objet, par exemple un élément de menu, n'est plus attaché à la cathédrale, il est cliqué. C'est en général le cas lorsque l'action du clic sur l'élément déclencheur d'une redirection vers une autre page. Dans ce cas, il est utile de vérifier StalenessOf(élément) où l'élément est l'élément qui a été cliqué pour déclencher la redirection vers la nouvelle page.
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(5);
Aussi, voir cette réponse
J'ai l'habitude de l'utilisation explicite de l'attendre, et attendre jusqu'à ce qu'un des éléments est visible, puis passez à l'action suivante. Cela devrait ressembler à ceci:
Plus Explicites attend ici: Explicite attend le Sélénium C# et ici WebDriver Explicite attend
Je l'ai fait pour résoudre ce type de problème. C'est une combinaison de minuteries et de boucles qui sont à la recherche d'un élément spécifique jusqu'à ce qu'il timesout après un certain nombre de millisecondes.
J'ai aussi fait l'un pour l'élément activé
Comme dit dans D'attente pour le chargement de la page en Sélénium: