ささいなことですが。

Windowsアプリテスト自動化ライブラリFriendly開発者の日記です。

Seleniumハマりました(IE)

Seleniumでテスト自動化を一仕事経験したわけですが、すげー大変でした。
大量のテストケースを自動化して、かつChorem、FirefoxIEで安定動作させるというものです。大変だった分、色々ノウハウも蓄積しました。
多くの方々にお世話になったので、ささやかではありますが、僕も情報を共有させていただきます。

色々あるのですが・・・
書きたいことから書いていきますw

それはIE対応が大変だったということです。

マルチブラウザ対応は元々大変です。
Driverごとの動作はもちろん、対象のアプリ自体も微妙に挙動が違ったり。
その中でもIEは群を抜いてます。

初期設定

はい、最初にハマります。
でShiftの玉川さんと太田さんに情報いただいて、回避しました。
保護モードとレジストリの設定が必要なようですね。
このあたり。
めっちゃ面倒やん。
qiita.com

SendKeysが激遅

ありえないくらい遅い。
一文字入れるのに数秒かかる。
ググったら64bitは遅いから、32bit使えって・・・
てか、64bit版の方、なんでこれで放置してるの?
devadjust.exblog.jp

クリックで全然別の座標をクリックしてしまう。

クリックで別の座標って全然ダメじゃん。
何?拡大率?
って思ってみても100%になってるし・・・。
実は100%ではダメだったのです。

拡大率はそのマシンでのデフォルト値にしなければならないのです。

f:id:ishikawa-tatsuya:20160603002854p:plain
でもInternetExplorerDriverは拡大率100%を求めてきますので
拡大率を無視するようにしてください。
昔は100%でよかったんでしょうねー。
高DPI時代故のハマりポイントか。

var caps = new InternetExplorerOptions { IgnoreZoomLevel = true };
return new InternetExplorerDriver(caps);

画面遷移やポストバックを待たない

FirefoxDriverなどではボタンクリックなどで画面遷移やポストバックによる再読み込みが発生する場合、画面遷移が終わって要素が出そろうのを待ってくれることが多いのですがIEは待ってくれないのですよね。抜けてくる。テスト自動化はこの同期制御が非常に重要なのでこれは本当に困りました。で、結論から言ってSelenium単品では対応は無理でした。目的の画面要素が出そろうまで待とうとしましたが、それをやってるとIEDriverServer.exeが落ちてしまうのです。それでどうしたかというと、次の問題と一緒に対応しました。

そもそもIEDriverServer.exeが落ちる

結構な頻度で落ちるんですよ。
いやいやいや、もう無理でしょ。どうにもならないよ。
OSSだし直そうかと思いましたが、コード見て心が折れました。

でも、調べてると、タイミング依存で発生したりしなかったりではありますが、落ちる操作って決まってるんですよ。
ポストバックが発生してその後重たいJavaScriptが動くような処理のトリガをSeleniumで実行したとき、もしくはその直後の操作ですね。

COMを使えばよいのです

で、閃きました。
じゃあ、その操作だけSelenium使わなければいいじゃん。
IEだからCOM経由で操作できるんですよ。
このページにお世話になりました。
http://blog.clockahead.com/search/label/IE

次回は、このCOM操作を詳しく説明します。
Seleniumちゃうやん・・・