2011-10-10

[Selenium][Firefox][PHPUnit] Selenium RCで新しいバージョンのFirefoxを動かす

このエントリーをはてなブックマークに追加
Selenium RC でちょっとモゴモゴしたくなったのでメモ程度に。

やろうとしてたことは、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 件のコメント:

コメントを投稿