なぜか部内でSeleniumを演習形式で紹介する流れになったので、環境準備の手順パワポを作るネタ準備にブログを書こうかと思います(^^;
とりあえずNetBeansが入っていればササっと遊べる感じです。
実行環境は以下です。基本的にはNetBeans7.2.1を入れただけ、で動かせます。
実行環境
プロジェクトを作成する
ライブラリの追加
JUnit
Mavenを利用しているので、pom.xmlにJUnitの依存性を記述します。
デフォルトで3.8.1の記述があるので
4.11に変えました。
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を使う前提とするため)。
テスト・パッケージで右クリックして、「その他」を選びます。
カテゴリ「単体テスト」を選び、右ペインで「JUnitテスト」を選択します。
サンプルとして画面遷移の確認をするテストを作るので、クラス名「PageTransferTest」等と入力します。
テストコードを記述します。
ログインとかのサンプルが本来は良いと思うのですが、ここでは「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の中を適当な文字を入れたりすると、テストエラーとなり(上記コードだとブラウザは立ち上がりっぱなしなので手動で閉じます)、ビルドエラーとなります。
なお、プロジェクトを右クリックした「テスト」で実行すると
テストウィンドウで確認できます。
ビルド時のテストスキップ
ビルドの度にブラウザ起動してたらいやだよ!という場合は以下オプションを入れれば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開発で利用するテストツールはJUnitとArquillianをメインとすることにしました。
DB含めた内部ロジックはこれらで網羅可能かなと。
UI周辺は上記に書いたSeleniumを利用します。
(ArquillianにDroneというSeleniumベースのテストツールがあるようですが、未調査…)
UIを含めた自動テストはどこまでを自動化するか非常に悩みどころでもありますが、とりあえず今の所
- PrimeFacesのバージョンアップ時に既存利用コンポのリグレッション
- 自分達で作った複合コンポーネントの変更時のリグレッション
- コンポーネント単位でのクロスブラウザ確認
- 業務シナリオでコアとなる流れをリグレッション
辺りに絞って利用する予定です。