Selenium実践入門ー自動化による継続的なブラウザテスト


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


技術評論社


著者:伊藤望、戸田広、沖田邦夫、宮田淳平、長谷川淳、清水直樹


はじめに
本書について
目次

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
 COLUMN Selenium 3
2.3 ブラウザテストの標準仕様へ

Part 2 WebDriver
第3章 WebDriver入門
3.1 セットアップとスクリプトのサンプル
 Java
  セットアップ
   Jarを直接利用する方法
   Mavenを利用する方法
   Gradleを利用する方法
  スクリプトの書き方
  テストフレームワーク
 Ruby
  セットアップ
  スクリプトの書き方
  テストフレームワーク
 JavaScript
  セットアップ
  スクリプトの書き方
  テストフレームワーク
 C#
  セットアップ
  スクリプトの書き方
  テストフレームワーク
 Python
  セットアップ
  スクリプトの書き方
  テストフレームワーク
3.2 さまざまなドライバのセットアップ
 FirefoxDriver
 ChromeDriver
 InternetExplorerDriver
  IEDriverサーバのセットアップ
  Internet Explorerの設定
   保護モードの設定
   拡張保護モードの設定
   レジストリの設定
 SafariDriver
 PhantomJSDriver
  PhantomJSとは
  PhantomJSのセットアップ
  PhantomJSDriverのセットアップ

第4章 WebDriverコマンド徹底解説
4.1 ブラウザの生成と破棄
 ブラウザの生成
 ブラウザの破棄
 テストフレームワークとの組み合わせ
  初期化処理と終了処理
  値のチェック
 Capabilities
4.2 ドライバ固有の設定
 FirefoxDriver
  Firefoxプロファイルの指定
   プロファイルとは
   Preferenceの変更
   アドオンの追加
   プロファイルフォルダの指定
  Firefox実行ファイルの指定
 ChromeDriver
  オプションの指定
   Chromeのコマンドライン引数の指定
   Chrome拡張の追加
   Chrome実行ファイルの指定
   Preferenceの変更
  InternetExplorerDriver
   Capabilities
  SafariDriver
4.3 要素の取得
 findElements
 ロケータ
  By.id
  By.name
  By.tagName
  By.className
  COLUMN ロケータの調べ方
  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
   最大待機時間の指定
   さまざまな待機方法の指定
   任意の条件による指定
   待機失敗時のエラーメッセージの指定
   待機条件判定を行う間隔の指定
 ページ読み込みの待ち時間
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

第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
 期待値でのパターンマッチングの利用
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のシミュレータの設定
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
  ローカルシステムアカウントと,対話的デスクトップ
12.4 Jenkins
 Jenkinsの導入時のTIPS
  LTS Releaseの選択
  Webサービスの待ち受けポートの確認と変更
   Linux(Debian・Ubuntuなど)
   Linux(RHEL・CentOSなど)
   Windows
  追加プラグイン
   Git Plugin
   Build-timeout Plugin
 定時実行ジョブの作成
  新規ジョブの登録
  ソースコード管理
  ビルド・トリガの実行設定
  タイムアウトの設定
  ビルドの設定
  ビルド後の処理
  設定の保存
 ジョブの手動実行
 実行結果の確認
 Jenkinsスレーブでのジョブの実行
  スレーブの追加
  スレーブでのJenkinsエージェントの実行
12.5 Selenium Gridを併用した,複数ノードでのテストの実行
 最小構成のSelenium Grid環境の作成
  ハブの起動
  ノードの起動,ハブへの接続
  ハブの状態の確認
 RemoteWebDriverの利用
 RemoteWebDriverの実行
 複数のマシンにより構成されるSelenium Grid環境の作成
  テストスクリプト・ハブ・ノードのマシンの分離
  複数のノードと,ノードごとの使用条件の設定
 実行結果の確認
 Jenkinsとの連携
  Selenium Pluginのビルドとインストール
   ソースコードの入手
   Mavenでビルド
   Jenkinsにインストール
  ハブの設定
  ノードの設定
   設定の名前
   Jenkinsスレーブの割り当て
   WebDriverノードの選択,ノード上で実行するブラウザの指定
   JSON形式でのノードの設定
   設定の保存
  ノードの起動
  ノードの状態の確認

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による品質保証のアプローチ
15.2 ブラウザ自動テスト
 テストWebアプリケーション
  何を自動テストで担保し,何を手動テストで担保するか
 テストコンポーネント
  テストスクリプト
  テストサポートライブラリ
   マルチデバイス対応
   プラットフォームのクライアントとしての利用
   複数のテストスクリプトからの利用
 JenkinsによるCI
  テストの安定性の問題に対するアプローチ
  テストの実行時間の問題に対するアプローチ
  テストの並列実行
   テスト実行環境の独立
   テストデータの独立
   各テスト実行ノード専用のテストデータの事前準備
 自動テストサポート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

索引
著者プロフィール

書籍目次

Posted by shi-n