【初心者向け】Seleniumをまわしてみよう③

  • 2017年4月3日
  • by 
【初心者向け】Seleniumをまわしてみよう③

こんにちは。2月は毎日筋トレを欠かさなかったM.Sです。
ちなみに、持続のコツは短時間で集中して行うことです。筋トレは10分間と決めています。
このSelenium講座も継続して連載できていますねw

早速ですが、今回は初心者向けSelenium講座の第3回目です。
<bitWave関連記事『【初心者向け】Seleniumをまわしてみよう①』>
<bitWave関連記事『【初心者向け】Seleniumをまわしてみよう②』>

第3回目はちょこっとレベルアップ。「待機処理とフォームの入力方法」についてご紹介します。

予定外で露呈した “Seleniumの弱点”

まず前回作成したSeleniumを一旦動かして、おさらいをしてみましょう。

<前回のあらすじ>

①Chrome起動
②ショーケース・ティービーのトップページを開く
③グローバルメニュー内の [お問い合わせ] をクリックする
④ブラウザを閉じる

それでは [実行ボタン] をクリック!!
……ん? Seleniumがエラーを出して止まってしまいました!
前回まではうまくいってたし、プログラムも変更していないのになぜでしょう……(汗)

その原因は検証を実施していたWebサイトのデザインが、以前のものから変わってしまったことに起因していたようです。
ソース変更によりDOM構造自体が変わり、[お問い合わせ] をクリックするプログラムで要素を取得できなくなった。結果、プログラムが完遂されることなく止まってしまったという次第です。
こんなところにSeleniumの弱点があったんですね~。

このようにWebサイトの更新などでDOM構造が変わってしまった場合、Seleniumのメンテナンスが必要になります。
Webサイト運用者とSeleniumを使用する検証者が同一人物であれば心当たりもあるでしょうし、運用者と検証者とで改修報告等が行き届いている関係性が築けているのであれば解決も早いでしょう。
しかし、あまりidが振られていないページ、かつ、知らぬ間にWebサイトが更新されてしまうような状況であれば、それはSelenium向きではない環境であると言えます。

今回は一部プログラムを微修正するだけで済みましたが、急ぎで検証を実施しているのであればパニックになってしまいかねないですね。
知らないところでの改修。これはテストエンジニア泣かせですね。

入力項目にテキストを入力する方法

さて、気を取り直して前回のおさらいに新たなアクションを追加したプログラムを作成してみましょう。

①Chrome起動
②ショーケース・ティービーのトップページを開く
③グローバルメニュー内の [お問い合わせ] をクリックする
④[お名前] 項目に任意の文字列を入力する
⑤ブラウザを閉じる

今回追加したのは④です。
それでは「④[お名前] 項目に文字列を入力する方法をご説明いたします。

<ソース(※macを使用しています)>

入力するには、入力項目のname値を取得する必要があります。

上記の例であれば、name値「name1」の入力項目に「ショーケース花子」という文字列を入力することができるんですね。

前回ご説明させていただいたBy.nameのロケーターを利用し、
「driver.findElement(By.name(“取得したいname値”))」で、お名前のname値「name1」を取得し、入力は「sendKeys(“入力したい文字列”)」となります。

他の入力項目もそれぞれのname値を指示すれば、同様の方法で入力ができます。

忘れてならない隠し味『待機処理』を施す

続いて『待機処理』について説明します。
あれ? 「今回はテキスト入力項目に文字列を入力されば終わりなんじゃないの」とお思いの方もいらっしゃるかもしれません。しかし『待機処理』は必要不可欠なのです。

なぜ『待機処理』が必要なのかというと、Seleniumはプログラムを次々に処理し、目にも止まらぬハイスピードでテストが終了させてしてしまうからなんです。

「ハイスピードで処理が進めて何が悪い」と思ってしまいがちですが、あまりに速すぎると要素取得の処理を実行する前に、取得したい要素が画面上に表示されていない、なんてこともあったりするのです。

そうなると当然、「要素が見つかりません」というエラーが出て、肝心のSeleniumが止まってしまうのです。
この場合、取得したい要素が表示されるのを “待ってから” 、要素を取得するプログラムを走らせる必要があります。この “待ってから” の対応こそ、『待機処理』なんですね。

つまり、適度に『待機処理』は必要なのです。

上記のプログラムでは、ページ内に存在するid「header」が画面上に表示されるまで、最大30秒間待機するという処理を入れてみました。速やかにheaderが表示されるのであれば、30秒経つ前に『待機処理』は終了し、次のプログラムに進みます。

更にもう1つ『待機処理』を追加してみました。

こちらの『待機処理』は、ただ4秒待つというものです。この処理を入れた理由は、項目に「ショーケース花子」と入力されたことを目視確認したいがために設定しました。

前記の「header」が表示されるまで待つ『待機処理』とは異なり、今回の『待機処理』は実行せずともプログラムは完遂しますが、あまりにもハイスピードで処理が進んでしまうため、入力項目に「ショーケース花子」と入力されたことが確認できないまま、あっという間に次のプログラム「⑤ブラウザを閉じる」に進んでしまいます。

Seleniumを信用していないワケでないのですが、やはり時には目視確認も必要です。
あえて入れてみた『待機処理』ということですね。

『待機処理』は水泳で言うところの “息継ぎ” のようなものです。
記述しなければエラーを生じさせてしまう「酸素を吸入し、次の水掻きを行うための息継ぎ」と、目視確認のために入れた「周りの順位を把握するための息継ぎ」。
つまり “息継ぎ” にも使い分けが必要なんですね。

作成したプログラムを実行してみよう

それではEclipseの「実行」ボタンを押して、実際にSeleniumをまわしてみましょう。
正しければ以下のように実行されます。

①Chrome起動
 ↓
②ショーケース・ティービーのトップページを開く
 ↓
③グローバルメニュー内の [お問い合わせ] をクリックする
 ↓
④[お名前] 項目に任意の文字列を入力する
 ↓
⑤ブラウザを閉じる

ちゃんと入力項目にテキストが入ったことを目視確認できましたか?

次回は「他にも使えそうな待機処理」と「画面キャプチャの撮り方」についてご紹介します。
お楽しみに!

コメント