java - Selenium findElements() 是否必须隐式等待返回 0 个元素?

标签 java selenium webdriver webdriverwait implicitwait

我带着一个关于 Selenium 的问题来到这里。在我的测试中,我需要删除 Web 应用程序中的某个项目,然后我想验证项目列表是否为空。
我知道这看起来微不足道,但我有一些小问题。这是我想检查我的项目列表是否为空的方式:

Assert.assertEquals(page.getSearchResultList().size(), 0);

简单而有效,但是...由于隐式等待而缓慢。
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

由于事实上当我删除项目时,然后 getSearchResultList().size()是 0 并且 Selenium 在 findElements() 返回 0 大小之前总是等待 10 秒。

为了避免这 10 秒的等待,我有一个解决方法可以在我的断言之前修改隐式等待,但我认为这不是一个好主意。
page.getDriver().manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
Assert.assertEquals(page.getSearchResultList().size(), 0);

还有其他更好的解决方案吗?

请求更新 @KunduK

没有 WebDriverWait 的断言:
    Instant start = Instant.now();
    List<WebElement> resultSearchList = page.getDriver().findElements(By.cssSelector("[ng-repeat='searchResult in $ctrl.searchResults']"));
    Assert.assertEquals(resultSearchList.size(), 0);
    Instant stop = Instant.now();
    log.debug("Assert Took: " + Duration.between(start, stop).getSeconds() + " sec");

输出:
10:49:59.081 [main] DEBUG impl.AssertNewEntityPage - Assert Took: 10 sec

使用 WebDriverWait 进行断言
    Instant start = Instant.now();
    new WebDriverWait(page.getDriver(), 10).until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("[ng-repeat='searchResult in $ctrl.searchResults']")));
    List<WebElement> resultSearchList = page.getDriver().findElements(By.cssSelector("[ng-repeat='searchResult in $ctrl.searchResults']"));
    Assert.assertEquals(resultSearchList.size(), 0);
    Instant stop = Instant.now();
    log.debug("Assert Took: " + Duration.between(start, stop).getSeconds() + " sec");

输出:
10:57:08.215 [main] DEBUG impl.AssertNewEntityPage - Assert Took: 20 sec

最佳答案

您可以使用 ExpectedConditions.invisibilityOfElementLocated()等待元素不可见,然后获取元素的 size() 。

new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("locator xpath")));
List<WebElement> elements = driver.findElements(By.xpath("locator xpath"));
Assert.assertEquals(elements.size(), 0);

关于java - Selenium findElements() 是否必须隐式等待返回 0 个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502232/

相关文章:

java - 如何在Java中将列表的列表转换为二维数组

java - Android 上的谷歌 oauth2

java - 无法定位元素

selenium - 如何从selenium webdriver中的Frame导航回当前页面

python - 有什么方法可以更改网络驱动程序的端口吗?

java - 用于 rest api 项目的 Spring Boot war 或 jar

java - 代码较短,因此用相同的值填充数组

python - 使用 Pycharm 的机器人框架——自动完成功能不起作用

java - 通过 Java 和 Selenium 启动 Internet Explorer 时出现 "OsProcess checkForError : CreateProcess error=193, %1 is not a valid Win32 application"

java - 苹果浏览器。无法开始新 session 。可能原因是远程服务器地址无效或浏览器启动失败