0

Watir-webdriverを使用していて、テストマシンにIE32ビットとIE64ビットの両方があります。を使用してブラウザインスタンスを作成する場合

browser = Watir::Browser.new :ie

デフォルトでIE64ビットを開きます(デフォルトのブラウザではないため、それ自体が興味深いものです)。プログラムでターゲットにしているIEのバージョン(32ビットまたは64ビット)を指定できるようにしたいと思います。これは可能ですか?もしそうなら、どのようにそれを行うことができますか?

4

1 に答える 1

2

バックグラウンド

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
于 2012-08-01T14:56:30.143 に答える