定制条件下硒的流利等待-铬

时间:2019-10-05 07:16:18

标签: selenium selenium-chromedriver webdriverwait fluentwait

我遇到一个问题,我想创建一个函数,等待列表中的文本“ Other”存在。 我希望它等待30秒,然后每5秒它将再次进行呼叫并验证新列表。 (最多5到6次,以验证文本是否在新列表中)。 我已经通过将List转换为地图并检查所有匹配项(地图转换和检查正在工作)来完成验证。

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

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

    • “其他”一词存在-在这种情况下isExists为真。
    • 经过时间超过30秒。拉动间隔为5秒,单词“ other”未显示

是否可以设置等待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 ******
    }

});
}

2 个答案:

答案 0 :(得分:0)

您可以使用声明的FluentWait来简化代码。您可以仅用此行替换包含wait.until(new Function<WebDriver , Boolean>()函数的整个apply块。您可以编写函数以直接查找带有文本li的{​​{1}},而不是调用映射以获取所有li元素的文本并检查其他文本,而不必调用映射:

Other

此代码将一直等到fluentWait.until (ExpectedConditions.presenceOfElement(By.xpath("//ul[contains(@class, 'ant-select-dropdown-menu')]/li[text()='Other']))); 包含文本li为止。

答案 1 :(得分:0)

提出建议后 返回false就解决了