2011-09-27 28 views
13

Tôi biết rằng trong HtmlUnit tôi có thể fireEvent gửi trên biểu mẫu và nó sẽ được đăng. Nhưng nếu tôi tắt javascript và muốn đăng một biểu mẫu bằng cách sử dụng một số chức năng được tích hợp sẵn?HtmlUnit, cách đăng biểu mẫu mà không cần nhấp vào nút gửi?

Tôi đã kiểm tra javadoc và chưa tìm thấy cách nào để thực hiện việc này. Điều lạ lùng là không có chức năng như vậy trong HtmlForm ...


tôi đọc javadoc và hướng dẫn trên trang HtmlUnit và tôi biết rằng tôi có thể sử dụng getInputByName() và nhấp vào nó. Đôi khi BuT có các biểu mẫu không có nút loại hoặc thậm chí có nút như vậy nhưng không có thuộc tính tên.

Tôi yêu cầu trợ giúp trong trường hợp như vậy, đây là lý do tại sao tôi đang sử dụng fireEvent nhưng không phải lúc nào cũng hoạt động.

+0

tôi khuyên bạn nên sử dụng một 'HttpURLConnection' và làm theo hướng dẫn nêu [ở đây] (http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests). Hoặc sử dụng lớp 'HttpClient' của Apache. – mrkhrts

+0

Kiểm tra lại JavaDoc :) Hoặc phần Giới thiệu -> Bắt đầu, như Ransom Briggs sugests. Tôi sẽ không đi cho cách tiếp cận mrkhrts ... nó là quá thấp –

Trả lời

2
final HtmlSubmitInput button = form.getInputByName("submitbutton"); 
final HtmlPage page2 = button.click() 

Từ the htmlunit doc

@Test 
public void submittingForm() throws Exception { 
    final WebClient webClient = new WebClient(); 

    // Get the first page 
    final HtmlPage page1 = webClient.getPage("http://some_url"); 

    // Get the form that we are dealing with and within that form, 
    // find the submit button and the field that we want to change. 
    final HtmlForm form = page1.getFormByName("myform"); 

    final HtmlSubmitInput button = form.getInputByName("submitbutton"); 
    final HtmlTextInput textField = form.getInputByName("userid"); 

    // Change the value of the text field 
    textField.setValueAttribute("root"); 

    // Now submit the form by clicking the button and get back the second page. 
    final HtmlPage page2 = button.click(); 

    webClient.closeAllWindows(); 
} 
+2

OP đã được chỉnh sửa và bây giờ nó nói rằng không có một nút gửi. – Gray

38

Bạn có thể sử dụng nút một 'tạm thời' submit:

WebClient client = new WebClient(); 
HtmlPage page = client.getPage("http://stackoverflow.com"); 

// create a submit button - it doesn't work with 'input' 
HtmlElement button = page.createElement("button"); 
button.setAttribute("type", "submit"); 

// append the button to the form 
HtmlElement form = ...; 
form.appendChild(button); 

// submit the form 
page = button.click(); 
+1

điều này là rực rỡ – Leo

+0

Bạn của tôi là một thiên tài! Đã làm việc xung quanh điều này trong một tuần nay! – duffanpj

+0

Đó là giải pháp, tôi sử dụng nó rất nhiều gạch trong quá khứ và không bao giờ có bất kỳ vấn đề. –

7
WebRequest requestSettings = new WebRequest(new URL("http://localhost:8080/TestBox"), HttpMethod.POST); 

// Then we set the request parameters 
requestSettings.setRequestParameters(Collections.singletonList(new NameValuePair(InopticsNfcBoxPage.MESSAGE, Utils.marshalXml(inoptics, "UTF-8")))); 

// Finally, we can get the page 
HtmlPage page = webClient.getPage(requestSettings); 
1

Làm thế nào về việc sử dụng built-in hỗ trợ javascript? Chỉ cần gửi sự kiện gửi trên biểu mẫu đó:

HtmlForm form = page.getForms().get(0); 
form.fireEvent(Event.TYPE_SUBMIT); 

Mã này giả sử bạn muốn gửi biểu mẫu đầu tiên trên trang web.

Và nếu nộp tiền đạo bạn đến trang web khác, chỉ cần liên kết các phản ứng để biến trang:

HtmlForm form = page.getForms().get(0); 
page = (HtmlPage) form.fireEvent(Event.TYPE_SUBMIT).getNewPage(); 
Các vấn đề liên quan