1
votes

Comment puis-je savoir si l'élément n'est pas visible

J'essaye de créer un script où je peux vérifier si l'élément est ou n'est pas affiché sur l'application UWP. J'ai une méthode qui vérifie si l'élément est affiché ou non affiché ..

si l'élément est réellement affiché et que j'ai appelé le "IsElementDisplayed", le test semble fonctionner correctement et continuer l'exécution du test .. Mais lorsque l'élément n'est vraiment PAS affiché et j'ai appelé le "IsElementDisplayed", il ne renvoie pas de fausse valeur booléenne .. mais il arrête simplement l'exécution du test et dit, "aucun paramètre donné n'a été trouvé" ...

S'il vous plaît vérifiez mon exemple de code ....

J'ai une classe qui contient mes localisateurs et renvoie l'instance de WindowsElement:

    public bool IsNotDisplayed(WindowsElement element)
    {
        try
        {
            Assert.IsFalse(element.Displayed, $"Element: {element} is not displayed on the page!");
            return false;
        }
        catch (Exception)
        {
            return true;
        }
    }

et puis j'ai Page classe qui contient les propriétés de mes éléments .. exemple de code ci-dessous:

    public WindowsElement SaveObligation_Btn => this.AccessibilityId("OBLGTN_saveObligation_btn");

    public WindowsElement CancelObligation_Btn => this.AccessibilityId("OBLGTN_CancelObligation_btn");

    public WindowsElement ObligationAdd_Btn => this.AccessibilityId("SMMRY_AddObligation_btn");

Et enfin j'ai une classe testhelper qui contient des méthodes telles que:

    protected WindowsElement Id(string id)
    {
        return Driver.FindElementById(id);
    }

    protected WindowsElement XPath(string xpath)
    {
        return Driver.FindElementByXPath(xpath);
    }

    protected WindowsElement Name(string name)
    {
        return Driver.FindElementByName(name);
    }

    protected WindowsElement AccessibilityId(string id)
    {
        return Driver.FindElementByAccessibilityId(id);
    }


0 commentaires

4 Réponses :


0
votes

Je ne suis pas familier avec C #.

Mais en Python, j'écrirai comme ceci:

try:
    element = //find your element
    if element.is_displayed():
        return True
    else:
        raise AssertionError
except Exception:
    return False


0 commentaires

-1
votes

Ceci retournera vrai si l'élément est affiché sinon il retournera faux.

Code C #

try:
    element = driver.find_element_by_xpath('XPATH')
    if element.is_displayed():
        return True
    else:
        raise AssertionError
except Exception:
    return False

Code Java

public static boolean IsDispayed(WebElement webelement)
{
    try {
        webelement.isDisplayed();
    } catch (Exception e) {
        return false;
    }
    return true;
}


4 commentaires

-1. Vous devez renvoyer webelement.isDisplayed (); car si l'élément est masqué, aucune exception ne sera lancée mais l'élément n'est pas affiché.


@AndiCover Merci pour le commentaire. J'ai mis à jour mon code pour renvoyer webelement.isDisplayed (); . S'il vous plaît vérifier et laissez-moi savoir


Mieux mais toujours pas optimal. Revenez simplement dans le bloc try et supprimez l'instruction de retour alors inaccessible après le bloc catch. Dans votre exemple, la méthode isDisplayed serait appelée deux fois en cas de succès.


La méthode @AndiCover a le type de retour booléen, je ne peux donc pas supprimer la dernière instruction de retour



0
votes

La première question est ce que vous voulez faire lorsque aucun élément n'est affiché? Bien sûr, il attrapera quelques exceptions. Dans votre scénario, si vous ne voulez rien faire lorsque l'exception est levée, vous devez laisser le bloc catch vide. essayez le code suivant:

public bool IsNotDisplayed(WindowsElement element)
{
    try
    {
        Assert.IsFalse(element.Displayed, $"Element: {element} is not displayed on the page!");
        return false;
    }
    catch (Exception e)
    {
        // do nothing and it will continue your script.

    }
}


1 commentaires

Votre catch ne fonctionnera que si votre fonction retourne void. Votre fonction s'attend à ce qu'un booléen soit renvoyé.



-1
votes

Essayez le code ci-dessous pour c #. Ceci est une alternative ..

private bool IsElementPresent(By by)
   {
       try
       {
           driver.FindElement(by);
           return true;
       }
       catch (NoSuchElementException)
       {
           return false;
       }
   }


1 commentaires

cette réponse montre comment vérifier si un élément existe, mais elle ne fournit rien d'utile quant à savoir si un élément existant est affiché ou non ...