Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

NetBeans&Mavenで始めるSeleniumを使ったブラウザUIテスト

なぜか部内でSeleniumを演習形式で紹介する流れになったので、環境準備の手順パワポを作るネタ準備にブログを書こうかと思います(^^;
とりあえずNetBeansが入っていればササっと遊べる感じです。

実行環境は以下です。基本的にはNetBeans7.2.1を入れただけ、で動かせます。

実行環境

プロジェクトを作成する

新規Javaプロジェクト(Maven)の作成

Mavenでプロジェクトを作成します。「ファイル」メニューから「新規プロジェクト」を選びます。
f:id:kikutaro777:20130122194834j:plain
カテゴリ「Maven」を選択して「Javaアプリケーション」を選択します。
f:id:kikutaro777:20130122194840j:plain
プロジェクト名は適当に、グループID以下もとりあえず適当でも問題ないです。
f:id:kikutaro777:20130122194846j:plain

ライブラリの追加

JUnit
Mavenを利用しているので、pom.xmlJUnitの依存性を記述します。
デフォルトで3.8.1の記述があるので
f:id:kikutaro777:20130122194901j:plain
4.11に変えました。
f:id:kikutaro777:20130122194906j:plain

Selenium
pom.xmlに以下依存性を記述します。
Seleniumは色々なモジュールが必要ですが、Maven使うと楽です。

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>2.28.0</version>
    <scope>test</scope>
</dependency>

テストメソッドで日本語使う用
今回の例ではテストで日本語メソッド使うので以下プラグインを追加しておきます。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.13</version>
        </plugin>
    </plugins>
</build>

テストクラスを作成する

テストクラスの作成

Mavenでプロジェクト作成をしたので、testフォルダは既にできています。
テスト・パッケージをみるとデフォルトで「AppTest.java」が出来ていますが、これはJUnit3.8.1で作られたサンプルなので、今回は削除します(4.11を使う前提とするため)。
f:id:kikutaro777:20130122195050j:plain
テスト・パッケージで右クリックして、「その他」を選びます。
カテゴリ「単体テスト」を選び、右ペインで「JUnitテスト」を選択します。
サンプルとして画面遷移の確認をするテストを作るので、クラス名「PageTransferTest」等と入力します。
f:id:kikutaro777:20130122195101j:plain

テストコードを記述します。
ログインとかのサンプルが本来は良いと思うのですが、ここでは「Yahooのサイトで検索して画面遷移したことを確認する」というサンプルを書いてみます(^^;テストとしてはびみょー。

package jp.co.hoge.ui;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import static org.hamcrest.CoreMatchers.*;

public class PageTransferTest {
    
    private WebDriver driver;
    
    public PageTransferTest() {
    }
    
    @BeforeClass
    public static void setUpClass() {
    }
    
    @AfterClass
    public static void tearDownClass() {
    }
    
    @Before
    public void setUp() {
        driver = new FirefoxDriver();
        driver.get("http://www.yahoo.co.jp/");
    }
    
    @After
    public void tearDown() {
    }
    
    @Test
    public void Yahooで検索文字入力して検索ボタン押下後ページ遷移するか確認() {
        WebElement 検索テキスト = driver.findElement(By.id("srchtxt"));
        WebElement 検索ボタン = driver.findElement(By.id("srchbtn"));
        
        検索テキスト.sendKeys("selenium");
        検索ボタン.click();
        
        assertThat(driver.getTitle(), is("「selenium」の検索結果 - Yahoo!検索"));
        
        driver.close();
    }
}

今回の例ではFirefoxを利用しましたが、IEやChromeも利用可能です。
ただし、上手く起動しない場合もあるので、そのあたりはネットでググって頂ければ…(^^;

ビルドするとブラウザが起動してYahooのサイトへつなぎ、検索文字を入力して検索ボタンを押して画面遷移します。
試しにassertThatのisの中を適当な文字を入れたりすると、テストエラーとなり(上記コードだとブラウザは立ち上がりっぱなしなので手動で閉じます)、ビルドエラーとなります。

なお、プロジェクトを右クリックした「テスト」で実行すると
f:id:kikutaro777:20130122200021j:plain
テストウィンドウで確認できます。

ビルド時のテストスキップ

ビルドの度にブラウザ起動してたらいやだよ!という場合は以下オプションを入れればskipも可能です(あまり推奨ではないとのことですが)。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.13</version>
            <configuration>
                <skipTests>false</skipTests>
            </configuration>
        </plugin>
    </plugins>
</build>

Java EEでの自動テスト

余談ですが、Java EE開発で利用するテストツールはJUnitとArquillianをメインとすることにしました。
DB含めた内部ロジックはこれらで網羅可能かなと。

UI周辺は上記に書いたSeleniumを利用します。
(ArquillianにDroneというSeleniumベースのテストツールがあるようですが、未調査…)

UIを含めた自動テストはどこまでを自動化するか非常に悩みどころでもありますが、とりあえず今の所

辺りに絞って利用する予定です。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村