У меня проблема, с которой я сталкиваюсь, я хочу создать функцию, которая ждет, пока в списке не появится текст «Другое». Я хочу, чтобы он подождал 30 секунд, и каждые 5 секунд он будет повторять вызов и проверять новый список. (Максимум 5 - 6 раз для проверки, если текст существует в новом списке). Я сделал проверку путем преобразования Списка в карту и проверил любое совпадение (преобразование карты и проверка работает).
Проблема в механизме ожидания, я пытаюсь создать сложное свободное ожидание, которое такжеполучить логическое значение в случае обнаружения ожидаемого текста, а затем ожидание должно прекратиться. Но я не понимаю, что возвращать, если не найден текст, например, в первой или второй попытке, и я хочу, чтобы он все еще ждал, сделал вызов снова и подтвердил снова.
Есть ли способ установить условие ожидания для логического ожидания ==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 ******
}
});
}