開発者ブログ

03.基本的なテストコードの書き方

Last modified by kashi on 2017/04/13, 17:29

ここでは Pitalium を使用した基本的なテストコードの書き方を示します。
Pitalium は Selenium を拡張したライブラリですので、ページの表示やページ上の要素の操作は全て Selenium の操作に準じています。 Selenium Documentation 等も参考にすると良いでしょう。

テストライブラリの使用方法

サンプルプロジェクトをチェックアウトする

GitHubからpitalium-sampleプロジェクトをチェックアウトし、
READMEに従ってivy_build.xmlを実行します。

capabilities.jsonを用意する

capabilities.jsonはどのブラウザでテストするか、が記述されたファイルです。サンプルは pitalium-sample/src/main/resources にあります。
PC向けブラウザの設定例モバイル向けの設定例を参考に、テストを実行したいブラウザの情報だけを記述します。プロパティの詳細情報は Selenium Gridの設定(Capability) を参照ください。

Internet Explorer、Firefox、Google Chromeでテストを実行する場合は次の様になります。

[
  {
   "browserName": "internet explorer",
   "version": "11"
  },
  {
   "browserName": "firefox"
  },
  {
   "browserName": "chrome"
  }
]

テストクラスを作成する

このライブラリを利用するには、 PtlTestBase クラスを継承したテスト用のクラスを作成します。
pitalium-sample/src/main/java 以下に、次のテストクラスを作成します。

import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.*;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import com.htmlhifive.pitalium.core.PtlTestBase;

public class SampleTest extends PtlTestBase {

   @Test
   public void test() throws Exception {
       // 1. hifiveサイトのトップページを開きます
       driver.get("https://www.htmlhifive.com/");

       // 2. hifiveサイトのトップページのスクリーンショットを撮影します
       assertionView.assertView("OpenhifiveTopPage");

       // 3. "#about" に表示されているタイトルが正しいことをチェックします
       WebElement about = driver.findElementById("about");
        WebElement title = about.findElement(By.tagName("h2"));
        assertThat(title.getText(), is("hifiveとは"));
   }

}

このテストコードは以下の内容を行っています。

  1. hifiveサイトのトップページを開きます。
    ページを開くには PtlTestBaseの driver フィールドの get メソッド を使用します。
  2. hifiveサイトのトップページのスクリーンショットを OpenhifiveTopPage というIDで撮影します。
    PtlTestBaseの assertionView フィールドの assertView メソッド を使用します。このメソッドの詳細は こちら に記載されています。
  3. "#about" に表示されているタイトルが正しいことをチェックします。
    WebElementの getText メソッドを使い対象のDOM要素のテキストを取得します。

※WebDriverの生成やクローズ処理はライブラリが自動で行いますので、テストコードの中に書く必要はありません。

クリックして画面遷移する

次に画面上のリンクをクリックして画面遷移前後のスクリーンショットを撮影するテストの例です。

import org.junit.Test;
import org.openqa.selenium.WebElement;

import com.htmlhifive.pitalium.core.PtlTestBase;

public class SampleTest extends PtlTestBase {

   @Test
   public void testClickAndCapture() throws Exception {
       // 1. hifiveサイトのトップページを開きます
       driver.get("https://www.htmlhifive.com/");

       // 2. hifiveサイトのトップページのスクリーンショットを撮影します。
       assertionView.assertView("OpenhifiveTopPage");

       // 3. "過去のお知らせ一覧" ボタン要素を取得してクリックします。
       WebElement infoHistoryButton = driver.findElementByCssSelector("#news a.btn");
        infoHistoryButton.click();

       // 4. ページ遷移後のスクリーンショットを撮影します。
       assertionView.assertView("OpenNewsListPage");
   }

}

このテストでは以下の内容を行っています。

  1. hifiveサイトのトップページを開きます。
  2. hifiveサイトのトップページのスクリーンショットを OpenhifiveTopPage というIDで撮影します。
  3. リンクをクリックします。
    WebElementの click メソッドを使用すると要素をクリックできます。
  4. 画面遷移後の過去のお知らせ一覧画面のスクリーンショットを OpenNewsListPage というIDで撮影します。

フォームをポストして画面遷移する

次に、テキストボックスに文字を入力して送信する例を示します。

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import com.htmlhifive.pitalium.core.PtlTestBase;

public class SampleTest extends PtlTestBase {

   @Test
   public void testInputAndSubmitAndCapture() throws Exception {
       // 1. hifiveサイトのトップページを開きます
       driver.get("https://www.htmlhifive.com/");

       // 2. hifiveサイトのトップページのスクリーンショットを撮影します。
       assertionView.assertView("OpenTopPage");

       // 3. 画面右上の検索ボックスに入力して、サイト検索を実行します。
       WebElement form = driver.findElementByCssSelector("#globallinks form");
        WebElement searchBox = form.findElement(By.id("headerglobalsearchinput"));
        searchBox.sendKeys("test search");
        form.submit();

       // 4. ページ遷移後のスクリーンショットを撮影します。
       assertionView.assertView("OpenSearchResultPage");
   }

}

このテストコードは以下の内容を行っています。

  1. hifiveサイトのトップページを開きます。
  2. hifiveサイトのトップページのスクリーンショットを OpenhifiveTopPage というIDで撮影します。
  3. 入力ボックスに文字を入力し、フォームをサブミットします。
    WebElementの sendKeys メソッドを使用すると入力ボックスに文字を入力することができます。
    また submit メソッドはform要素のsubmitを実行します。
  4. 画面遷移後の検索結果一覧画面のスクリーンショットを OpenSearchResultPage というIDで撮影します。
    この例では取得したDOM要素の sendKeys メソッドで入力ボックスに文字を送信し submit メソッドでフォームをサブミットします。サイト内検索の画面遷移と検索結果のテストを行っています。

動作確認

以下の状態を確認し、JUnitのテストを実行します。

  • localhostでSelenium Grid ハブサーバーが起動していること
  • localhostでSelenium Grid ノードサーバーが起動していること
  • Selenium Grid ノードサーバーのnodeConfigBrowser.jsonにテスト対象のブラウザを記述していること
  • capabilities.jsonを作成する の通り capabilities.json を作成したこと

※Selenium Grid ハブサーバーに登録されているブラウザの一覧は http://localhost:4444/grid/console から確認することが出来ます。

実行すると、Internet Explorer、Firefox、Google Chromeが起動し、ブラウザの操作・スクリーンショットの取得が行われます。
取得したスクリーンショットは、pitalium-sample/resultsフォルダ以下に保存されています。
テスト実行時の設定項目や結果の確認については、次の章で詳しく説明します。

次のステップ ⇒ 04.基本的なテストの実行方法

参照


Copyright (C) 2012-2017 NS Solutions Corporation, All Rights Reserved.