SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「日本Seleniumユーザーコミュニティ」のエキスパートが教えるSelenium最新事情

Javaで簡単にUIテストを書けるSelenideを使おう~Selenideの概要とテストの保守性を上げるPage Objectパターンの紹介

  • X ポスト
  • このエントリーをはてなブックマークに追加

SelenideのTips

Firefox以外のブラウザを使う

 さきほどのコードではブラウザはFirefoxを使うことを前提にしていましたが、ここではほかのブラウザを使った方法を説明します。

 どのブラウザでも基本的に行うことは同じで、以下の通りです。

 先のサンプルで書いた以下の部分で指定します。

  • ブラウザ毎に対応したDriverのバイナリをダウンロードし適当な場所に配置する。
  • Selenideの初期化時にDriverのバイナリの場所を通知し、使用するブラウザを指定する。
        Configuration.browser = WebDriverRunner.GECKO;@@
        System.setProperty("webdriver.gecko.driver","C:/PATH/TO/geckodriver.exe")

 各ブラウザ毎に設定するbrowserとプロパティキーは以下の通りです。

ブラウザ名 Configuration.browser プロパティキー
Chrome WebDriverRunner.CHROME webdriver.chrome.driver
Internet Explorer WebDriverRunner.INTERNET_EXPLORER webdriver.ie.driver
Edge WebDriverRunner.EDGE webdriver.edge.driver
Safari WebDriverRunner.SAFARI webdriver.safari.driver

要素取得のテスト

 Selenideのコードで記述した要素取得方法が正しいか検証するのに、毎回テストコードを起動させるのは時間が掛かり非常に手間です。これを簡略化する方法としてIDEのデバッグモードを利用する方法があります。

 oepn(String url)でテスト対象サイトのURLを書いただけのシンプルなテストコードを書き、これをIDEのデバッグモードで起動させます。このときブレークポイントとして、open(String url)の直後の行を指定しておきます。

IntelliJでデバッグモード実行
IntelliJでデバッグモード実行

 こうすることでSelenideによるブラウザが起動し、対象サイトが開いた状態で止まります。ここで、IntelliJ IDEAでAlt+F8を押すと[Evaluate Expression]という、行評価ウィンドウが開きます。

Evaluate Expression
Evaluate Expression

 このウィンドウで[Code Fragment Mode]ボタンを押下すると、入力部分が複数行になる[Evaluate Code Fragment]になります。

Evaluate Code Fragment
Evaluate Code Fragment

 ここにJavaのコードを入力し[Evaluate]ボタンを押下すると、入力した式が評価されます。つまり、ここにSelenideの要素取得メソッドを記載し評価することで、実際に取得結果が確認できるのです。失敗しても評価がエラーになるだけでデバッグモードは中断されませんので何度でも試すことができます。

 最初のopen(String url)で開いたURLとは別の画面で試したい場合は、Selenideで開いたブラウザを直接操作して対象画面へ遷移させてから試すことができます。

 Java 9からはJShellというREPL環境が提供されるので、もしかしたらこのような手法を使わずに済むかもしれませんね。

DOM構造を上からたどって取得する

 実践で試したサイトは、テストで必要となる要素すべてにIDが振られていました。そのため要素取得は$("#id")で十分でした。しかし、実際のテストでは必要な要素にIDが振られていないこともあり、またClass指定すら無い場合があります。その場合どのようにすればよいでしょうか。

 困ったときはJavaDocを見ます。

 要素を取得するメソッドはcom.codeborne.selenide.Selenide.$ですが、この戻り値はcom.codeborne.selenide.SelenideElementです。SelenideElementにはやはり$メソッドがあり、さらに検索を続けることができます。このとき検索はDOMの子要素方向にのみ向かいます。

 例えば、

<div id="zipCode">
  <tr>
    <th>郵便番号</th>
    <td>100-0000</td>
  </tr>
</div>

のようなHTMLがあり、ここで郵便番号の番号だけがほしい場合、以下のようにすることで目的の値が取得できます。

    $("#zipCode").$("td");

 ここでは$を複数回使用しての絞り込みを行いましたが、検索結果のフィルタや親要素に戻るメソッドなど多数あります。これらを駆使することで任意の要素を取得することが必ずできるはずです。是非JavaDocを熟読してみてください。きっとほしいメソッドがあるはずです。

 もし見つからなければ、GitHubで要望を出してみたりTwitterでコミッターに質問してみるとよいかもしれません。すでにあればそれを教えてくれるでしょうし、無ければもしかしたら今後作られるかもしれません。

 もちろん、コードはGitHubで公開されているのでforkして自分で機能を作り込み、pull requestを投げてみるのもよいかもしれません。Selenideはオープンソースなのですから!

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
「日本Seleniumユーザーコミュニティ」のエキスパートが教えるSelenium最新事情連載記事一覧

もっと読む

この記事の著者

島根 義和(シマネ ヨシカズ)

 肌年齢17歳、外見年齢37歳のごくごく普通のプログラマ。 25歳の頃、デスマーチを経験したことでソフトウェア工学に目覚め、開発プロセス、品質管理等を独学で勉強し続ける。がなかなか実践できない。 好きな技術書はスティーブ・マコネルの「ラピッドデベロップメント」。 2012年よりJaSST Tokyo実行委員。 スラド: id:shimashima Twitter: @shimashima35 GitHub: https://github.com/shimashima35/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10335 2017/08/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング