Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何通过watir webdriver获取IE的Win32 OLE句柄?_Ruby_Watir_Watir Webdriver_Httpwatch - Fatal编程技术网

Ruby 如何通过watir webdriver获取IE的Win32 OLE句柄?

Ruby 如何通过watir webdriver获取IE的Win32 OLE句柄?,ruby,watir,watir-webdriver,httpwatch,Ruby,Watir,Watir Webdriver,Httpwatch,在Watir中,您可以使用next方法获取IE窗口的Win32 OLE句柄 irb(main):059:0> browser.ie => #<WIN32OLE:0x28d12b8> UPD:感谢Justin Ko,我有了工作代码 require 'win32ole' require 'watir-webdriver' browser = Watir::Browser.new :ie title = browser.title browser.goto "google.

在Watir中,您可以使用next方法获取IE窗口的Win32 OLE句柄

irb(main):059:0> browser.ie
=> #<WIN32OLE:0x28d12b8>
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)

您可以尝试使用WIN32OLE连接到正在运行的IE实例。Ruby on Windows博客对此进行了讨论-请参阅

我认为您需要的代码是:

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()返回的类型相同


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

您可以尝试使用WIN32OLE连接到正在运行的IE实例。Ruby on Windows博客对此进行了讨论-请参阅

我认为您需要的代码是:

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()返回的类型相同


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

您好,非常感谢您的帮助。您的代码还没有运行,但是稍微修改一下版本就可以了。这里是
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)。每个do | i | begin放入win32ole.new('Shell.Application')。Windows(i)。Document.title放入$ie=win32ole.new('Shell.Application').Windows(i)rescue end controller=WIN32OLE.new('HttpWatch.controller')plugin=controller.IE.Attach($IE)
Hi,非常感谢您的帮助。您的代码还没有正常工作,但是稍微更改一下版本就可以了。这里是
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)。每个do | i | begin放入WIN32OLE.new('Shell.Application')。Windows(i).Document.Title放入$ie=WIN32OLE.new('Shell.Application')。Windows(i)rescue end-end-end-controller=WIN32OLE.new('HttpWatch.controller')plugin=controller.ie.Attach($ie)