超簡単なサンプル(seleniumでテストを書くためにちょっと作成)

関Java2012年10月に参加してきました。
最初のセッションでブラウザテストの自動化に興味があったのと、seleniumを実際使ったことがなかったので挑戦することに、まずテスト対象の画面を作成。
NetBean7.2, JDK7を使用しています。コードはtomoTaka01/HelloSample: JaveEE6 project wit... - GitHubにあります。
とりあえず簡単に最初の画面でnameテキストボックスに名前を入力してgreetボタンをクリック
画面遷移し、入力した名前を使って挨拶の文字を画面のh1タグに表示。

  • 最初の画面

  • 遷移後の画面


この画面を作成するのにJavaEEを使用したかったので、寺田さんのここから始める Java EE 6 | 寺田 佳央 - Yoshio Teradaを参考にしました。
本当にとっても簡単でした。(作成する画面自体が簡単すぎるし・・・)
netBeans7.2を使って、以下の順にプロジェクトを作成
1.メニューより新規プロジェクト作成を選択し、[JavaWeb][Webアプリケーション]を選択し[次へ]

2.プロジェクト名を入力し[次へ]

3.サーバーにGlassFishを選択し[次へ]

4.JSFを使うので[JavaServerFaces]をチェックし[終了]

5.これでプロジェクトが作成、最初に[index.xhtml]ファイルが自動で作成されます。

サンプル画面では、DB接続とかしないので必要なファイルは以下の3ファイルのみ
1.Managed Bean

package mbean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="HelloCtl")
@SessionScoped

public class HelloController {

    public HelloController() {
    }
    
    private String name;     // ★1ここに最初の画面で入力したnameを保持

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public String doGreet(){
        return "GreetingPage.xhtml"; // ★2[Greet]ボタンクリック時の遷移先を指定
    }
    public String getGreeting(){
        return "Hello " + name;         // ★3遷移先のh1タグに表示する文言
    }
}

2.JSFページ(サンプルの最初の画面:Hello)

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Hello</title>
    </h:head>
    <h:body>
        <h:form id="form1">
            <h:outputLabel value="name:"></h:outputLabel>
            <h:inputText id="name" value="#{HelloCtl.name}"></h:inputText>   // ★1nameテキストボックス
            <h:commandButton id="greet" value="greet" action="#{HelloCtl.doGreet()}"></h:commandButton> //★2遷移先指定
        </h:form>
    </h:body>
</html>

3.JSFページ(遷移後の画面:Greeting)

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Greeting</title>
    </h:head>
    <h:body>
        <h1><h:outputLabel value="#{HelloCtl.greeting}"></h:outputLabel></h1> // ★3挨拶表示
    </h:body>
</html>

実際WebProjectを作成するより、このブログ書く方が時間掛かっているし・・・
この画面をseleniumを使ってテストを書くのに挑戦!

初めてのselenium

関Java2012年10月で@jyukutyoさんの発表を見てseleniumに挑戦することにしました。
まずはテスト対象のweb画面を作成。
1.ここでnameテキストに「selenium」と入力して、「greet」ボタンをクリック

2.この画面でh1タグに「Hello selenium」と表示

とりあえず、これだけのことをテストコードを書いて実行する。
web画面の作成は、ここに記事(メモ)を書きました。
職場で使いたいのでEclipseを使用することに、まず必要な環境作成
Downloads - selenium - Browser automation framework - Google Project Hostingよりselenium-java.zipファイルをdownload

EclipseでJavaProjectを作成して、downloadしたjarファイルをクラスパスに追加
JUnit Test Caseのファイルを新規作成して、以下の内容を実装(@jyukutyoさんはTestNGを使用していましたが、とりあえず今回はJUnitを使用)

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class TestHello2 {

	@Test
	public void test() throws IOException {
		WebDriver driver = new FirefoxDriver();
		driver.get("http://localhost:8080/HelloSample/faces/Hello.xhtml"); // ★1最初の画面起動
		final int timeoutInSeconds = 5;
		WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds);
		wait.until(ExpectedConditions.titleIs("Hello"));
		WebElement name = driver.findElement(By.id("form1:name"));
		name.sendKeys("selenium");  // ★2ここでnameテキストに「selenium」と入力
		WebElement greetBtn = driver.findElement(By.id("form1:greet"));
		greetBtn.click();          // ★3「greet」ボタンをクリック
		wait.until(ExpectedConditions.titleIs("Greeting")); // ★4画面遷移をtitleで確認
		WebElement element = driver.findElement(By.tagName("h1"));
		Assert.assertEquals(element.getText(), "Hello selenium"); // ★5h1タグの内容を検証
		// ★この時点の画面をスクリーンショットをとって保存
		File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
		FileUtils.copyFile(file, new File("test.png"));
		driver.close();
	}
}

テストで作成した画面のスクリーンショット

テストも無事グリーンに

コードはmy first selenium (for HelloSample) · GitHubにあります。
次はできればこのテストをGroovy,Gebでも挑戦したい、eclipseを使って、、、
同じテストをGebで試したかったが、エラーが発生中、><、初めてGebに挑戦 - tomoTakaの日記
同じテストをGebで再度挑戦
初めてGebに挑戦2 - tomoTakaの日記

関Javaに行ってきました。

関Java2012年10月に行ってきました。

いずれの内容もとっても勉強になりました。
最初のブラウザテストは、今の業務でwebの開発のテストをなんとかseleniumを使って自動化するように説得したいので、挑戦してみました。初めてのselenium - tomoTakaの日記
HTML5、gitもいつか業務で使うことができればと思います。
gitは、自宅で一人でしか使ったことがないので、チームで使う場合の問題点とかがとても解りやすく、楽しく解説されていました。
本当に皆さんとても勉強されていて、頭の下がる思いです。
次回はJavaOne2012SanFranciscoの報告もあるので今からとても楽しみにしています!
来年こそは、JavaOne行きたい!