第2回Selenium勉強会に参加してきました②「脱・独自改造!GebでWebDriverをもっとシンプルに」

発表スライド

20141018 第2回selenium勉強会

発表者

  • 玉川紘子さん
  • 株式会社SHIFT
    • CI導入のお手伝い
    • セミナー実施
  • コミュニティ
    • STAR(テスト自動化研究会)
    • 日本Jenkinsユーザ会
      • 2015年1月にカンファレンスを実施予定

WebDriverの欠点『コードが長い』

独自実装のwrapperを作成

  • 前回の勉強会で同じような事例が非常に多かった

ライブラリで解決

  • Fluent Lenium

http://www.fluentlenium.org/

    • Javaのライブラリ
  • Geb

Gebについて

  • 読み方は「じぇぶ」

http://www.gebish.org/

  • Groovyのライブラリ

立ち位置

Gebのメリット

コードが短い

  • Selenium WebDriverのように、いちいち「driver」と書かなくてOK
  • jQueryライクな記法
  • Form内要素はさらに簡単に記載できる
    • name属性を使う前提で記載

今までだと独自実装で対応していた部分が既にできている

  • テキスト入力のシンプル化を実現
    • 1行でOK
    • プルダウンもシンプルにできている
  • 設定系はGebConfig.groovyに集約
    • クラスパス直下に置くと自動的に読み込んでくれる
    • 設定のキーワードがある程度決まっている
  • PageObjectにもサポート
    • 「extend Page」と継承する。
      • url、at、contentなどが対象
    • "to hoge"と記載すれば、hogeに移動できる

groovyやspockの機能が使える

  • ブロックを使って、テストのフェーズの表現が可能
    • setup(準備)
    • when(条件)
    • then(結果)
    • cleanup(後片付け)
  • データ駆動テストがシンプルに書ける
    • whereブロックに表形式で記載すればOK
  • モジュールが使える
    • 共通部分を別モジュールで記載
    • サイトの共通メニュー、ECのカートなどで便利

Javaの資産が使える

  • GroovyはJavaの上位互換だから
  • Javaのクラスのインポートもできる

つまづきそうなこと

Syntaxの省略に注意

  • IDEの補完に頼るなら、省略なしで記載すべき
  • If文が入っているテストケースだと、assertionが正しく反応してくれない可能性あり
    • そもそもテストケース内でif文が入っていること自体が微妙ではあるが

PageObjectの使い方に注意

  • テストケースでは、PageObject外でデータをそのまま書かない。
  • PageObjectの呼び出しで変数指定をすべき

+αの工夫

失敗時のスクリーンショット取得

  • spockのリスナ機能を利用

TestSuiteの動的作成

  1. 置換対象のワード(%TESTCLASS%とか)を含めて、TestSuiteのテンプレートを作成する。
  2. Jenkinsのパラメータを用いて%TESTCLASS%を置換する

さいごに

  • 株式会社SHIFTではテストエンジニアを募集中

Q&A

Groovyの参考となる情報は?

  • Gebの公式サイトを見て学んだ

Syntaxを省略すると、コンパイルエラーになるのか、それとも実行時エラーになるのか

  • コンパイルエラーにはなる。
  • ただ、書いている段階ではエラーの表示(Eclipseでいう赤い波下線)がされない

CSSセレクタなどjqueryでできることは同じようにできる?

  • できない。あくまでも記法が似ているだけ。
  • XPathのサポートもない
    • findは使える

JavaのWebDriverとの混在はできるのか?

  • 経験が無いので分からない
  • Assertの仕組みなどは完全に違う
  • 既存コードとの組み合わせは難しいかもしれない
  • Gebを用いて、できない部分をJavaのWebDriverで補完ならできるかもしれない