我有一个带有动态表的页面,它定期更新新数据。我想做的是点击一个按钮并重新加载页面,比如每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
2条答案
按热度按时间qvtsj1bj1#
需要更改功能接口的返回类型。有两种情况下,函数接口将保持循环。
1.返回值为空。
1.它引发了作为忽略的一部分提到的异常
不要使用while。使用if条件。每次轮询都会执行此函数接口。
gwo2fgha2#
WebDriverWait w=新的WebDriverWait(驱动程序,5);//5秒,直到(预期条件可见元素位置(由.cssSelector(“元素位置”)));