htmlunit 和 document.addEventListener

Posted

技术标签:

【中文标题】htmlunit 和 document.addEventListener【英文标题】:htmlunit and document.addEventListener 【发布时间】:2014-09-07 13:47:00 【问题描述】:

我是 htmlUnit 的新手。如果这已经被问及回答,请原谅。

我无法让 HtmlUnit 处理使用 JQuery 的页面。更准确地说,我无法让 HtmlUnit 处理任何使用 document.addEventListener() 的 JS 代码,例如 JQuery。例如,以下页面在浏览器中工作,但在 HtmlUnit 中不工作:

<html><head>
<script>
  function atest() 
  document.addEventListener( "load", atest, false );
</script>
</head>
<body>This page will load in a browser, but not HtmlUnit.</body></html>

产生的错误是:

======= EXCEPTION START ========
EcmaError: lineNumber=[5] column=[0] lineSource=[<no source>] name=[TypeError] sourceName=[script in http://myhost:8080/mpt/dummy from (3, 9) to (6, 10)] message=    [TypeError: Cannot find function addEventListener in object [object]. (script in     http://myhost:8080/mpt/dummy from (3, 9) to (6, 10)#5)]
com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot find function addEventListener in object [object]. (script in http://myhost:8080/mpt/dummy from (3, 9) to (6, 10)#5)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:705)
…

我尝试了几个不同版本的 JQuery 和 HtmlUnit。我确信 HtmlUnit 可以与 JQuery 一起使用(不是吗?),但可能有一个我不知道的问题。所以提示赞赏。我的 JUnit 代码(如果相关)是:

@Test
public void test() throws FailingHttpStatusCodeException, MalformedURLException, IOException 
    WebClient webClient = new WebClient();
    webClient.getPage("http://myhost:8080/mpt/dummy");

谢谢

【问题讨论】:

【参考方案1】:

是的,似乎 html 单元有错误。

https://github.com/searls/jasmine-maven-plugin/issues/135

最后,我定制了我的 Jasmin maven 插件,以使用 phantom js 无头浏览器运行我的 javascript 测试。

http://searls.github.io/jasmine-maven-plugin/phantomjs.html

如果你使用低于 3.1 的 maven,我现在使用的是 3.0.4,你不能使用自动为你安装 phanom js 浏览器的 maven 插件。这种情况就去web端手动下载吧。

在你的 maven 配置中加入这样的东西。

<webDriverClassName>org.openqa.selenium.phantomjs.PhantomJSDriver</webDriverClassName>
                        <webDriverCapabilities>
                            <capability>
                                <name>phantomjs.binary.path</name>
                                <value>D:\phantomjs-1.9.8\phantomjs.exe</value>
                              </capability>                             
                        </webDriverCapabilities>

看看你的测试在没有 html 单元的情况下是否更成功。

您也可以尝试将 html 单元升级到最新版本,或者使用他们的浏览器仿真。 在我的情况下,错误仍然存​​在,我换成了幽灵。

干杯。

【讨论】:

以上是关于htmlunit 和 document.addEventListener的主要内容,如果未能解决你的问题,请参考以下文章

Java 和 HTMLUnit:如何点击提交按钮?

Java和HTMLUnit:如何点击提交按钮?

htmlunit设置支持js和 ajax

HtmlUnit---网页抓取工具解析及使用

HtmlUnit爬取Ajax动态生成的页面内容

Spring中如何配置重试HtmlUnit请求的次数?