在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)
答案 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()返回的类型相同。
请注意,此解决方案假定浏览器具有唯一标题。如果这个假设无效,我可以写一些解决方法。