2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

robotframework + seleniumlibraryのお役立ち実例集

Last updated at Posted at 2018-11-13

robotframeworkとは

テスト自動化ができるフレームワーク。
簡単にいえば、「○○をクリックする」「画面が表示されるまで2秒まってからタブ遷移する」みたいな形で命令を書くと、ブラウザが立ち上がって命令通りに操作を実行し、異常がないかをテストしてくれるもの。
RailsのRspec+capybaraと感覚は似ている。

使用用途

自分はリグレッションテストの一環で実施している。コマンドを叩くだけでテストアカウント作成〜表示・削除までを実行してくれるので、1度書いてさえしまえばかなりテストが楽になる。
(複雑なテストパターンであればあるほど効果が実感できると思う。)

なぜこれをまとめるか。

比較的新しめのフレームワークということもあり、日本語での実例集の数が少ないので、詰まった点やこういう時どう切り抜けるか?というかなり実践的なポイントをまとめてみた。
(※robotframeworkのそもそもの基本的な機能は後日まとめてみたい。)

実施環境

windows10
robotframework3.0
seleniumlibrary(2の後のバージョン)
python 3.0
主な使用ライブラリ:builtIn,string,seleniumlibrary

新しいタブを開き、開いたタブ先でテストを続行したい。

target=”_blank”とかのリンクを押すと別タブが開くが、robotframeworkの処理は開いた先のタブではなく、元のタブでそのまま処理を継続させようとする。(そしてテストがエラーになる。)
それを防ぐために、以下を実行する。

testcase.robot
// 開いているタブ名を取得
Get Window Names

// 上記で取得した遷移先のタブ名(=locator)を指定
Select Window  name=locator

これで開いたタブに移動し、処理は開いたタブ上で始まる。
なお、たまにnameが一緒なタブ(undefinedとか)もあるので、そういう時は

testcase.robot
// 開いているタブ名を取得
Get Window Titles

// 上記で取得した遷移先のタブ名(=locator)を指定
Select Window  title=locator

でいけることもある。なお、もちろんnameやtitileを取得したらGet Windowは不要なので消してok。

locatorをidや一意のclassで指定してクリックさせたいのに、エレメントがnot foundと言われる

これもよく起きる。対策としてClickの前に

testcase.robot
Wait Until Element Is Enabled  エレメント名
Click Element  id=エレメント名

とする。ポイントはWait Untilで有効化するまで待つこと。
それか、xpathで指定するとうまくいくケースもある。

testcase.robot
Wait Until Element Is Enabled  xpath: エレメントのxpath
Click Element  xpath: エレメントのxpath

実感としては、読み込みに時間がかかるページ内のエレメントを指定した時や、ダイアログが表示されOKボタンを押したい時みたいな場合によくこの種のエラーに遭遇した。

if文で条件がtrueの時に処理を実行する

ここが1番詰まった。何せ日本語でif文の書き方的な情報が圧倒的にない。
ここでは実例として、「ページ内にqiitaという文言があれば<div id="test">をクリックしてページをリロード、なければ普通にページをリロード」という条件文を書く。

testcase.robot
// Run Keyword And Return Status: 後続のキーワードを実行し、結果を返す
// Page Should Contain Text: ページ内に指定のテキストが含まれているか

${result} =  Run Keyword And Return Status  Page Should Contain Text  qiita

Run Keyword If  '${result}' == 'True'  Run Keywords  Click Element  test  AND  Reload Page  ELSE  Reload Page

ポイントは4つあって、1つはRun Keyword And Return Statusで成否をとりたいキーワードを指定してあげ、それを${result}という変数に入れること。
2つ目は${result}の中身とTrueという文字列をRun Keyword Ifで比較してあげること。
3つ目は'${result} == 'True' とシングルクォートで変数も文字列も囲う必要があること。
最後に、ELSEは必ず大文字で書くこと。

これを実現するのにとても時間がかかった・・。なお、Run Keywords ANDは、ANDでつなぐことでいくらでも後ろにキーワードを追加できる。

もしこういう場合にもっといい書き方があればコメントください。

タブを閉じて、そのまま処理を実行させようとするとwindowがすでにクローズされていますというエラーが出る

例えば何かの処理を終えてタブを閉じ、すでに開いていたタブで継続の処理を走らせたい時に、そのままclose後に処理を続けようとするとエラーが起きる。そういう場合は

testcase.robot
// タブがクローズしてしまう処理と仮定
Click Element  quit

// 処理を続行したいタブ名(=locator)を指定
Select Window  name=locator

と一度タブ名を指定すればOK。

最後に

robotframeworkは使いこなせれば便利だけど、いかんせん日本語の情報量が少ないので、こういう時どうすればいいんだろう?というのがわかりづらいのが現状だと思う。
これからもrobotframeworkは触っていく予定なので、随時アップデートしていきたい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?