【发布时间】:2021-01-27 14:54:43
【问题描述】:
我提出了一项艰巨的任务。我对 selenium 还很陌生,并且仍在使用等待元素等功能。
我必须在一个网站上处理一些数据,然后再转到另一个。问题:操作调用了一个脚本,该脚本在后台处理被操作的数据时会出现一个小的“正在保存...”标签。我必须等到我可以进入下一个网站。
所以这里是: 我如何等待元素消失?问题是:它始终存在于 DOM 中,但只能通过某些脚本可见(我想,见下图)。
这是我尝试过的,但它不起作用 - 没有等待,selenium 只是继续下一步(并且卡住了一个警报,询问我是要离开还是留在页面上,因为“保存...”)。
private By savingLableLocator = By.id("lblOrderHeaderSaving");
public boolean waitForSavingDone(By webelementLocator, Integer seconds){
WebDriverWait wait = new WebDriverWait(driver, seconds);
Boolean element = wait.until(ExpectedConditions.invisibilityOfElementLocated(webelementLocator));
return element;
}
更新/解决方案:
我想出了以下解决方案:我构建了自己的方法。基本上它会在一个循环中检查 CssValue 的变化。
循环检查 CSSVALUE“显示”从“阻塞”到另一个状态的特定时间。
public void waitForSavingOrderHeaderDone(Integer _seconds){
WebElement savingLbl = driver.findElement(By.id("lblOrderHeaderSaving"));
for (int second = 0;; second++) {
if (second >= _seconds)
System.out.println("Waiting for changes to be saved...");
try {
if (!("block".equals(savingLbl.getCssValue("display"))))
break;
} catch (Exception e) {
}
}
【问题讨论】:
-
Google 将提供许多其他可用的解决方案。
-
谢谢你,但提到的解决方案并没有起到作用。想出了我自己的“等待方法”。
标签: java selenium wait invisible