WEB+DB PRESS plusシリーズSelenium実践入門
――自動化による継続的なブラウザテスト
――自動化による継続的なブラウザテスト
2016年2月2日紙版発売
2016年2月2日電子版発売
伊藤望,戸田広,沖田邦夫,宮田淳平,長谷川淳,清水直樹,Vishal Banthia 著
A5判/416ページ
定価3,630円(本体3,300円+税10%)
ISBN 978-4-7741-7894-3
書籍の概要
この本の概要
ブラウザの多様化に伴い,Webアプリケーションをクロスブラウザ対応にするための負荷がますます増加し,その解決の一つとしてテスト自動化のノウハウが開発現場で必要とされています。また継続的インテグレーションを実践する際にも,テスト自動化がその一部として取り入れられています。本書では,Webアプリケーションのテスト,特にブラウザテストに関わる現状と問題点を整理し,これを解決する最適なプロダクトであるSeleniumを中心にWebブラウザテスト自動化への取り組み方,具体的な手順などについて解説します。
こんな方におすすめ
- Webアプリケーション開発でテストを運用しているエンジニア
- Web アプリケーションテストの自動化を検討しているエンジニア
本書に関するお知らせ
本書に関連する記事を公開しております。
この書籍に関連する記事があります!
- はじめに
- 本書は,Seleniumを使ってブラウザテストを自動化するためのノウハウが詰め込まれた1冊です。
- 進化するSeleniumとテスト自動化 ―「第3回日本Seleniumユーザーコミュニティ勉強会」レポート
- 2016年2月6日,東京ミッドタウンのヤフー株式会社にて,日本Seleniumユーザーコミュニティ主催による「第3回日本Seleniumユーザーコミュニティ勉強会」が開催されました。
- テスト自動化のススメ
- アプリケーション開発におけるテストとは,アプリケーションが問題なく動作しているかどうかを確認する作業のことです。
目次
Part 1 Seleniumの基礎知識
第1章 テスト自動化とそのメリット
- 1.1 手作業によるソフトウェアテストの問題
- どんどん大きくなる回帰テストのコスト
- 同じテストを環境ごとに何度も実施する必要がある
- 開発・テスト作業効率の低下
- 1.2 テストの自動化とは
- 1.3 さまざまな種類の自動テストツール
- ユニットテストツール
- 画面テストツール
- 静的解析ツール
- 負荷テストツール
- セキュリティテストツール
- 1.4 テストを自動化するメリット
- 回帰テストの実行コストを抑えられる
- 似たようなテストを何度も実施できる
- 開発フェーズの問題をすばやく検出できる
- 市場の変化にすばやく追随できる
- システムの改善を諦めなくてよい
- 手動テストよりも正確でミスがない
- 一定の品質を確実に保証できる
- 快適に開発を行える
- 1.5 自動テストツールの使い分け
第2章 Seleniumの概要
- 2.1 Seleniumとは
- Seleniumのしくみ
- 多様なブラウザ・プラットフォームで利用できる
- Seleniumを支えるコミュニティ
- 2.2 Seleniumを構成するツール群
- Selenium WebDriver
- Selenium RC
- Selenium IDE
- Selenium Builder
- Selenium 3
- 2.3 ブラウザテストの標準仕様へ
Part 2 WebDriver
第3章 WebDriver入門
- 3.1 セットアップとスクリプトのサンプル
- Java
- セットアップ
- Jarを直接利用する方法
- Mavenを利用する方法
- Gradleを利用する方法
- スクリプトの書き方
- テストフレームワーク
- セットアップ
- Ruby
- セットアップ
- スクリプトの書き方
- テストフレームワーク
- JavaScript
- セットアップ
- スクリプトの書き方
- テストフレームワーク
- C#
- セットアップ
- スクリプトの書き方
- テストフレームワーク
- Python
- セットアップ
- スクリプトの書き方
- テストフレームワーク
- Java
- 3.2 さまざまなドライバのセットアップ
- FirefoxDriver
- ChromeDriver
- InternetExplorerDriver
- IEDriverサーバのセットアップ
- Internet Explorerの設定
- 保護モードの設定
- 拡張保護モードの設定
- レジストリの設定
- SafariDriver
- PhantomJSDriver
- PhantomJSとは
- PhantomJSのセットアップ
- PhantomJSDriverのセットアップ
第4章 WebDriverコマンド徹底解説
- 4.1 ブラウザの生成と破棄
- ブラウザの生成
- ブラウザの破棄
- テストフレームワークとの組み合わせ
- 初期化処理と終了処理
- 値のチェック
- Capabilities
- 4.2 ドライバ固有の設定
- FirefoxDriver
- Firefoxプロファイルの指定
- プロファイルとは
- Preferenceの変更
- アドオンの追加
- プロファイルフォルダの指定
- Firefox実行ファイルの指定
- Firefoxプロファイルの指定
- ChromeDriver
- オプションの指定
- Chromeのコマンドライン引数の指定
- Chrome拡張の追加
- Chrome実行ファイルの指定
- Preferenceの変更
- オプションの指定
- InternetExplorerDriver
- Capabilities
- SafariDriver
- FirefoxDriver
- 4.3 要素の取得
- findElements
- ロケータ
- By.id
- By.name
- By.tagName
- By.className
- ロケータの調べ方
- By.linkText
- By.partialLinkText
- By.cssSelector
- By.xpath
- 子孫要素の取得
- 4.4 要素の操作
- URL遷移
- クリック
- キー入力
- チェックボックスの選択
- ラジオボタンの選択
- プルダウンの選択
- 複数選択可能なselect要素
- Selectクラスの各種メソッド
- submit
- 4.5 要素情報の取得
- 表示・非表示
- 有効・無効
- 存在するかどうか
- 選択状態
- 属性
- テキスト
- タグ名
- CSSプロパティ
- サイズ
- 位置
- 4.6 ブラウザ情報の取得
- タイトル
- URL
- HTMLソース
- ウィンドウ位置
- ウィンドウサイズ
- Cookie
- Cookieの取得
- Cookieの追加
- Cookieの削除
- 4.7 ブラウザの操作
- 画面キャプチャ
- 画面キャプチャの取得範囲
- JavaScriptの実行
- 返り値の取得
- 引数の指定
- 非同期メソッドの呼び出し
- ナビゲーション
- 戻る
- 進む
- リロード
- 画面キャプチャ
- 4.8 待ち処理
- Implicit Wait
- Explicit Wait
- WebDriverWait
- 最大待機時間の指定
- さまざまな待機方法の指定
- 任意の条件による指定
- 待機失敗時のエラーメッセージの指定
- 待機条件判定を行う間隔の指定
- WebDriverWait
- ページ読み込みの待ち時間
- 4.9 ポップアップ・ウィンドウ・フレーム
- ポップアップ
- Alertダイアログ
- Confirmダイアログ
- Promptダイアログ
- SafariDriver,PhantomJSDriverの場合
- ウィンドウ
- SafariDriverの設定
- 名前のないウィンドウ
- ウィンドウハンドルによる特定
- ウィンドウタイトルによる特定
- ウィンドウを閉じる
- タブ
- フレーム
- iframe要素
- frame要素
- 入れ子のフレーム
- ポップアップ
- 4.10 その他のコマンド
- アクション
- ダブルクリック
- 右クリック
- マウスの移動
- ドラッグアンドドロップ
- キーを押しながらクリック
- Actionsのメソッド一覧
- イベントリスナ
- 指定可能なイベント
- イベントリスナの解除
- ログ取得
- ログレベルの指定
- アクション
第5章 WebDriverコマンドの実践的活用
- 5.1 さまざまな画面操作
- ファイルアップロードダイアログ
- ファイルダウンロード
- FirefoxDriver
- ChromeDriver
- InternetExplorerDriver
- SafariDriver
- Basic認証ダイアログ
- InternetExplorerDriver
- SafariDriver
- 5.2 さまざまなエラーチェック
- JavaScriptエラーのチェック
- 画像が表示されているかのチェック
- HTTPステータスコードの取得
- セットアップ
- 利用方法
- 5.3 HTML5の新機能
- input要素
- テキスト・数値のinput要素
- 日付・時刻のinput要素
- typeがrangeのinput要素
- typeがcolorのinput要素
- Web Storage
- Session Storage
- Local Storage
- ChromeDriverの場合
- Canvas
- input要素
第6章 スクリプトの効率的なメンテナンス
- 6.1 ページオブジェクトパターン
- ページオブジェクトパターンを使ったスクリプト
- 可読性の向上
- 共通化の基準がわかりやすい
- 目的のメソッドを見つけやすい
- ページオブジェクト作成の指針
- 画面操作を抽象化したメソッドを提供する
- ページ遷移を伴うメソッドは,新しいページオブジェクトを返す
- 遷移先ページが異なるメソッドは別のメソッドにする
- Assertionロジックをページオブジェクトに含めない
- ページ遷移の際に,きちんと遷移できたことをチェックする
- @FindByとPageFactory
- メカニズム
- @FindByの引数の指定方法
- @CacheLookup
- その他の機能
- ページオブジェクトパターンを使ったスクリプト
- 6.2 データ駆動テスト
- 2つのテストランナー
- Parameterizedテストランナーを使った方法
- Theoriesテストランナーを使った方法
Part 3 便利なライブラリ
第7章 Geb
- 7.1 Gebとは
- 7.2 Groovy
- Javaと比べて簡潔な記述
- 動的型付け言語である
- defキーワードによる宣言
- 名前付き引数
- プロパティ
- クロージャ
- delegate
- 7.3 セットアップ
- Groovyプラグインのインストール
- Gradleプラグインのインストール
- プロジェクトの作成
- 7.4 Gebのテストスクリプト
- 7.5 基本のブラウザ操作
- 指定URLへの遷移
- 内部WebDriverのライフサイクル
- Cookieのクリア
- WebDriverインスタンスの取得
- Browser.driveを使ったテスト
- 7.6 GebConfig.groovy
- driver
- その他の設定項目
- 7.7 画面要素の指定方法
- $メソッドの引数
- $メソッドの返り値
- 部分一致
- Navigatorオブジェクトの各種メソッド
- WebElementインスタンスの取得
- 7.8 画面要素の操作と情報取得
- クリック
- キー入力
- 画面情報の取得
- フォームコントロール
- valueの取得
- テキスト入力欄への値セット
- プルダウンへの値セット
- チェックボックスへの値セット
- ラジオボタンへの値セット
- ファイルアップロードへの値セット
- valueメソッドのショートカット
- 7.9 さまざまなブラウザ操作
- 画面キャプチャ・HTMLレポート
- JavaScriptロジックの呼び出し
- ポップアップ
- 待ち処理
- Implicit Wait
- 7.10 ページオブジェクトパターン
- url
- at
- content
- 現在のページの管理
- contentのオプション
- toオプション
- waitオプション
- toWaitオプション
- WebDriverのページオブジェクトとの違い
- 7.11 Spockと組み合わせる
- セットアップ
- Spockと組み合わせたテストスクリプト
- ブロック
- データ駆動テスト
第8章 FluentLenium
- 8.1 FluentLeniumとは
- 8.2 セットアップ
- 8.3 FluentLeniumのテストスクリプト
- 8.4 画面要素の指定方法
- 8.5 主なコマンド
- URL遷移
- クリック
- テキスト入力
- プルダウンの選択
- 画面キャプチャ
- 待ち処理
- WebDriverコマンドの直接呼び出し
- 8.6 FluentTestのメソッドのオーバーライド
- 8.7 ページオブジェクトパターン
第9章 Capybara
- 9.1 Capybaraとは
- 9.2 ドライバ
- 9.3 セットアップ
- 9.4 Capybaraのテストスクリプト
- 9.5 主なコマンド
- クリック
- フォームコントロール
- テキスト入力
- プルダウンの選択
- チェックボックスの選択・非選択
- ラジオボタンの選択
- 要素の取得
- 値チェック
- 待ち処理
- その他のコマンド
- URL遷移
- 画面キャプチャ
- WebDriverコマンドの直接呼び出し
- 9.6 Capybara単独で実行する場合
Part 4 Seleniumのさまざまな活用方法
第10章 Selenium IDE
- 10.1 Selenium IDEとは
- 10.2 インストール手順
- 10.3 基本的な使い方
- 起動・記録
- 記録の停止
- 再生
- テストケースの保存
- 記録の再開
- 手作業でのコマンドの追加
- テストケースの追加,テストスイートの作成
- ロケータの自動判定機能の調整(Locator Builders)
- Test Schedulerを使った定時実行
- プログラミング言語へのエクスポート
- エクスポートの使い方
- エクスポートできないコマンドの例
- 10.4 ブラウザを操作するコマンド
- フォームの操作
- ウィンドウやフレームの操作
- 画面キャプチャの取得
- フォームの操作
- 10.5 値を検証・待機・保持するコマンド
- assert
- HTML要素
- ポップアップ
- ページ全体の値の検証
- その他
- verify
- waitFor
- store
- 期待値でのパターンマッチングの利用
- assert
- 10.6 Selenium IDEのプラグイン
- Implicit Wait
- SelBlocks
- Highlight Elements
- File Logging
- ScreenShot on Fail
- Test Results
- Power Debugger
- 10.7 WebDriver-Backed
- 環境の準備
- Selenium IDEの設定
- WebDriver-Backedで再生
- 10.8 UIマッピング
第11章 スマートフォンのテストとAppium
- 11.1 スマートフォンのテストとは
- スマートフォンのテストの種類
- スマートフォン用Webサイトのテスト
- スマートフォン用アプリのテスト
- スマートフォンのテストに利用できるSelenium関連ツール
- エミュレータを利用するか実機を利用するか
- 11.2 PCブラウザによるスマートフォン用Webサイトのテスト
- PCブラウザでテストする場合の注意事項
- Safariを利用したテスト
- Safariのユーザエージェントの設定
- タッチイベント
- PC版Chromeを利用したテスト
- Chromeのユーザエージェントの設定
- タッチイベント
- PhantomJSを利用したテスト
- PhantomJSのユーザエージェントの設定
- タッチイベント
- 11.3 Appium
- SeleniumとAppium
- Mobile JSON Wire Protocol
- Appium独自コマンド
- AppiumDriverの導入方法
- AppiumのCapabilities
- Appiumサーバの導入方法
- Android開発環境の設定
- Androidのエミュレータの設定
- Androidの実機の設定
- iOS開発環境の設定
- iOSのシミュレータの設定
- SeleniumとAppium
- 11.4 AppiumでのAndroid版Chromeの操作
- ChromeDriverサーバの設定
- Android版Chromeの操作
- Appiumサーバの起動
- AppiumDriverの実行
- 11.5 AppiumでのiOSのMobile Safariの操作
- iOSシミュレータの設定
- シミュレータ上のMobile Safariの操作
- iOS実機のMobile Safariの操作
- Safari Launcherのビルド
- ios-webkit-debug-proxyのインストール
- Mobile Safariの起動
第12章 CI環境での利用
- 12.1 前提
- 12.2 コマンドラインツールでのSeleniumの実行
- 標準的なコンソール実行
- ビルドツールの利用
- 12.3 CIサーバ上でのSelenium実行環境の整備
- Linux
- ディストリビューションの選択
- ヘッドレス環境向けの設定
- PhantomJS
- Xvfbとブラウザの併用
- Windows
- ローカルシステムアカウントと,対話的デスクトップ
- Linux
- 12.4 Jenkins
- Jenkinsの導入時のTIPS
- LTS Releaseの選択
- Webサービスの待ち受けポートの確認と変更
- Linux(Debian・Ubuntuなど)
- Linux(RHEL・CentOSなど)
- Windows
- 追加プラグイン
- Git Plugin
- Build-timeout Plugin
- 定時実行ジョブの作成
- 新規ジョブの登録
- ソースコード管理
- ビルド・トリガの実行設定
- タイムアウトの設定
- ビルドの設定
- ビルド後の処理
- 設定の保存
- ジョブの手動実行
- 実行結果の確認
- Jenkinsスレーブでのジョブの実行
- スレーブの追加
- スレーブでのJenkinsエージェントの実行
- Jenkinsの導入時のTIPS
- 12.5 Selenium Gridを併用した,複数ノードでのテストの実行
- 最小構成のSelenium Grid環境の作成
- ハブの起動
- ノードの起動,ハブへの接続
- ハブの状態の確認
- RemoteWebDriverの利用
- RemoteWebDriverの実行
- 複数のマシンにより構成されるSelenium Grid環境の作成
- テストスクリプト・ハブ・ノードのマシンの分離
- 複数のノードと,ノードごとの使用条件の設定
- 実行結果の確認
- Jenkinsとの連携
- Selenium Pluginのビルドとインストール
- ソースコードの入手
- Mavenでビルド
- Jenkinsにインストール
- ハブの設定
- ノードの設定
- 設定の名前
- Jenkinsスレーブの割り当て
- WebDriverノードの選択,ノード上で実行するブラウザの指定
- JSON形式でのノードの設定
- 設定の保存
- ノードの起動
- ノードの状態の確認
- Selenium Pluginのビルドとインストール
- 最小構成のSelenium Grid環境の作成
Part 5 実践的な運用
第13章 運用
- 13.1 運用での典型的な問題
- 13.2 テストスクリプトの工夫
- テストスクリプトのバージョン管理
- 依存関係のないテスト
- 共通する記述のまとめ
- 既成のライブラリやフレームワークの利用
- SeleniumのAPIに対するフック処理の追加
- 期待値の定数化
- テストスクリプトのリファクタリング
- 13.3 テストの実行の工夫
- テストの実行前の準備
- Seleniumを利用するテストのレベル
- テストの並列実行
- テスト実行時のリソース管理
- テストを実行するためのリソース
- テスト実行後のリソース解放
- ブラウザ・ドライバのプロセスの残存
- ブラウザのプロファイルデータの残存
- 画面キャプチャなど,テスト結果データの残存
- テストの結果の確認
- ログ
- 実行時間
- 画面キャプチャ
- 正否の自動判定の難しさ
- 目視チェックによる判定
- 画面要素の位置情報で代替した自動判定
- テストの実行前の準備
- 13.4 テスト環境の工夫
- 自動テスト結果の通知
- 自動テスト環境の維持
- 確実に動作する自動テスト環境を作るための,構成ソフトウェアのバージョン管理
- 自動テスト環境でのSeleniumのバージョン更新
第14章 サイボウズの事例
- 14.1 開発プロセス
- 要件検討段階
- 仕様検討段階
- 実装段階
- 試験段階
- リリースと改善活動
- 14.2 運用上の課題
- Selenium Gridによる並列化
- Dockerによるテスト環境の用意
- テスト環境のクラウドへの移行
- トラブル対応の属人性
- 14.3 まとめ
第15章 DeNAの事例
- 15.1 自動テストの対象となるサービスの概要
- NBPFの全体像
- サーバサイドコンポーネント
- Mobage JS SDK
- Mobage Shell App SDK
- Seleniumによる品質保証のアプローチ
- NBPFの全体像
- 15.2 ブラウザ自動テスト
- テストWebアプリケーション
- 何を自動テストで担保し,何を手動テストで担保するか
- テストコンポーネント
- テストスクリプト
- テストサポートライブラリ
- マルチデバイス対応
- プラットフォームのクライアントとしての利用
- 複数のテストスクリプトからの利用
- JenkinsによるCI
- テストの安定性の問題に対するアプローチ
- テストの実行時間の問題に対するアプローチ
- テストの並列実行
- テスト実行環境の独立
- テストデータの独立
- 各テスト実行ノード専用のテストデータの事前準備
- 自動テストサポートWebアプリケーション
- テストWebアプリケーション
- 15.3 スマートフォンアプリ自動テスト
- Mobage Shell App SDK
- テストアプリ
- テストアプリの特徴
- Informationビュー
- 入力補助機能
- テストアプリビルドスクリプト
- Jenkinsのテストアプリビルド
- テストアプリの特徴
- テストコンポーネント
- スマートフォンアプリ自動テストのしくみ
- テストサポートライブラリ
- テストスクリプト
- テストの実行
- テスト結果
- スマートフォンアプリ自動テストのしくみ
- JenkinsによるCI
- 実機テスト環境
- Jenkinsジョブ
- テストアプリビルドジョブ
- 自動テスト実行ジョブ
- 実機テストの課題について
Appendix 付録
付録A CSSセレクタ・XPath早見表
- A.1 CSSセレクタ
- A.2 XPath
付録B WebDriverコマンド早見表
- B.1 Java
- B.2 Ruby
- B.3 JavaScript
- B.4 C#
- B.5 Python
この本に関連する書籍
-
[改訂第3版]Jenkins実践入門 ―ビルド・テスト・デプロイを自動化する技術
継続的インテグレーションに欠かせないツールであるJenkins。その導入から運用管理までを解説した定番書として大好評の『Jenkins実践入門』が,ついに2系に対応しました...
-
改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術
本書は,導入から運用管理までを解説した定番書としてご好評いただいた『Jenkins実践入門』の改訂版です。今や世界で最も普及しているツールとなったJenkins。その進化...
-
チーム開発実践入門──共同作業を円滑に行うツール・メソッド
本書はサービスやアプリケーションを開発する企業において,複数の人たちでチームを組んで開発を進めていく際に必要な考え方や使用するツール,またそれらをうまく使い...
-
JUnit実践入門 ── 体系的に学ぶユニットテストの技法
本書では,JavaテスティングフレームワークのデファクトスタンダードであるJUnitの基本的な使い方から,拡張機能,テストパターンまでを網羅的に解説します。また,デー...