为什么 HtmlUnitDriver 不执行 JavaScript?



我有以下问题:我正在使用HtmlUnitDriver与Browserversion Firefox_3_6运行Selenium 2.9的JUnit测试用例。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。

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

是否有办法得到这个工作与HtmlUnitDriver?我的测试工作,如果我手动调用driver.get("http://host/ABC.do"),但这不能是正确的方式来做到这一点。

您可以通过以下方式启用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()可能会更好。因为我现在不用了,所以我不能确认。如果有人测试他们并更新这个答案就太好了。

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

new HtmlUnitDriver(true);

如果您希望设置BrowserVersion以及启用Javascript与HtmlUnitDriver,您的初始化需要看起来像下面(因为没有办法通过构造函数做到这两点):

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

这将允许您使用您选择的浏览器定义并使用Javascript。

您可能需要这样做:

WebDriver driver = new HtmlUnitDriver(BrowserVersion.INTERNET_EXPLORER_8);
((HtmlUnitDriver) driver).setJavascriptEnabled(true);

嗯,有一个简单的方法来启用浏览器功能和javascript,你可以这样做:

Webdriver driver = new HtmlUnitDriver(BrowserVersion.Chrome,true);

True指定应该启用javascript。@Glenn纳尔逊,

相关内容

  • 没有找到相关文章

最新更新