yamashiro0110の日記

yamashiro0110の日記です。おもにIT技術のメモを綴っていきます(^o^)

Selenium Web Driverを試してみた


プログラム修正してデプロイするたびに、ブラウザをポチポチして動作確認すんのめんどくせー!!ってことで テストを自動化してみようと思いました。

今回はそれぞれ複数のID・PWでログインするテストを想定しています。
(下記のような感じ)

No ID PASS
1 hoge1 fuga1
2 hoge2 fuga2
3 hoge3 fuga3

htmlは、こんな感じ(超かんたんですが。。。)

  • ログインページ
    • /login.html
<form action="/auth">
ID:<input type="text" name="id">
PW:<input type="text" name="pw">
<input type="submit" value="ログイン">
</form>
  • ログイン成功
    • /success.html
ログイン成功しました!
  • ログイン失敗
    • /fail.html
ログイン失敗しました・・・

3通りの組み合わせのテストをSelenium IDEをつかって、ループ処理をします。

成功した場合は、"ログイン成功しました!"という文字列が存在すること、
失敗した場合は、"ログイン失敗しました・・・"という文字列が存在することを確認します。

通常のSelenium IDEでも出来るのですが、メンテナンスしづらいと思ったので
Selenium WebDriverを使ってJavaJUnitで実装しました。


環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.9.2
BuildVersion:   13C1021
$ java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
  • Selenium Web Driver

    • Language
    • Client Version
      • 2.41.0
    • Release Date
      • 2014-03-27
  • eclipse

    • Version: Kepler Service Release 1
    • Build id: 20130919-0819

Selenium Web Driverをインストール

  • ダウンロードページから、zipをダウンロード

    • http://docs.seleniumhq.org/download/
      • Selenium Client & WebDriver Language Bindingsのとこ
  • eclipseで適当にプロジェクトを作成して、ビルドパスに追加

参考:「Selenium2」のインストール手順と初めの一歩


テストを作成する

  • setUp()で、Firefoxドライバを初期化
  • authTest()で、実際にIDとPWを入力して結果を確認
  • testFinally()で、ブラウザを閉じる
package test;

import static org.junit.Assert.assertTrue;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.lang3.StringUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

/**
 * ログインのテスト
 */
public class TestLogin {

    private WebDriver driver;

    /**
     * ID,PWのマップを取得する
     * @return
     */
    private Map<String, String> getAuthMap() {
        Map<String, String> map =new LinkedHashMap<String, String>();
        map.put("hoge1", "fuga1");
        map.put("hoge2", "fuga2");
        map.put("hoge3", "fuga3");
        return map;
    }

    /**
     * ログイン判定
     * @param driver
     * @return
     */
    private boolean isLogin(WebDriver driver) {
        WebElement element = driver.findElement(By.xpath("/html/body/h1"));
        System.out.println(String.format("%s", element.getText()));
        return StringUtils.equals(element.getText(), "ログイン成功しました!");
    }

    @Before
    public void setUp() throws Exception {
        driver =new FirefoxDriver();
    }

    @Test
    public void authTest() {
        Map<String, String> map = getAuthMap();

        for (Entry<String, String> entry : map.entrySet()) {
            // ログインページを表示
            driver.get("http://127.0.0.1:8080/html/login.html");

            //IDとPWを入力する
            driver.findElement(By.name("id")).sendKeys(entry.getKey());;
            driver.findElement(By.name("pw")).sendKeys(entry.getValue());;

            //Submitボタンを押す
            driver.findElement(By.xpath("/html/body/form")).submit();

            // ログイン判定
            if (isLogin(driver)) {
                assertTrue(String.format("ログイン成功 ID = %s, PW = %s", entry.getKey(), entry.getValue()), true);
            }
            else {
                assertTrue(String.format("ログイン失敗 ID = %s, PW = %s", entry.getKey(), entry.getValue()), false);
            }
        }
    }

    @After
    public void testFinally() {
        driver.quit();
    }
}

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村