Java WebDriver等待网站完全加载

Java WebDriver等待网站完全加载,java,webdriver,Java,Webdriver,我有以下代码: String chromeDriverPath = "C:\\buildtools\\chromedriver.exe" ; System.setProperty("webdriver.chrome.driver", chromeDriverPath); ChromeOptions options = new ChromeOptions(); options.addArguments("--headless", "-

我有以下代码:

        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(超时)被添加到它抛出的

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呈现的类似网站:

app.nocache.js
将触发整个DOM的呈现(至少在普通浏览器上是这样做的)


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

您可以为页面加载保留一个明确的等待条件。对于显式等待,请从页面中标识某些元素,并在条件中指定WebElement。其中,驱动程序将等待该项存在

WebDriverWait.until(condition-that-finds-the-element);
您还可以通过添加等待秒数来设置隐式等待,如下所示(更改10)


我还可以看到,
app.nocache.js
甚至没有在WebDriver上下文中执行,在普通的web浏览器上,js被触发,因此页面被正确呈现。Java中的
wait
方法来自,与多线程相关。它与WebDriver和等待元素可用无关。您需要使用
WebDriverWait
或类似的构造。
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);