使用带有java的Selenium WebDriver检查元素不存在的最佳方法

2022-09-01 08:02:10

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

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

答案 1

不要执行 findElement,而是执行 findElement 并检查返回的元素的长度是否为 0。这就是我使用WebdriverJS的方式,我希望在Java中也能正常工作。


答案 2

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

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

希望这有帮助)


推荐