为什么HtmlUnitDriver不执行JavaScript?

我遇到以下问题:
我正在使用带有browserversion Firefox_3_6的 HtmlUnitDriver的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”),但不能是正确的方法来做到这一点.

解决方法

您也可以通过执行JavaScript来启用JavaScript

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

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

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

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

Thread.sleep(100);

runtest();

更新

正如@Corey在评论中指出的那样,使用Explicit and Implicit Waits而不是Thread.sleep()可能更好.由于这些天我不使用它们,我不能确认.如果有人测试他们并更新此答案,这将是巨大的.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些