是否有可能等到特定的班级消失?

时间:2019-05-23 09:04:20

标签: selenium

我是Selenium的新手,现在遇到了问题。我想等到加载屏幕在我的测试应用程序中消失。 loadingscreen不是一个元素,而是一个可见时位于html元素上的类。我看到了一些类似的帖子,但它们的目的都是要使某个元素消失。我只希望元素的类不可见。

可见加载屏幕:

<html class="busy">
 ...
</html>

加载屏幕消失:

<html>
 ...
</html>

我的意图是使用WebDriverWait(在此环境中使用“预期条件”)来完成此任务。但是,现在有了我的解决方案,我看到我将等待html元素消失而不是类消失。

wait = new WebDriverWait(driver, 30);

wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className("busy")));

我想了解是否以及如何等到课程消失,甚至可以通过webdriver wait.until函数实现

2 个答案:

答案 0 :(得分:0)

在我的质量检查职业生涯的早期,我遇到了实施此类覆盖阻止程序的情况。以下是我的解决方案,您应该可以对其进行修改以满足您的需求。

public static void waitForBlockUIToDisappear() {
    // This function checks the entire currently-loaded web page for the
    // presence of any web element of the
    // class "blockUI" and loops until there are none. The presence of an
    // element with this class does exactly
    // what it implies: it blocks user input. If you get the error that a
    // different web element would receive
    // the click, for example, this is why and you'd need to call this
    // method before doing a click. Generally,
    // this function should be implemented before sending any input to a web
    // page - click, sendkeys, select...
    String blockUI = "//*[contains(@class,'blockUI')]";
    while (true) {
        if (driver.findElements(By.xpath(blockUI)).size() == 0)
            break;
    }
    ;
}

答案 1 :(得分:0)

感谢您的评论,他们帮助找到了我的解决方案。我发现在此应用程序中存在两个加载屏幕。第一个仅在启动应用程序时出现,第二个在html元素随类更改时出现。

第一个加载屏幕是html元素。所以我在做的只是等到这看不见:

    WebElement initScreen = driver.findElement(By.className("loading-screen"));
    wait.until(ExpectedConditions.invisibilityOf(initScreen));

第二个是我在问题中提到的那个,在那里我可以使用属性函数:

wait.until(ExpectedConditions.attributeToBe(By.xpath("/html"), "cursor", "auto"));

非常感谢您的帮助