为什么HtmlUnitDriver不执行JavaScript?

我遇到了以下问题:我正在使用HtmlUnitDriver和Browserversion Firefox_3_6运行带有Selenium 2.9的JUnit testCase。JavaScript 已启用。现在,当它应该调用并执行以下javaScript函数时,它什么都不做:

function openIdsDocument()
{
    var windowBounds = getWindowBounds();
    var XMLHTTP = getAjaxRequestObject("XYZ.do?availableWidth="+windowBounds.width+"&availableHeight="+windowBounds.height, "", true);
    if (XMLHTTP != null)
    {
            XMLHTTP.onreadystatechange = function alertAJAXResponse()
            {
                    if (XMLHTTP.readyState == 4)
                    {
                            window.location.href = getContextPath() + "ABC.do";
                    }
            };
            XMLHTTP.send("timestamp=" + <%=System.currentTimeMillis()%>);
    }
    getLoadingState();
}

我想去 ABC.do

如果我使用FirefoxDriver执行测试,它可以正常工作。

有没有办法让它与HtmlUnitDriver一起工作?如果我手动调用driver.get(“http://host/ABC.do”),我的测试可以工作,但这不是正确的方法。


答案 1

您可以通过执行以下操作来启用JavaScript

  • new HtmlUnitDriver(true);
  • driver.setJavascriptEnabled(true);

你需要做的是等到 JavaScript 在 之后执行。get(url)

您可以使用方法来添加一些延迟。Thread.sleep()

HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6);
driver.setJavascriptEnabled(true);
driver.get(url);

Thread.sleep(100);

runTest();

更新

正如注释中@Corey所指出的,使用显式和隐式等待而不是 更好。由于我现在不使用它们,因此我无法确认。如果有人测试它们并更新此答案,那就太好了。Thread.sleep()


答案 2

您需要初始化 HtmlUnitDriver 并启用 javascript true

new HtmlUnitDriver(true);