Jenkins(旧ハドソン)向けの簡単なHTMLUnitテストスクリプトを作成したいと思います。情報:JenkinsはYUI Javascriptライブラリを使用します。 YUIライブラリは、フォーム送信をカスタムボタンに置き換えます。このスクリプトはJenkinsで新しい仕事を作成するだけです。YUIフォーム送信のHTMLUnitスクリプトの作成に関する問題
開始ジェンキンス:HTMLUnitの
現在のバージョンでは、任意のより多くのform.submitをサポートし、フォームの提出用)button.clickを(使用する必要はありません-jar jenkins.war のjava。残念ながら、これはJenkinsでは機能しません(下のサンプルはページを進めずにジョブを作成して新しいジョブページに残ります)
解決策や回避策を見つけるのに数時間掛かりましたが、提出されたフォームを入手してください。うまくいけば、誰かが解決策を見つけて私に知らせてくれるでしょう。ここで
は私のサンプルコードです:
package example;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlButton;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
public class jenkins3 {
public static void main(String args[]) {
// create a new job in jenkins
// home
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
try {
final HtmlPage page1 = webClient.getPage("http://localhost:8080");
//assertEquals("Dashboard [Jenkins]", page1.getTitleText());
// new job
final HtmlAnchor new_job = page1.getAnchorByText("New Job");
final HtmlPage page2 = new_job.click();
// job name
HtmlTextInput name_field = (HtmlTextInput) page2.getElementById("name");
name_field.type("new job by htmlunit");
// radio button
final HtmlInput radio_freestyle = (HtmlInput) page2.getByXPath("//input[@value='hudson.model.FreeStyleProject']").get(0);
radio_freestyle.click();
Thread.sleep(10000);
// OK button (submit form)
final HtmlForm form = page2.getFormByName("createItem");
//final HtmlSubmitInput button = (HtmlSubmitInput) form.getByXPath("//button").get(0);
final HtmlButton button = (HtmlButton) form.getByXPath("//button").get(0);
final HtmlPage page3 = button.click(); // !!!!! Form submit does not workstacko
//assertEquals("Dashboard [Jenkins]", page3.getTitleText());
}
catch(Exception e) {
System.out.println("General exception thrown:" + e.getMessage());
e.printStackTrace();
}
webClient.closeAllWindows();
}
}
ブラウザでページを見たときにフォームを送信するにはどうすればよいですか? HtmlUnitは、通常、人間がページとのやり取りを複製しようとしますが、ブラウザ経由で行うことはできないDOMレベルの操作は複製しません。 –
上記のように、JenkinsはYUI Javascriptライブラリを使用しています。 YUIライブラリは、フォーム送信をカスタムボタンに置き換えます。このボタンはフォームの送信アクションをトリガし、フォームの送信前にすべての入力フィールドを1つの隠しフィールドにマングリングするような舞台裏でいくつかのマジックを行います。 – mark