我遇到了一个问题,我想创建一个函数,等待列表中存在文本“其他”。我希望它等待 30 秒,并且每 5 秒它会再次调用并验证新列表。(最多 5 - 6 次验证文本是否存在于新列表中)。我已经通过将列表转换为地图并检查任何匹配来完成验证(地图转换和检查正在工作)。
问题在于等待机制,我尝试创建复杂的流畅等待,如果找到预期的文本,它也会接收布尔值,然后等待应该停止。但是,如果在第一次或第二次尝试中找不到文本,我不知道要返回什么,我希望它仍然等待并再次拨打电话并再次验证。
我希望仅在两种情况下停止等待:
- “其他”一词存在 - 在这种情况下 isExists 为真。
- 时间超过30秒。拉动间隔5秒,不显示“其他”字样
有没有办法在等待条件中设置等待 Boolean == true ?我不确定条件 Boolean>() 是否正确,可以在 wait.until 中完成,如果它可以工作
public void testrIntegrationfluent ()
{
WebElement element = BasePage.getWebElementByXPathWithWaitToClicable("//nz-select[@formcontrolname='selectedIntegrationTypes']/div");
element.click();
WebDriver driver2 = WebDriverMgr.getDriver();
Wait wait = new FluentWait(driver2)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
wait.until(new Function<WebDriver , Boolean>() {
public Boolean apply (WebDriver driver2) {
List<WebElement> dropdownOptions = driver2.findElements(By.xpath("//ul[contains(@class, 'ant-select-dropdown-menu')]/li"));
Boolean isExists = dropdownOptions.stream().map(WebElement::getText).anyMatch(text -> "Other".equals(text));
if (isExists.equals(true)) {
return isExists;
}
return ****** need to think what to put thatkeep waiting and perform call for list and validation reoccured ******
}
});
}