流利等待在硒与自定义条件 - 铬



我有一个我面临的问题,我想创建一个函数,该函数一直等到文本"其他"存在于列表中。 我希望它等待 30 秒,每 5 秒它将再次调用并验证新列表。 (最多 5 - 6 次以验证新列表中是否存在文本(。 我已经通过将列表转换为地图并检查任何匹配项(地图转换和检查正常工作(来完成验证。

问题出在等待机制上,我尝试创建复杂的流畅等待,在找到预期文本的情况下,它也会收到布尔值,然后等待应该停止。但是,例如在第一次或第二次尝试中找不到文本,我不知道要返回什么,我希望它仍然等待并再次调用并再次验证。

  • 我希望仅在两种情况下停止等待:

    • "其他"一词存在 - 在这种情况下是存在是真的。
    • 时间超过30秒,拉动间隔为5秒,不显示"其他"字样

有没有办法设置等待布尔值 == true 的条件?我不确定条件 Boolean>(( 是否正确,可以在等待中完成,以及它是否会起作用

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

你可以这样简化你的代码——使用你声明的FluentWait。您可以将包含apply函数的整个wait.until(new Function<WebDriver , Boolean>()块替换为此行。与其调用映射来获取所有li元素的文本并检查其他文本,不如编写函数以直接查找带有文本Otherli

fluentWait.until
(ExpectedConditions.presenceOfElement(By.xpath("//ul[contains(@class, 'ant-select-dropdown-menu')]/li[text()='Other'])));

此代码将等到包含文本Otherli存在。

做完你的建议之后 返回错误解决了它

相关内容

  • 没有找到相关文章

最新更新