バックグラウンド
Watir-webdriverが使用しているSelenium-webdriverは、使用するバージョンを次のように決定します。
「ドライバは、32ビットおよび64ビットバージョンのブラウザの実行をサポートしています。ブラウザの起動に使用する「ビット数」を決定する方法の選択は、起動するIEDriverServer.exeのバージョンによって異なります。32ビットの場合-IEDriverServer.exeのビットバージョンが起動すると、32ビットバージョンのIEが起動します。同様に、64ビットバージョンのIEDriverServer.exeが起動すると、64ビットバージョンのIEが起動します。」-http ://code.google.com/p/selenium/wiki/InternetExplorerDriver
おそらく、64ビットバージョンがインストールされています。
解決
Selenium-webdriverはファイルIEDriverServer.exeにハードコードされています。最も簡単な解決策は、これをオーバーライドすることです。次のことを試してください。
- 32ビットバージョンと64ビットバージョンの両方のIEDriverServerをダウンロード/抽出します
- それらの名前をそれぞれIEDriverServer32.exeおよびIEDriverServer64.exeに変更します
- 両方がどこかのパスにあることを確認してください
- 次のコードを使用して、使用するバージョンを指定します
これはかなり簡単なハックです。私は確かにもっとエレガントな解決策です。
require 'rubygems'
require 'watir-webdriver'
#Specify your version - 32bit or 64bit
version = '32bit'
#Determine the binary to use
case version
when '32bit'
$ie_binary = 'IEDriverServer32'
when '64bit'
$ie_binary = 'IEDriverServer64'
else
raise( "Invalid version - #{version}" )
end
#Override the method that determines the binary to get
module Selenium
module WebDriver
module IE
class Server
def self.get
binary = Platform.find_binary($ie_binary)
if binary
new(binary)
else
raise Error::WebDriverError,
"Unable to find standalone executable. Please download the IEDriverServer from http://code.google.com/p/selenium/downloads/list and place the executable on your PATH."
end
end
end
end
end
end
browser = Watir::Browser.new :ie
#=> Browser of your desired IE version should launch
更新-ビットオプションを追加
使用するブラウザをより適切に決定できるように、IEウィンドウを作成するときに「ビットオプション」を追加できます。これは上記よりも優れていますが、それでもハッキー(つまりグローバル変数)です。
require 'rubygems'
require 'watir-webdriver'
module Selenium
module WebDriver
module IE
class Bridge
alias_method :old_initialize, :initialize
def initialize(opts = {})
$ie_binary = ''
case opts.delete(:bit)
when '32'
$ie_binary = 'IEDriverServer32'
when '64'
$ie_binary = 'IEDriverServer64'
else
$ie_binary = 'IEDriverServer'
end
old_initialize(opts)
end
end
end
end
end
module Selenium
module WebDriver
module IE
class Server
def self.get
binary = Platform.find_binary($ie_binary)
if binary
new(binary)
else
raise Error::WebDriverError,
"Unable to find standalone executable. Please download the IEDriverServer from http://code.google.com/p/selenium/downloads/list and place the executable on your PATH."
end
end
end
end
end
end
#Open and close a IE 32bit browser
browser = Watir::Browser.new :ie, {:bit => '32'}
browser.close
#Open and close a IE 64bit browser
browser = Watir::Browser.new :ie, {:bit => '64'}
browser.close