やろうとしてたことは、Selenium RC + PHPUnit で受け入れテストor回帰テストの自動化的なことをしようとしてたんだけど、本家からダウンロードしてくると、別個でインストールしているFirefox 7.0.1ではエラーで軽く一蹴される。
これは既存起動時のselenium-server.jarがFirefox 3.6.xまでしか対応していないから。
以下回避策。
1. selenium-server.jarをselenium-server.zipとしてコピーして解凍。
2. ディレクトリ配下に複数存在するinstall.rdfのmaxVersionを変更。
3. 変更したファイル群をzipで圧縮してまた.jarファイルにリネーム。
4. 編集したselenium-server.jarをjava -jar {directory}/selenium-server.jarとして実行。
1. selenium-server.jarをselenium-server.zipとしてコピーして解凍。
本家からダウンロードしたSelenium RC (現行では1.0.3)のserver/selenium-server.jarをコピーする。
$ cp -a ./server/selenium-server.jar ./server/selenium-server.zip
で解凍なんだけど、unzipするとそこにヴアーっとファイルが置かれてしまうので
別ディレクトリ先でやったほうが良いかも。
$ mv ./server/selenium-server.zip {Directory}/
$ cd {Directory}
$ unzip selenium-server.zip
2. ディレクトリ配下に複数存在するinstall.rdfのmaxVersionを変更。
$ find {Directory}/ | grep -i install\.rdf
見つかったファイル全てのファイル名のFirefoxのmaxVersionを変更
<!-- Firefox --> <em:targetApplication> <Description> <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <em:minVersion>1.4.1</em:minVersion> // ↓ここ <em:maxVersion>3.6.*</em:maxVersion> </Description> </em:targetApplication>
指定するバージョン名はまぁお好みで。
3. 変更したファイル群をzipで圧縮してまた.jarファイルにリネーム。
// pwd: {Directory}
$ zip -r selenium-server.zip *
$ mv {Directory}/selenium-server.zip {Directory}/selenium-server.jar
.jarファイルはお好きなディレクトリ(/usr/local/bin/ とか)へどうぞ。
4. 編集したselenium-server.jarをjava -jar {directory}/selenium-server.jarとして実行。
$ java -jar {directory}/selenium-server.jar
XX:XX:XX.XXX INFO - Java: Apple Inc. 20.1-b02-383
XX:XX:XX.XXX INFO - OS: Mac OS X 10.7.1 x86_64
XX:XX:XX.XXX INFO - v2.0 [a2], with Core v2.0 [a2]
XX:XX:XX.XXX INFO - RemoteWebDriver instances should connect to: http://xxx.xxx.xxx.xxx:xxxx/wd/hub
XX:XX:XX.XXX INFO - Version Jetty/5.1.x
XX:XX:XX.XXX INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
XX:XX:XX.XXX INFO - Started HttpContext[/selenium-server,/selenium-server]
XX:XX:XX.XXX INFO - Started HttpContext[/,/]
XX:XX:XX.XXX INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@3b835282
XX:XX:XX.XXX INFO - Started HttpContext[/wd,/wd]
XX:XX:XX.XXX INFO - Started SocketListener on 0.0.0.0:xxxx
XX:XX:XX.XXX INFO - Started org.openqa.jetty.jetty.Server@55d15445
起動時にも特にエラーはない。
テストしてみる。
<?php // WebTest.php require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; class WebTest extends PHPUnit_Extensions_SeleniumTestCase { protected function setUp() { $this->setBrowser('*firefox'); $this->setBrowserUrl('http://www.google.co.jp/'); } public function testTitle() { $this->open('http://www.google.co.jp/'); $this->assertTitle('Google'); } }
$ phpunit --colors WebTest.php
PHPUnit 3.5.15 by Sebastian Bergmann.
.
Time: 6 seconds, Memory: 6.00Mb
OK (1 test, 1 assertion)
// Selenium Log
XX:XX:XXX.XX INFO - Checking Resource aliases
XX:XX:XXX.XX INFO - Command request: getNewBrowserSession[*firefox, http://www.google.co.jp/] on session null
XX:XX:XXX.XX INFO - creating new remote session
XX:XX:XXX.XX INFO - Allocated session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX for http://www.google.co.jp/, launching...
XX:XX:XXX.XX INFO - Preparing Firefox profile...
XX:XX:XXX.XX INFO - Launching Firefox...
XX:XX:XXX.XX INFO - Got result: OK,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX on session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX:XX:XXX.XX INFO - Command request: setTimeout[30000, ] on session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX:XX:XXX.XX INFO - Got result: OK on session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX:XX:XXX.XX INFO - Command request: open[http://www.google.co.jp/, ] on session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX:XX:XXX.XX INFO - Got result: OK on session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX:XX:XXX.XX INFO - Command request: getTitle[Google, ] on session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX:XX:XXX.XX INFO - Got result: OK,Google on session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX:XX:XXX.XX INFO - Command request: testComplete[, ] on session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX:XX:XXX.XX INFO - Killing Firefox...
XX:XX:XXX.XX INFO - Got result: OK on session XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
問題なく動きますね。
Platforms Supported 見てもけっこーバージョンはカバーしてるっぽいし、
一応これで3.6以降のバージョンでも一応動くようにはなる。
バージョンが上がるごとに先のようにうんちゃらするのはアレだし、
実はuser extionsionsで書けるんじゃないのって思うけど書き方を知らない。
既にあったら、誰ぞ教えていただけるととってもハッピーになれます。
いやそもそもSelenium Server 2.xを使ってみたいが、PHPUnit_Selenium_TestCaseが1系しか対応していない。(きっとPHPUnit 3.6系でも同じ)
php-webdriver-bindingsを使ってもいいんだけど、xUnit likeにコード書いていきたい欲。
おとなしく2.x系対応版が出るのを待つか、forkしてPHPUnit_Selenium2_TestCaseとしてExtension作るか。。。
需要あるかな?
LINKS:
Selenium Remote-Control: http://seleniumhq.org/projects/remote-control/
phpunit: https://github.com/sebastianbergmann/phpunit/
phpunit-selenium: https://github.com/sebastianbergmann/phpunit-selenium
phpunit manual: http://www.phpunit.de/manual/3.6/en/selenium.html
php-webdriver-bindings: http://code.google.com/p/php-webdriver-bindings/
0 件のコメント:
コメントを投稿