86 votes

Comment vérifier si un élément est visible avec WebDriver

Avec WebDriver Depuis Selenium 2.0a2, j'ai du mal à vérifier si un élément est visible.

WebDriver.findElement renvoie un WebElement qui, malheureusement, ne propose pas de isVisible méthode. Je peux contourner ce problème en utilisant WebElement.clear o WebElement.click qui lancent tous deux un ElementNotVisibleException mais ça fait très sale.

Une meilleure idée ?

162voto

sleske Points 29978

Même si je suis un peu en retard pour répondre à la question :

Vous pouvez maintenant utiliser WebElement.isDisplayed() pour vérifier si un élément est visible.

Nota :

Il existe de nombreuses raisons pour lesquelles un élément peut être invisible. Selenium essaie de couvrir la plupart d'entre elles, mais il existe des cas limites où il ne fonctionne pas comme prévu.

Par exemple, isDisplayed() fait retourner false si un élément a display: none o opacity: 0 Mais, du moins dans mon test, il ne détecte pas de manière fiable si un élément est recouvert par un autre en raison du positionnement CSS.

9 votes

IsDisplayed renvoie un message vrai même si l'élément n'est pas visible.

0 votes

@SteveStaple : Cela ne devrait pas arriver. Si c'est le cas, pensez à déposer un bug.

4 votes

On m'a informé qu'il ne s'agit pas d'un bogue, et que cela fonctionne comme prévu. affiché n'a pas la même signification pour eux que pour le reste du monde anglophone.

24voto

hleinone Points 2367

element instanceof RenderedWebElement devrait fonctionner.

0 votes

Ça marche, mais je trouve toujours ça un peu ennuyeux. Je me demande quel est le raisonnement pour ne pas offrir un WebElement.isDisplayed.

5 votes

Cela ne fonctionne pas mais cette interface délègue la méthode isDisplayed et cela fonctionne. Merci pour l'astuce. (+1)

1 votes

Est-ce toujours pertinent pour Selenium 2.0 ? Je ne pense pas qu'il y ait un besoin de RenderedWebElement (la classe elle-même a disparu).

17voto

Ripon Al Wasim Points 5161

J'ai les 2 propositions suivantes :

  1. Vous pouvez utiliser isDisplayed() comme ci-dessous :

    driver.findElement(By.id("idOfElement")).isDisplayed();
  2. Vous pouvez définir une méthode comme indiqué ci-dessous et l'appeler :

    public boolean isElementPresent(By by) {
      try {
        driver.findElement(by);
        return true;
      }
    catch (org.openqa.selenium.NoSuchElementException e) {
        return false;
      }
    }

Maintenant, vous pouvez faire une assertion comme ci-dessous pour vérifier si l'élément est présent ou non :

assertTrue(isElementPresent(By.id("idOfElement")));

0 votes

Mais cela attendra toujours jusqu'à ce que le délai d'attente se produise

0 votes

@Anna : Tout le plaisir est pour moi - Merci.

3 votes

Cela ne dit pas si l'élément est visible, mais seulement s'il existe sur la page. Il peut être caché par d'autres éléments et/ou être en dehors de la fenêtre d'affichage, ce qui donne des faux positifs.

9voto

Christopher Bales Points 651

Si vous utilisez C#, ce serait driver.Displayed. Voici un exemple tiré de mon propre projet :

if (!driver.FindElement(By.Name("newtagfield")).Displayed)      //if the tag options is not displayed
    driver.FindElement(By.Id("expand-folder-tags")).Click();    //make sure the folder and tags options are visible

0 votes

Visible n'est pas la même chose qu'affiché. Cela vérifie juste si l'élément a la propriété css display réglé sur autre chose que none . Il peut toujours être caché par d'autres éléments, avoir une hauteur nulle, etc. Cela ne sera pas pris en compte.

1voto

Adnan Ghaffar Points 98

Vérifier qu'ele est visible.

public static boolean isElementVisible(final By by)
    throws InterruptedException {
        boolean value = false;

        if (driver.findElements(by).size() > 0) {
            value = true;
        }
        return value;
    }

7 votes

Sans rapport avec l'OP, vous pouvez simplifier votre fonction. Que diriez-vous de : return driver.findElements(by).size() > 0 ;

0 votes

Cela vérifie juste si vous pouvez le trouver, pas s'il est visible. il trouvera un élément caché.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X