Je ne peux pas attraper le chargeur lors de mon test. J'ai besoin de créer une méthode qui m'aidera à voir quand le chargeur n'est plus visible. Je ne peux sélectionner aucun des éléments de la page à cause de ce problème.
Code tenté:
public static void SeeNoLoaderInQD() { Actor.Wait.UntilElementIsNotDisplayed(Elements.QDLoader); Assert.IsTrue(Elements.SeeException.Count == 0); }
3 Réponses :
J'essaierais quelque chose comme ceci:
driver.WaitForElementAttributeValue(By.Id("line-scale-loader"), "style", "display: none;");
Vous pouvez appeler cette méthode pour votre scénario comme ceci:
public static void WaitForElementAttributeValue(this IWebDriver driver, By by, string attribute, string value) { var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); wait.Until(d => d.FindElement(by).GetAttribute(attribute).Contains(value)); }
Lorsque vous appelez ceci , vous indiquez à WebDriver d'attendre que la valeur de l'attribut style
de WebElement soit égale à display: none;
signifiant que le chargeur n'est plus visible.
Cela ne fonctionnera que si l'élément spécifique localisé contient cet attribut. Que faire si l'un des éléments parents a "display: none" qui empêche l'élément souhaité d'être affiché? Pourquoi ne pas utiliser les ExpectedConditions
intégrées et gérer les deux / tous les cas?
Sur la base de l'exemple HTML fourni, la flèche de chargement semble apparaître en haut du DOM donc il n'y avait pas de risque que les éléments parents soient masqués. ExpectedConditions
est obsolète dans les liaisons .NET et nécessite l'utilisation de DotNetSeleniumExtras.WaitHelpers
maintenant, donc j'essaie de fournir un exemple qui ne nécessite pas d'ajouter d'autres packages si possible.
Selenium a ExpectedConditions
intégré que vous pouvez utiliser avec WebDriverWait
pour gérer des situations comme celle-ci. Il se peut que votre attente d'invisible se déclenche et passe avant que le chargeur ne devienne visible, ce qui pourrait entraîner l'échec des actions ultérieures car le chargeur apparaît plus tard. Vous pouvez ajouter une attente pour visible, puis une attente pour invisible.
Verify no exceptions Expected: 0 Actual: 2
Note d'accompagnement ... n'utilisez pas d'assertions comme
Assert.Zero(Elements.SeeException.Count, "Verify no exceptions"); Assert.AreEqual(0, Elements.SeeException.Count, "Verify no exceptions");
Pour vérifier si une page est chargée, je vérifie généralement 3 critères, ce sont: -
Exemple de code,
public static void WaitForPageToLoad(IWebDriver driver) { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15)); wait.Until(driver => { bool isPageReady = (bool)((IJavaScriptExecutor)driver). ExecuteScript("return document.readyState == 'complete'"); bool isAjaxFinished = (bool)((IJavaScriptExecutor)driver). ExecuteScript("return jQuery.active == 0"); bool isLoaderInvisible = (bool)((IJavaScriptExecutor)driver). ExecuteScript("return $('#line-scale-loader').is(':visible') == false"); return isPageReady && isAjaxFinished && isLoaderInvisible; }); }
J'espère que cela vous aidera.
pouvez-vous ajouter le code que vous avez essayé?
public static void SeeNoLoaderInQD () {Actor.Wait.UntilElementIsNotDisplayed (Elements.QDLoader); Assert.IsTrue (Elements.SeeException.Count == 0); }