Как получить дескриптор WIN32OLE для IE через watir-webdriver?
В Watir вы можете получить WIN32OLE дескриптор окна IE, используя следующий метод.
irb(main):059:0> browser.ie
=> #<WIN32OLE:0x28d12b8>
Мне нужно как-то получить тот же возврат для IE, который был создан watir-webdriver.
Есть ли способ? Или, по крайней мере, кто-то может указать мне направление копать.
Мне нужен этот материал, чтобы прикрепить плагин HTTPwatch к моему экземпляру браузера. Вот пример кода HTTPWatch.
require 'watir'
require 'win32ole'
browser = Watir::Browser.new
controller = WIN32OLE.new('HttpWatch.Controller')
plugin = controller.IE.Attach(browser.ie)
UPD: благодаря Джастину Ко у меня есть рабочий код
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 ответ
Вы можете попробовать использовать 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, по-видимому, совпадает с типом, возвращаемым browser.ie() Watir.
Обратите внимание, что это решение предполагает, что браузер имеет уникальный заголовок. Если это предположение неверно, я могу написать некоторые обходные пути.