(あくまでも投稿時時点での、私が調べられた限りの情報です。)
- とりあえず動かす
2.0以降構成が変わっている。
Rubyの場合、gemでインストールするとのこと。
gem install selenium-webdriverでインストールできる。
以前少し調べたときは、これとは別にサーバ側のインストールが必要だったはず。ダウンロードのページにはSelenium Serverがしっかり載っているので、どこかでサーバの設定をするのだろうと思ったが、サンプルコード(例えばこのチュートリアル)を見たところ全くサーバ設定に該当するようなコードがない。
後でわかったが、Selenium Serverが必要なのはリモートPCでテストする場合などだけみたい。
私のところの場合、開発はCentOS(仮想マシン)で行う一方、IE8対応をテストするためWindowsマシン上で動かさないといけないから、結局必要だということになった。
新しい構成のSeleniumを使うとなると、WebratよりCapybaraのほうがよさそうなので、Capybaraを入れる。インストールはSelenium Client Driverと同様にgemで。
gem install capybaraチュートリアルにしたがってRSpecもインストールする。
gem install rspec先ほどのチュートリアルにあるように、Gemfileでgemを指定して
bundle installを実行したり、helperに
などの設定を入れたり。require 'rspec/rails' # Add this to load Capybara integration: require 'capybara/rspec' require 'capybara/rails'
これでvisitやclick_onなどの設定が使えるのかと思ったら、エラー。
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_4:0x748aab0>
などと出てくる。
requireだけでは不十分なのか。結局、ココでのコメントにあるとおり
include Capybara::DSLでエラーが出なくなった。
解決したのはよいが、調べてもあまりこのことは載っていなかった。特殊な環境だけで起こる事象なのだろうか。
- リモートで動かす
どう考えても何も設定しなければローカルで実行されるに決まっているので、設定方法を調査。
CapybaraやRails関係のところではなく、Seleniumのドキュメントに説明があった。
などとすればよいみたい。driver = Selenium::WebDriver.for(:remote, :url => "http://myserver:4444/wd/hub", :desired_capabilities => :ie)
動かしたいPCにSelenium Serverをダウンロード、起動した状態で
rake specなどとして実行すればよいはず…
今度はvisitなどができない。
APIを見てみると、先ほど取得したdriverオブジェクトに対してfind_elementなどのメソッドを取得している。メソッドもCapybaraに備わっているものとは異なる。
できるだけブラウザエンジンに依存しないスクリプトを書いて、用途に応じてブラウザエンジンを切り替える、という運用を考えていたが、しばらく調べたのち、リモートで動かす前提だと無理だ、という結論に。
Selenium IDEからrubyのスクリプトをエクスポートしたときも、visitやclick_onなどのシンプルなものではなく、ドライバに対するメソッドで、かなり複雑なことをやっていると思ったが、それはFirefoxブラウザを使ったり、リモートで動かしたりするときにはこの形のスクリプトを書かなければいけないから、ということみたいだ。
このSelenium特有の記法を使ってスクリプトを書いたら実行できた。なお、2.4にはバグがあってIEでは実行できないようなので要注意。私もはまりました。
次はSeleniumのコードを書く中で動かないところとか出てくるはず。
0 件のコメント:
コメントを投稿