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