我是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函数实现
答案 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"));
非常感谢您的帮助