From Gossip@caterpillar

JUnit Gossip: 表單測試

動態網頁使用者相關資料的發送多是透過表單,這邊示範幾個表單資訊取得的例子,首先假設我們有下面這個JSP表單網頁:
  • form.htm
<html> 
 <head><title>歡迎</title></head>
 <body>
       請先登入!<p>
    <form name="userForm"
          action="/model2Demo/login.action" method="post">
       名稱 <input type="text" name="username"/><br>
       密碼 <input type="password" name="password"/><p>
        <input type="submit" name="submitBtn" value="送出"/>
    </form>
 </body>
</html>
 
使用以下的程式可以取得一些表單的訊息:
WebConversation webConversation = new WebConversation();
WebResponse response = webConversation.getResponse(
           "http://localhost:8080/model2Demo/form.htm");
WebForm form = response.getFormWithName("userForm");
System.out.println(form.getAction());
System.out.println(form.getMethod());
 

顯示的結果如下:
/model2Demo/login.action
post
 
您可以使用WebForm的getParameterValue()方法來取得表單中的參數值,例如:
String username = form.getParameterValue("username");
String password = form.getParameterValue("password");
 
您也可以取得SubmitButton按鈕物件,例如:
SubmitButton submitBtn =
        form.getSubmitButton("submitBtn");
 
配合WebForm的setParameter()方法,您可以進行表單資料的發送,例如:
WebConversation webConversation = new WebConversation();
WebResponse response = webConversation.getResponse(
           "http://localhost:8080/model2Demo/form.htm");
WebForm form = response.getFormWithName("userForm");

form.setParameter("username", "justin");
form.setParameter("password", "123456");

SubmitButton submitBtn =
        form.getSubmitButton("submitBtn");

response = form.submit(submitBtn);
 

上面的方式適合表單上有多個按鈕時,就我們的表單而言,只有一個按鈕,所以也可以直接透過WebForm的submit()方法來送出資料:
WebConversation webConversation = new WebConversation();
WebResponse response = webConversation.getResponse(
           "http://localhost:8080/model2Demo/form.htm");

WebForm form = response.getFormWithName("userForm");

form.setParameter("username", "justin");
form.setParameter("password", "123456");

response = form.submit();
 
也可以直接使用下面的程式送出表單資料:
WebConversation webConversation = new WebConversation();
WebResponse response = webConversation.getResponse(
           "http://localhost:8080/model2Demo/form.htm");
WebForm form = response.getFormWithName("userForm");

form.setParameter("username", "justin");
form.setParameter("password", "123456");

WebRequest request = form.getRequest("submitBtn");
response = webConversation.getResponse(request);
 
總之,組合的方式有許多種,端看您要進行的測試而決定使用何種方式。