我带着一个关于 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