Webdriver:等待PagetoLoad,然后滚动到元素

时间:2016-12-13 15:20:02

标签: java selenium selenium-webdriver webdriver

  1. 我需要等待页面'弹出叠加'加载才能滚动到相关的网页元素。

  2. 以下代码在找到并滚动到网页元素时成功,但我想避免使用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. 第3。任何人都可以建议另一种方法等待页面加载,然后滚动到预期的webelement而不使用thread.sleep?

    enter image description here

    非常感谢你的帮助

3 个答案:

答案 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