WebDriver等待网站完全加载

时间:2019-06-22 07:09:22

标签: java 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秒,那么正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以为页面加载保留明确的等待条件。为了进行明确的等待,请从页面中标识一些元素,然后在条件中提供WebElement。驱动程序将在哪里等到该项目存在。

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

您还可以通过添加等待的秒数(在原位置更改10)来如下设置隐式等待。

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