目次
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