Selenium:等待一个元素确实消失了

Chr*_*ski 5 java selenium invisible wait

我提出了一项艰巨的任务.我对硒很新,并且仍然在研究等待元素和类似物的功能.

我必须操纵网站上的一些数据,然后继续操作另一个.问题:操作调用一个脚本,当在后台处理操纵数据时,会出现一个"Saving ..."标签.我必须等到可以进入下一个网站.

所以这就是:我如何等待和元素消失?事情是:它始终存在于DOM中,但只能通过某些脚本显示(我想,见下图). palish代码包含所述元素

这就是我尝试但它只是不起作用 - 没有等待,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;
}
Run Code Online (Sandbox Code Playgroud)

更新/解决方案:

我提出了以下解决方案:我构建了自己的方法.基本上它会在循环中检查CssValue是否会发生变化.

循环检查CSSVALUE"display"的一定时间,从"block"变为另一个状态.

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) {

        }
    }
Run Code Online (Sandbox Code Playgroud)

小智 1

我不确定,但你可以尝试这样的事情:)

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //time in second
WebElement we = driver.findElement(By.id("lblOrderHeaderSaving"));   
assertEquals("none", we.getCssValue("display"));
Run Code Online (Sandbox Code Playgroud)