2014-06-28 77 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