1
votes

Comment créer une méthode de spinner de chargement qui inclut l'affichage: Affichage du bloc: aucun en utilisant Selenium C #?

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); 
} 


2 commentaires

pouvez-vous ajouter le code que vous avez essayé?


public static void SeeNoLoaderInQD () {Actor.Wait.UntilElementIsNotDisplayed (Elements.QDLoader); Assert.IsTrue (Elements.SeeException.Count == 0); }


3 Réponses :


3
votes

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.


2 commentaires

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.



0
votes

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");


0 commentaires

1
votes

Pour vérifier si une page est chargée, je vérifie généralement 3 critères, ce sont: -

  • La page est-elle prête?
  • Les appels ajax sont-ils terminés?
  • Le spinner / chargeur est-il invisible?

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.


0 commentaires