14

我遇到了以下问题:我正在使用带有 Browserversion Firefox_3_6 的 HtmlUnitDriver 运行带有 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.do

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

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

4

5 回答 5

21

您可以通过以下任一方式启用 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 在评论中指出的那样,使用Explicit 和 Implicit Waits而不是Thread.sleep(). 由于这些天我不使用它们,但我无法确认。如果有人测试它们并更新这个答案,那就太好了。

于 2012-05-30T05:48:23.927 回答
6

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

new HtmlUnitDriver(true);
于 2011-10-28T07:24:58.873 回答
4

如果您希望BrowserVersion使用 HtmlUnitDriver 设置和启用 Javascript,则您的初始化需要如下所示(因为无法通过构造函数同时执行这两项操作):

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

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

于 2012-02-15T17:25:41.477 回答
3

您可能需要这样做:

WebDriver driver = new HtmlUnitDriver(BrowserVersion.INTERNET_EXPLORER_8);
((HtmlUnitDriver) driver).setJavascriptEnabled(true);
于 2012-06-20T08:40:33.693 回答
2

好吧,有一种简单的方法可以启用浏览器功能和 javascript,您可以执行以下操作:

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

True 指定应启用 javascript。@格伦尼尔森,

于 2016-09-13T07:25:36.497 回答