こんにちは、生産性チームのkmt です。
この記事は、ShanonAdventCalendar2017 8日目の記事です。
みなさんは、夏休みの宿題は最初にやるタイプでしたか?最後にやるタイプでしたか?
私は個人的には最初にやるタイプですが、Seleniumに関しては最後にやることになってしまいました(笑)
ご存知のとおり、Selenium3.0がリリースされて1年近くがたちました。
Selenium IDEもFirefox57以降サポート対象外(実際には55から動かなくなりました。ESRを利用すればまだもう少し延命できます。)ということで弊社も重い腰をあげたわけですが、長い歴史を経て溜まりにたまった資産。。。
とにかく
量が!!!多い!!!
そこでより短時間で効率的に移行ができるように絶賛対応中です。
そこの賢いみなさんは、とっくの昔に移行しました!かもしれませんが、人間みんな平等に年を取るのと同じように、今つかっているものもいずれは古くなるわけです。ですので、何かを移行する際に参考にしていただけたらなと思います。
手順1:ツールを探す
全部自分でやっていたら気が遠くなるので、まずは誰かつくってないか探してみるとよいです。
今回は、IDEのエクスポートのJSを利用することにしました。
弊社では、HTML形式のものをRCのJavaに変換してテストを実行していましたが、この対応でHTML形式のものをWebDriverのRubyに変換します。
ruby-wd-rspec.js、testCase.js、testSuite.jsあたりを利用して既存の資産を一括で変換できるようにします。
手順2:不足分を補う
対応されてない不足分を補います。
Selenium IDEの場合は、変換できないコマンドの対応します。
いくつかのコマンドは対応されてないので自分でWebDriverのコードを書きます。
手順3:独自実装の対応をする
今回は、IDEのエクスポートのJSを利用することにしました。
弊社では、HTML形式のものをRCのJavaに変換してテストを実行していましたが、この対応でHTML形式のものをWebDriverのRubyに変換します。
ruby-wd-rspec.js、testCase.js、testSuite.jsあたりを利用して既存の資産を一括で変換できるようにします。
手順2:不足分を補う
対応されてない不足分を補います。
Selenium IDEの場合は、変換できないコマンドの対応します。
いくつかのコマンドは対応されてないので自分でWebDriverのコードを書きます。
手順3:独自実装の対応をする
独自にいれたJS、User-extensions.jsの内容をruby形式に置き換えてコードを書きます。
以上でさくっと完了するわけです!
ただ、いくつかハマリポイントがありました。
ポイント1:Firefoxの実行
Firefoxの実行が遅い場合があります。WaitForTextPresentなどの文字をキーにするようなコマンドを使っているとページ全体を検索するので、IDEのときの1.5倍くらいの実行時間になってしまいました。このレガシーなコマンドを利用している場合は、Choromeを利用するとよいですね。
ポイント2:ChromeでsendKeysで文字がおちる場合がある
sendKeysコマンドで送った文字の一部が入力されないバグがあります。そのためChromeを利用する場合は、Javascriptで文字を入力しないといけないです。
移行で学んだこと
IDEはとても便利なツールでしたが、設計ができないのでしんどい部分も多々ありました。
Webdriverではそのあたりきちんとすれば、かなり効率的に運用できると思います。しかし、どんなツールを使っても、結局無理やり入れた処理はあとで苦労するのでこのあたりの設計や運用ルール、定期的なリファクタリングがうまくまわるようにしたいと思います。