java - 为什么 HtmlUnitDriver 不执行 JavaScript?

标签 java javascript ajax selenium htmlunit-driver

我遇到了以下问题: 我正在使用带有浏览器版本 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 "),我的测试会成功,但这不是执行此操作的正确方法。

最佳答案

您可以通过执行以下任一操作来启用 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 and Implicit Waits 可能会更好而不是 Thread.sleep()。由于这些天我不使用它们,所以我无法确认。如果有人测试它们并更新此答案,那就太好了。

关于java - 为什么 HtmlUnitDriver 不执行 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7926246/

相关文章:

java - EJB 和同步

java - 通过 HashMap 在该自动机中从一个状态移动到另一个状态

javascript - 如何制作一个稀有的动画与经常出现的动画一起出现?

javascript - 使用ajax加载内容并附加

php - 如何保护ajaxRequest.open php脚本

javascript - 如何在饼图js中显示数据库中的百分比数据?

java - 从 PDImageXObject 获取图像大小

java - JPA TABLE_PER_CLASS继承: abstract entity table created

javascript - 在调用另一个流之前等待一个流

javascript - VueJS 在渲染函数调用中将 props 传递给子级