如何通过watir-webdriver获取IE的WIN32OLE句柄?

时间:2012-04-02 17:25:41

标签: ruby watir watir-webdriver httpwatch

在Watir中你可以使用下一个方法获得IE窗口的WIN32OLE句柄。

irb(main):059:0> browser.ie
=> #<WIN32OLE:0x28d12b8>

我需要以某种方式获得由watir-webdriver创建的IE的相同回报。

有什么办法吗?或者至少有人可以指出我的方向。

我需要这些东西将HTTPwatch插件附加到我的浏览器实例。以下是HTTPWatch代码的示例。

require 'watir'
require 'win32ole'
browser = Watir::Browser.new
controller = WIN32OLE.new('HttpWatch.Controller')
plugin = controller.IE.Attach(browser.ie)

UPD:感谢Justin Ko我有工作代码

require 'win32ole'
require 'watir-webdriver'

browser = Watir::Browser.new :ie
title = browser.title
browser.goto "google.com"

length = WIN32OLE.new('Shell.Application').Windows.count - 1

(0..length).each do |i|
begin
       WIN32OLE.new('Shell.Application').Windows(i).Document.Title
       $ie = WIN32OLE.new('Shell.Application').Windows(i)
    rescue
    end
end

controller = WIN32OLE.new('HttpWatch.Controller')
plugin = controller.IE.Attach($ie)

1 个答案:

答案 0 :(得分:1)

您可以尝试使用WIN32OLE附加到正在运行的IE实例。这在Ruby On Windows博客上进行了讨论 - 请参阅here

我认为您需要的代码是:

require 'win32ole'
require 'watir-webdriver'

browser = Watir::Browser.new :ie
title = browser.title

for window in WIN32OLE.new('Shell.Application').Windows
    begin
        if window.Document.Title == title
            ie = window
        end
    rescue
    end
end

controller = WIN32OLE.new('HttpWatch.Controller')
plugin = controller.IE.Attach(ie)

我没有HttpWatch,所以我无法测试它。但是,win32ole类型与Watir的browser.ie()返回的类型相同。

请注意,此解决方案假定浏览器具有唯一标题。如果这个假设无效,我可以写一些解决方法。