我有这个网络代码:
<a id="btn">Click</a>
<script>
$('document').ready(function() {
$('#btn').click(function() {
...
location.search = $.params({click: '1'});
});
});
</script>
此代码在Chrome中完美运行。
但我想用HtmlUnit测试它。我写道:
page= (HtmlPage) ((HtmlAnchor) page.getDocumentElement().querySelector("#btn")).click();
assertThat(page.getUrl().getQuery(), containsString("click=1"));
此代码随机工作。有时测试通过,有时失败。 我认为这是因为对JS的异步调用,但我无法解决它。
那我怎么测试呢?
此外,还有更好的解决方案来测试网站上的HtmlUnit吗? HtmlUnit很失望......
答案 0 :(得分:0)
您的代码随机工作的事实可能意味着异步JS调用中存在计时问题。我在另一个问题中解释了解决这类问题的最佳方法:Get the changed HTML content after it's updated by Javascript? (htmlunit)
回答你的第二个问题,就JS来说,HtmlUnit是一个痛苦的问题。也许Selenium与本机浏览器(例如:IE)驱动程序是更好的选择。计划C将是PhantomJS,但它不是Java库。
答案 1 :(得分:0)
我也遇到了类似的问题。我的 html 链接正在使用事件触发 javascript。
我不工作的测试代码是:
HtmlAnchor anchor = element.getFirstByXPath("//a[@id='...']");
anchor.click(); // This is not firing events on js side!!!!
工作原理:
HtmlAnchor anchor = element.getFirstByXPath("//a[@id='...']");
anchor.fireEvent("click"); // JS running which listening on click events!