我需要等待页面'弹出叠加'加载才能滚动到相关的网页元素。
以下代码在找到并滚动到网页元素时成功,但我想避免使用Thread.sleep。
public void scrollToElementByLocator(WebElement element) throws InterruptedException {
Thread.sleep(4000);
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element);
((JavascriptExecutor) driver).executeScript("window.scrollBy(0, -400)");
第3。任何人都可以建议另一种方法等待页面加载,然后滚动到预期的webelement而不使用thread.sleep?
非常感谢你的帮助
答案 0 :(得分:1)
这些都很痛苦。理想情况下,您可以访问开发人员,他们可以告诉您哪些元素出现/消失,您可以等待。在这种情况下,我假设您无法访问它们。
我尝试做的是触发操作,快速右键单击并选择Inspect元素,然后查看弹出的元素。如果运气好的话,对话框等会保持不变,很容易找到。在这种情况下,它们发生得如此短暂,以至于它变得非常困难。我做的是做上面的操作,直到我触发它开启/关闭并观察DOM的元素出现/消失。我终于找到了正确的地方,并使用screencap和OCR
找到了这个<div class="modal in" id="loading-modal" data-backdrop data-keyboard="false" tabindex="-1" role= "dialog" aria-hidden="true" style="z-index: 1100; top: 475px; display: block; padding-right: 17px;" modal-dialog">
<div> id="loading-page-backdrop" class="in"></div>
那里有几个DIV,其中一个很可能是你正在寻找的元素,并且都有ID,所以它们应该很容易被人看到并等待它们被隐藏。
// wait for modal to disappear
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading-modal")));
// do stuff
即使这些不是您正在寻找的元素,您也应该能够使用此技术找到您想要的元素。
顺便说一句,我用Java编写自动化,我从来不需要滚动窗口......它只是为我做的。你是否尝试过没有滚动代码的场景?答案 1 :(得分:0)
我用于等待页面加载的解决方案正在等待页面标题符合我的预期。例如:
public Boolean waitForPageIsLoaded(String title) {
return new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs(title));
}
当然,如果你知道你在等待的WebElement
有多少ExpectedConditions
你可以利用例如visibilityOf()
答案 2 :(得分:0)
要验证页面是否已完全加载,请循环使用以下语句,直到它返回值&#34;完成&#34;
(String) ((JavascriptExecutor) driver).executeScript("return document.readyState");
有关详细信息,请参阅here