首页 > 解决方案 > WebDriver 等到网站完全加载

问题描述

我有这个代码:

        String chromeDriverPath = "C:\\buildtools\\chromedriver.exe" ;
        System.setProperty("webdriver.chrome.driver", chromeDriverPath);
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless", "--disable-gpu", "--window-size=1920,1200","--ignore-certificate-errors");
        WebDriver driver = new ChromeDriver(options);
        driver.get(prerenderUrl);
        //driver.wait(timeout);
        String pageSource = driver.getPageSource();
        log(pageSource);

如果driver.wait(timeout);添加了代码,则会抛出

java.lang.IllegalMonitorStateException
    at java.lang.Object.wait(Native Method)

无需等待页面呈现,但问题是需要呈现的网站是纯 Javascript,意思是,它看起来像这样

<html>
<body>
<div id="rootPanel">Website will be rendered here</div>
<script type="text/javascript" language="javascript" src="app.nocache.js"></script>
</body>
</html>

这是一个使用 Javascript 呈现的类似网站:http: //samples.gwtproject.org/samples/Showcase/Showcase.html

app.nocache.js将触发整个 DOM 的渲染(至少这是它在普通浏览器上所做的)

如果driver.wait()功能不是正确的等待 5 到 10 秒,那么正确的方法是什么?

标签: javawebdriver

解决方案


您可以为页面加载保留明确的等待条件。对于显式等待,从页面中识别一些元素并在条件中给出 WebElement。司机将在哪里等到该项目存在。

WebDriverWait.until(condition-that-finds-the-element);

您还可以通过添加等待秒数来设置隐式等待,如下所示(将 10 更改为原位)。

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

推荐阅读