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



我有一个页面,其中有一个动态表,它会定期更新新数据。我想做的是点击一个按钮并重新加载页面,比如说每3秒加载一次,直到该表中的元素出现。我知道我想要显示的元素的xpath,但我就是无法使用FluentWait使其工作。我试着按照下面的代码进行配置,但当我调用该方法时,它会非常快速地点击按钮,而不考虑pollingEvery配置,也没有给页面足够的时间来完全重新加载它自己。代码可以在下面签出。

我不确定的是退货声明。如果我只需要点击一个按钮,直到那个元素出现,我就不能完全理解它应该是什么。

我错过了什么?

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

函数接口的返回类型需要更改。有两种情况下,功能接口将保持循环。

  1. 返回的值为null
  2. 它抛出了一个异常,作为忽略的一部分

不要使用while。如果条件允许,请使用。对于每次轮询,将执行每个此函数接口。

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

WebDriverWait w=新的WebDriverWait(驱动程序,5(;//5秒w.until(ExpectedConditions.visibilityOfElementLocated(By.csSelector("element_location"((;

相关内容

  • 没有找到相关文章

最新更新