2014-09-03 60 views
2

我正在使用HTMLUnit爲了在輸入框中放置文本,然後單擊實際上是JS調用的鏈接。 當我在輸入中使用inputBox.setValueAttribute("example input");來輸入文本時,問題就出現了。在這種情況下,點擊按鈕後頁面根本不會改變。 另一方面,一旦我刪除inputBox.setValueAttribute("example input");,然後單擊該按鈕,頁面內容會發生更改,幷包含空輸入的錯誤。HTMLUnit等待JS問題

以下是我用於將文本放入相關輸入中的代碼,然後單擊該按鈕。

public void addressToBlockPlot(){ 
     WebClient client = new WebClient(BrowserVersion.FIREFOX_24); 
     client.getOptions().setThrowExceptionOnScriptError(false); 
     client.getOptions().setThrowExceptionOnScriptError(false); 
     client.setJavaScriptTimeout(10000); 
     client.getOptions().setJavaScriptEnabled(true); 
     client.setAjaxController(new NicelyResynchronizingAjaxController()); 
     client.getOptions().setTimeout(10000); 


     try { 
      HtmlPage page = client.getPage("http://mapi.gov.il/Pages/LotAddressLocator.aspx"); 

      HtmlInput inputBox = (HtmlInput)page.getHtmlElementById("AddressInput"); 
      final HtmlAnchor a = (HtmlAnchor) page.getElementById("helkaSubmit"); 

      inputBox.setValueAttribute("example input"); 

      a.click(); 
      client.waitForBackgroundJavaScript(2000); 
      HtmlPage page2= (HtmlPage) client.getCurrentWindow().getEnclosedPage(); 

      System.out.println(page2.asXml()); 

     } catch (Exception e) { 

     } 

    } 

解決此問題的任何想法?

編輯: 我使用inputBox.setValueAttribute("");嘗試,這導致在接收時沒有輸入文本設置爲全部,我得到了同樣的錯誤。

回答

0

我幾乎類似的問題,在JS需要一些時間來加載,我已經通過設置等待和重試,直到頁面加載解決了這個問題,成功加入了條件,

int input_length = page.getByXPath("//input").size(); 
    int tries = 5; 
    while (tries > 0 && input_length < 12) { 
     tries--; 
     synchronized (page) { 
      page.wait(2000); 
     } 
     input_length = page.getByXPath("//input").size(); 
     System.out.println("page loaded successfully"); 
    } 

這裏input_length確定是否需要頁面是否被加載。你可以根據你的頁面結構使用類似的條件。