(Codeception + Selenium2) Acceptance Testに複数種類のブラウザを利用する
久しぶりの更新です。
CodeceptionのAcceptance TestにSeleniumを利用する場合のTIPSになります。
とある場所にて、Codeceptionのレクチャーをした際に、「IE, ChromeでもAcceptance Testは可能ですか?」という質問をいただきましたので、ここにまとめておきます。
はじめに
このエントリではCodeceptionのバージョン 1.6.10を利用しています。
最新の1.7系ではSelenium2モジュールの改善版であるWebDriverモジュールというものが利用できますので、そちらを利用した方が良いです。
参考
1. Firefox
特殊な設定は必要ないです。
マニュアルどおりにやっていけばできます。
1.1. acceptance.suite.yml
class_name: WebGuy modules: enabled: - Selenium2 - WebHelper config: Selenium2: url: http://localhost:8000 browser: firefox delay: 200 capabilities: unexpectedAlertBehaviour: 'accept'
browserに「firefox」を指定します。
1.2. Seleniumの起動
java -jar selenium-server-standalone-2.37.0.jar
2. Internet Explorer
2.2. acceptance.suite.yml
browserの指定を「ie」にします。
modules: config: Selenium2 browser: ie
※↑抜粋
2.3. Seleniumの起動
java -jar selenium-server-standalone-2.37.0.jar -Dwebdriver.ie.driver=.\IEDriverServer32.exe
IEDriverを指定して起動します。
3. Chrome
Internet Explorerとほぼ同じです。
3.1. ChromeDriverをインストール
chromedriver - WebDriver for Google Chrome - Google Project Hosting からダウンロードして、jarファイルと同じ場所に配置しておきます。
3.3. Seleniumの起動
java -jar selenium-server-standalone-2.37.0.jar -Dwebdriver.chrome.driver=.\chromedriver.exe
4. トラブルシューティング・未解決の問題
実際に自分が体験した内容をまとめておきます。
未解決のもの、どなたか知っていたら教えて下さい。
4.1. IE:フォームの文字入力がめっさ遅い!
Selenium の IE Driver で SendKeys したときに1文字ごとの入力が異様に遅い場合の対処 : @jsakamoto と同様、32bit版のドライバを使うことで解決しました。
4.2. (未解決)IE:texteareaにplaceholderが設定されている場合にテストが失敗する
フォームの初期表示で「何も入力されていないよね?」というテストをしたく、
<textarea class="form-control" id="Detail" placeholder="詳細" rows="10" name="task[detail]"></textarea>
というtextareaに対して、
<?php $I->seeInField('詳細', '');
と記述していましたが、placeholderに設定した値がすでに入力されているとみなされてしまうのか、テストに失敗しました。
最後に
複数種類のブラウザを利用してAcceptance Testを実行したい場合、現状では一つのSuitesにつき一種類のブラウザしか指定ができないため、複数Suitesを用意するしかないようです。
その際に発生するコードの重複は PageObjects や "StepObjects" 等でリファクタリングするのが良いかと。
一つのSuitesで複数種類のブラウザを利用可能とするための提案はすでにされており、
Multiple Selenium2 Sessions for Acceptance tests · Issue #154 · Codeception/Codeception · GitHub
開発者の @davert さん曰く、
とのことです。先日1.7がリリースされたばかりなのに、もうバージョン1.8が楽しみです。