2015-08-15 102 views
0

是否有人知道如何使用HtmlUnit,Java提交此表單?使用HtmlUnit提交表單

<form name="sendSmsForm" method="POST" action="/talkmore3/servlet/SendSmsFromSelfcare" onsubmit="return checkBeforeSubmit();"> 
     <input type="hidden" value name="message1" id="message1"/> 
     <input type="hidden" value name="list" id="list"/> 
    <table border="0" width="560"> 
     <tbody> 
      <tr> 
      <td> 
       <div id="ContactListPanel"> 
       <iframe height="425" width="560" frameborder="0" scrolling="no" id="ContactListFrame" name="ContactListFrame" src="/talkmore3/servlet/ManageContactList"> 
       </iframe> 
       </div> 
      </td> 
      </tr> 
      <tr align="left"> 
      <td colspan="2" align="left">   
<div class="button_green" style="width: 114px; float: left;margin-left: 130px"> 
       <a href="javascript:sendSMS();" title="Send SMS"> 
        <span> 
        Send SMS 
        </span> 
       </a> 
       </div> 
      </td> 
      </tr> 
     </tbody> 
     </table> 
    </form> 

我已經試過這一點:

HtmlForm form = page.getFormByName("sendSmsForm"); 
form.getInputByName("list").setValueAttribute("99999999"); 
form.getInputByName("message1").setValueAttribute("test"); 
HtmlAnchor submit = page.getFirstByXPath("//a[@href='javascript:sendSMS();']"); 
submit.click(); 

但好像它沒有得到輸入的值..

+0

試圖通過索引號而不是表單名稱獲得表格 – Arya

回答

2

正如你可以看到,這個網站包含了一些JS腳本,所以你需要運行它來獲得所需的行爲。

試着這麼做:

HtmlForm form = page.getFormByName("sendSmsForm"); 
form.getInputByName("list").setValueAttribute("99999999"); 
form.getInputByName("message1").setValueAttribute("test"); 

page = (HtmlPage) page.executeJavaScript("checkBeforeSubmit()").getNewPage(); // from onsubmit 
page = (HtmlPage) page.executeJavaScript("sendSMS()").getNewPage(); //from submit link 

此代碼應設置表單值,驗證表單,然後做與sendSMS一些行動()方法。

通常您需要跟蹤這些頁面中的js。其中一些人聽輸入改變,做某種驗證等。 另外,請看checkBeforeSubmitsendSMS函數,看看他們在你的頁面上做了什麼。

+0

謝謝你的回答。請幫助類似的問題https://stackoverflow.com/questions/44919818/how-to-submit-file-in-form-with-htmlunit – makson