山崎屋の技術メモ

IT業界で働く中でテクノロジーを愛するSIerのシステムエンジニア👨‍💻 | AndroidとWebアプリの二刀流🧙‍♂️ | コードの裏にあるストーリーを綴るブログ執筆者✍️ | 日々進化するデジタル世界で学び続ける探究者🚀 | #TechLover #CodeArtisan、気になること、メモしておきたいことを書いていきます。

【Selenium】Java で画面の自動テスト

Web アプリの画面(ブラウザ)を自動で操作してくれるテストツールの Selenium 。

公式サイトはこちら。
Selenium - Web Browser Automation

今回は Selenium WebDriver を使って Java で Selenium の導入を行っていきます。

Java 以外の言語を使うとしても、WebDriver の入手方法などは参考になると思います。

Selenium は一つの テスティングフレームワークですが、複数の部品により構成されています。各部品を表す関連用語についてしっかり押さえておきましょう。(この記事では「Selenium WebDriver」を使用します。)

次のサイトが Selenium の歴史も含めわかりやすくまとめられています。
Selenium何とかっていうツールがやたら色々あるのはどういうわけなのか | 品質向上ブログ

今回使ったツール類のバージョンはこちら。

Java : 11
Spring Tool Suite(IDE): 4.3.2
Selenium Server : 3.9.1

さっそく作っていきましょう。

Maven プロジェクトの作成

次のサイトを参考に Maven プロジェクトを作成し、使用する Java のバージョンを変更します。
www.shookuro.com

依存関係に Selenium を追加

pom.xml に dependency を追加します。

	<dependencies>
		<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<version>3.9.1</version>
		</dependency>
	</dependencies>

「selenium-java」の代わりに「selenium-server」でも大丈夫です。違いはよくわかりませんが「selenium-java」は 1 KB に対し「selenium-server」は 579 KB と大きいのでたくさんの機能があるのでしょう。

「selenium-server」にしかない機能が必要になるまでは「selenium-java」で良いと思います。

WebDriver の入手

続いて WebDriver を入手します。

ブラウザごとに WebDriver は異なっており、入手先も異なります。

Selenium の公式サイトに各 WebDriver の取得元 URL が記載されています。
https://www.seleniumhq.org/download/

ここでは例として Firefox のドライバを取得します。

下記 URL にアクセスして、自分の環境にあった zip 形式の Driver をダウンロードしてください。
https://github.com/mozilla/geckodriver/releases

私の場合は Windows の 64 bit バージョンを取得しました。

zip を展開すると geckodriver.exe というファイルがあります。

手っ取り早いのはこれをプロジェクト直下に置いてしまいます。
f:id:yyama1556:20191103151301p:plain

もしくは任意の場所に格納し、プログラム内で「System.setProperty("webdriver.gecko.driver", "C:/xxx/xxx/geckodriver.exe");」と場所を指定しても OK。

プログラムから WebDriver が見つからない場合「java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.gecko.driver・・・」が発生します。

プログラムを書く

コメントで簡単な解説をしています。

package org.yyama.selenium_sample;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

/**
 * Hello world!
 *
 */
public class App {
	public static void main(String[] args) {

		// WebDriver が存在するパスを指定する。プロジェクト直下においてあれば不要。
//		System.setProperty("webdriver.gecko.driver", "C:/org/yyama/geckodriver.exe");

		// ① WebDriver を取得する
		WebDriver driver = new FirefoxDriver();

		// ② Google の検索ページを開く
		driver.get("http://www.google.com");

		// ③ 検索文字を入力するテキストボックスを取得
		WebElement element = driver.findElement(By.name("q"));

		// ④ 検索文字を入力する
		element.sendKeys("5兆円おくれ");

		// ⑤ サブミット
		element.submit();

		// ⑥ ページタイトルが変わるまで待つ。10 秒待っても変わらない場合、
		// org.openqa.selenium.TimeoutException」が発生する。
		(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
			public Boolean apply(WebDriver d) {
				return d.getTitle().toLowerCase().startsWith("5兆円おくれ");
			}
		});

		// ⑦ ブラウザを閉じる。(ここでは勝手に閉じないようにコメントにしてある)
//		driver.quit();
	}
}

実行してみる

自動で Firefox が起動し、文字の入力および遷移が行われていることが確認できるます。

検索結果後のページです。
f:id:yyama1556:20191103155456p:plain

まとめ

簡単にまとめると WebDriver を入手し、Selenium の依存関係を追加するだけです。

自動化できるところはどんどん自動化していきましょう。

次の記事では自動でスクリーンショットを取得する方法をまとめました。
www.shookuro.com


それでは!

実践 Selenium WebDriver

実践 Selenium WebDriver

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

  • 作者: 伊藤望,戸田広,沖田邦夫,宮田淳平,長谷川淳,清水直樹,Vishal Banthia
  • 出版社/メーカー: 技術評論社
  • 発売日: 2016/02/02
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (4件) を見る