31

我正在尝试下面的代码,但它似乎不起作用......有人可以告诉我最好的方法吗?

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

10 回答 10

48

不做 findElement,而是做 findElements 并检查返回元素的长度是否为 0。这就是我使用 WebdriverJS 的方式,我希望在 Java 中同样可以工作

于 2013-07-15T01:23:04.187 回答
37

我通常有几种方法(成对)来验证元素是否存在:

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

请注意,有时 selenium 可以在 DOM 中找到元素,但它们可能是不可见的,因此 selenium 将无法与它们交互。因此,在这种情况下,检查可见性的方法会有所帮助。

如果您想等待元素直到它出现,我发现的最佳解决方案是使用流利的等待:

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

希望这可以帮助)

于 2012-09-06T15:01:55.603 回答
6

使用findElements而不是findElement

如果没有找到匹配的元素, findElements将返回一个空列表,而不是异常。此外,我们可以确保元素是否存在。

例如:列表元素 = driver.findElements(By.yourlocatorsstrategy);

if(elements.size()>0){
    do this..
 } else {
    do that..
 }
于 2017-07-06T20:00:42.303 回答
4

无法对流星测试手册发表评论,因为我没有代表,但我想提供一个例子,我花了很长时间才弄清楚:

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

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

于 2015-10-13T17:55:06.983 回答
0
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;
  }
}
于 2016-07-19T12:39:04.453 回答
0
public boolean isDisplayed(WebElement element) {
        try {
            return element.isDisplayed();
        } catch (NoSuchElementException e) {
            return false;
        }
    }

如果您不想检查该元素是否显示在页面上,您的检查应该是:

if(isDisplayed(yourElement){
...
}
else{
...
}
于 2020-07-04T05:47:11.907 回答
0
WebElement element = driver.findElement(locator);
Assert.assertNull(element);

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

于 2018-08-22T12:55:19.317 回答
0

在 Python 中进行断言,我使用:

assert len(driver.find_elements_by_css_selector("your_css_selector")) == 0
于 2020-11-18T19:07:49.550 回答
0

我的答案要简单得多,它对我有用

while(true) {
if (driver.getPageSource().contains("Enter the text of the element you wanted to check")==false) 
{//Put your code here 
    break;
}   
else if (isElementPresent(element you are trying to find)==true)
{
                //put your code here 
                break;
}

}

于 2021-06-24T11:32:48.440 回答
-2
    WebElement element = driver.findElement(locator);

    Assert.assertFalse(element.isDisplayed());

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

于 2018-11-15T12:54:33.583 回答