HtmlUnit等待onclick事件

时间:2014-06-28 09:41:32

标签: javascript htmlunit

我有这个网络代码:

<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很失望......

2 个答案:

答案 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!