web-dev-qa-db-fra.com

Meilleur moyen de vérifier l’absence d’élément à l’aide de Selenium WebDriver avec java

J'essaie le code ci-dessous mais il semble que cela ne fonctionne pas ... Quelqu'un peut-il me montrer le meilleur moyen de le faire?

public void verifyThatCommentDeleted(final String text) throws Exception {
    new WebDriverWait(driver, 5).until(new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver input) {
                try {
                    input.findElement(By.xpath(String.format(
                            Locators.CHECK_TEXT_IN_FIRST_STATUS_BOX, text)));
                    return false;
                } catch (NoSuchElementException e) {
                    return true;
                }
            }
        });
    }
19
Roman Iuvshin

j'ai généralement deux méthodes (en paire) pour vérifier si l'élément est présent ou non:

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

public boolean isElementVisible(String cssLocator){
    return driver.findElement(By.cssSelector(cssLocator)).isDisplayed();
}

Notez que parfois, Selenium peut trouver des éléments dans DOM mais ils peuvent être invisibles. Par conséquent, il ne pourra pas interagir avec eux. Donc, dans ce cas, la vérification de la visibilité de la méthode aide.

Si vous voulez attendre l'élément jusqu'à ce qu'il apparaisse, la meilleure solution que j'ai trouvée est d'utiliser l'attente fluide:

public WebElement fluentWait(final By locator){
    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
            .withTimeout(30, TimeUnit.SECONDS)
            .pollingEvery(5, TimeUnit.SECONDS)
            .ignoring(NoSuchElementException.class);

    WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            return driver.findElement(locator);
        }
    });

    return foo;
};

J'espère que cela t'aides)

24
eugene.polschikov

Au lieu de faire findElement, findElements vérifie que la longueur des éléments retournés est égale à 0. Voici comment je vais utiliser WebdriverJS et je pense que cela fonctionnera de la même manière en Java

36
Xolv.io

Utilisez findElements au lieu de findElement .

findElements retournera une liste vide si aucun élément correspondant n'est trouvé à la place d'une exception. De plus, nous pouvons nous assurer que l'élément est présent ou non.

Ex: Liste des éléments = driver.findElements (By.yourlocatorstrategy);

if(elements.size()>0){
    do this..
 } else {
    do that..
 }
3
stepupAutomation

Impossible de commenter le Meteor Test Manual, car je n'ai pas de représentant, mais je voulais donner un exemple qui m'a pris un certain temps à comprendre:

Assert.assertEquals(0, wd.findElements(By.locator("locator")).size());

Cette assertion vérifie qu'il n'y a pas d'éléments correspondants dans le DOM et renvoie la valeur de zéro, de sorte que l'assertion passe lorsque l'élément n'est pas présent. En outre, il échouerait s'il était présent.

2
Matthew Hodgson
    WebElement element = driver.findElement(locator);

    Assert.assertFalse(element.isDisplayed());

L'assertion passera si l'élément n'est pas présent, sinon elle échouera.

0
Shaurya Nigam
WebElement element = driver.findElement(locator);
Assert.assertNull(element);

L'assertion ci-dessus passera si l'élément n'est pas présent.

0
skumar
int i=1;

while (true) {
  WebElementdisplay=driver.findElement(By.id("__bar"+i+"-btnGo"));
  System.out.println(display);

  if (display.isDisplayed()==true)
  { 
    System.out.println("inside if statement"+i);
    driver.findElement(By.id("__bar"+i+"-btnGo")).click();
    break;
  }
  else
  {
    System.out.println("inside else statement"+ i);
    i=i+1;
  }
}
0
Avijit Samal