2015-08-15 77 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