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的主要内容,如果未能解决你的问题,请参考以下文章