是否可以使用Watir定位特定的IE浏览器版本

时间:2012-08-01 08:45:57

标签: internet-explorer integration-testing watir watir-webdriver

我正在使用Watir-webdriver并在我的测试机上同时拥有IE 32位和IE 64位。当我使用

创建浏览器实例时
browser = Watir::Browser.new :ie

它默认打开IE 64位(这本身很有趣,因为它不是默认的浏览器)。我希望能够以编程方式指定哪个版本的IE(32位或64位)。这是可能的,如果是这样的话,怎么办呢。

1 个答案:

答案 0 :(得分:2)

<强>背景

Wlenr-webdriver正在使用的Selenium-webdriver决定了使用的版本:

“驱动程序支持运行32位和64位版本的浏览器。选择如何确定在启动浏览器时使用的”bit-ness“取决于启动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窗口时添加“位选项”。这比上面更好,但仍然是hacky(即全局变量)。

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