如何单击按钮直到 selenium 元素出现在页面上

ugmeyewa  于 2022-10-22  发布在  Java
关注(0)|答案(2)|浏览(191)

我有一个带有动态表的页面,它定期更新新数据。我想做的是点击一个按钮并重新加载页面,比如每3秒,直到该表中的元素出现。我知道我想要显示的元素的xpath,但我无法使用FluentWait使其工作。我试着按照下面的代码进行配置,但当我调用该方法时,它会快速点击按钮,而不考虑pollingEvery配置,也没有给页面足够的时间完全重新加载它自己。代码可以在下面 checkout 。
我不确定的是回报声明。如果我只需要点击一个按钮,直到该元素出现,我无法完全理解它应该是什么。
我错过了什么?

public void clickButtonUntilElementIsDisplayed(WebElement elementToBeClicked, String xPathOfElementToBeDisplayed){
    FluentWait<WebDriver> wait = new FluentWait<>(getDriver());
    wait.pollingEvery(Duration.ofSeconds(5));
    wait.withTimeout(Duration.ofSeconds(200));
    wait.ignoring(NoSuchElementException.class);
    Function<WebDriver,WebElement> clickUntilAppearance = webDriver -> {
        while(webDriver.findElements(By.xpath(xPathOfElementToBeDisplayed)).isEmpty())
            click(elementToBeClicked);

        return webDriver.findElement(By.xpath(xPathOfElementToBeDisplayed));
    };
    wait.until(clickUntilAppearance);
}

可以在其中找到此方法的类扩展了Page

qvtsj1bj

qvtsj1bj1#

需要更改功能接口的返回类型。有两种情况下,函数接口将保持循环。
1.返回值为空。
1.它引发了作为忽略的一部分提到的异常
不要使用while。使用if条件。每次轮询都会执行此函数接口。

Function<WebDriver,WebElement> clickUntilAppearance = webDriver -> {
    List<WebElement> tableElements = webDriver.findElements(By.xpath(xPathOfElementToBeDisplayed));
    if(tableElements.isEmpty()) {
        click(elementToBeClicked);
        return null;
    } else {
        return tableElements.get(0);
    }
};
gwo2fgha

gwo2fgha2#

WebDriverWait w=新的WebDriverWait(驱动程序,5);//5秒,直到(预期条件可见元素位置(由.cssSelector(“元素位置”)));

相关问题