2014-06-28 64 views
2

我有这样的网页代码:的HtmlUnit等待onclick事件

<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的异步调用,但我无法解决它。

那么我该如何测试它?

此外,有更好的解决方案来测试网站insted HtmlUnit? HtmlUnit失望...

回答

0

事实上,您的代码随机工作可能意味着在异步JS调用中存在计时问题。我已经解释了在这个问题中解决这些问题的最佳选择:Get the changed HTML content after it's updated by Javascript? (htmlunit)

回答第二个问题时,HtmlUnit对于JS来说是个痛处。也许Selenium与本地浏览器(例如:IE)驱动程序是一个更好的选择。 C计划将是PhantomJS,但它不是Java库。

+0

我不会在代码中使用AJAX,如代码中所示... – nrofis

+0

好点。我假设你在你的'...'中执行AJAX调用。无论哪种方式,如果它是异步的,那么你可以用同样的方式处理它。现在我看到了什么可能是问题:'location.search'正在执行另一个HTTP请求。所以你应该等待请求完成。再次,这应该像我在另一个问题中解释的那样,通过应用手动延迟 –

+0

否,在'...'代码中它仅仅用于设置变量。这个功能没有更多的动作。 – nrofis