检查元素最好的办法是不存在使用硒的webdriver用java(Best way to check

2019-06-27 19:14发布

我试着下面的代码,但它似乎它不工作...能有人告诉我做这件事的最佳方式?

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

Answer 1:

我通常几个用于验证的方法(在一对)元素是否存在或不存在:

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

请注意,有时硒可以找到DOM元素,但也可以是无形的,因此硒将无法与他们进行互动。 因此,在这种情况下,方法检查知名度帮助。

如果你要等待,直到元素出现最好的解决办法,我发现是使用流利的等待:

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

希望这可以帮助)



Answer 2:

而不是做findElement,做findElements并检查返回的元素的长度为0。这是我如何使用WebdriverJS做,我预计同样会在Java中工作



Answer 3:

使用findElements代替findElement。

如果没有匹配的元素被发现的,而不是一个异常findElements会返回一个空列表。 另外,我们可以确保该元素存在或不存在。

例如:List元素= driver.findElements(By.yourlocatorstrategy);

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


Answer 4:

无法发表评论我要流星测试手册,因为我没有代表,但我想提供我花了很长一段时间找出一个例子:

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

此断言验证有在DOM中没有匹配元素,并返回零的值,所以当元素不存在的断言通过。 此外,如果它存在,它会失败。



Answer 5:

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


Answer 6:

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

如果元素不存在上述断言将通过。



Answer 7:

    WebElement element = driver.findElement(locator);

    Assert.assertFalse(element.isDisplayed());

断言将通过如果元素不存在,否则就会失败。



文章来源: Best way to check that element is not present using Selenium WebDriver with java