watirとwatir-webdriver違いはComparison with watir 1.x - watir-webdriver - GitHubにリストアップされていますが、ここにリストアップされていないもので大きな点というと、autoitを扱えなくなったという点があります。autoitはwindowsでのみ動作しない機能ですし、マルチプラットフォーム化しているwebdriverでは当たり前と言えば当たり前ですが。
ここで困るのはjavascriptのポップアップなどの処理です。watir 1.xにはWinClickerなどのツールもありましたが、watir-webdriverではそうしたOS依存の機能は現在のところありません(私は日本語のメニューの処理などがあったのでWinClickerを使用せずに、autoitで処理していました)。
そこでwatir-webdriverではexecute_scriptのメソッドを使用して、javascriptを回避する方法が紹介されています。execute_scriptは(詳しくは理解できていませんが)表示しているページで使用しているjavascriptを上書きして実行することができるメソッドです。
そしてTesting webpages with JavaScript popups correctlyでは、それを簡単に実行するためのメソッドを紹介しています。使い方はこんな感じ。
1 | require 'rubygems' |
watir-webdriver/extensions/alerts は拡張機能(extension)という位置づけであるため、watir-webdriverとは別にrequire する必要があります。
上記の場合では、リンクをクリックするとJavascriptでconfirmationのメッセージを表示されるような場合に、メッセージが表示されることなく「ok」の状態で次の状態に進みます。これでJavascriptのメッセージは回避することができます。Javscriptをオーバーライドして回避するので、(素のままのアプリケーションをテストするわけではないので)完璧なテストとは言えないかもしれませんが、そのへんはわりきって。
あと蛇足ですが、watir-webdriverでは、linkのメソッドなどelment関連のメソッドに引数を与えない場合は、はじめのlinkエレメントを実行します(watir 1.xで言うとlink(:index,1) と同じ動作になる)。
autoitを使用して処理していたものとして、BASIC認証のハンドリングなんかもあるんですが、今のところwatir-webdriverでの回避方法はわかっておりません。