2016-08-18 192 views
0

我有一個網頁,我已經在javascript中實現了window.setTimeout。事情是我正在實現一個計時器,當時間到期時彈出消息。該值存儲在cookie中。window.setTimeout導致htmlunit運行緩慢

所以,當頁面加載時,我配置超時值的計時器。因此,即使頁面重新加載,計時器也會在每次頁面加載時重新創建。

現在,當我試圖通過htmlunit(版本 - 2.15)測試這個時,我的每個頁面開始加載的時間比平時長。

我們有以下配置的Web客戶端

webClient.getOptions().setTimeout(FIVE_MINUTES_IN_MILLIS); 
webClient.waitForBackgroundJavaScript(NINETY_SECONDS); 

我猜window.setTimeout在實施的HtmlUnit的方式是,它會等待計時器執行或waitForBackgroundJavaScript超時值(以先到爲準)。因此,我的htmlunit運行速度變慢,因爲我的計時器很高(30分鐘),而我的htmlunit每一步都在等待90秒。

我應該如何配置我的htmlunit,以便我的腳本不會等待那個定時器。此外,我需要有waitForBackgroundJavaScript,否則,我的ajax調用將無法工作。

有人可以幫忙嗎?

+0

你有沒有嘗試使用'webClient.waitForBackgroundJavaScript(NINETY_SECONDS);' 只有在ajax調用之後,在獲取頁面之後並在操作它之前(而不是在webClient初始配置)? – haihui

回答

0

我喜歡這個等待我的Ajax調用:

... 
      HtmlPage page = (HtmlPage) webClient.getPage(url); 
      HtmlInput details = null; 
      int tries = 10; 
      while (tries > 0 && details == null) { 
       tries--; 
       details = (HtmlInput) page.getElementById("PlaceHolderConteudo_grdListaResultado_btnDetalhar_0"); 
       synchronized (page) { 
        page.wait(1500); 
       } 
      } 
... 
0

您可以根據就業人數實現自己的等待仍懸而未決

JavaScriptJobManager tmpJobManager = myPage.getEnclosingWindow().getJobManager(); 
int tmpJobCount = tmpJobManager.getJobCount(jobFilter); 

在這種情況下,你可以提供您自己的JavaScriptJobFilter。所以你可以自由排除一些工作等待