使用HtmlUnit提交表单

时间:2015-08-15 10:29:58

标签: javascript java html forms htmlunit

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

    <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();

但似乎它没有得到输入的值..

1 个答案:

答案 0 :(得分:2)

如您所见,此html包含一些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函数,了解他们对您的网页所做的工作。