Как получить дескриптор 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.

Обратите внимание, что это решение предполагает, что браузер имеет уникальный заголовок. Если это предположение неверно, я могу написать некоторые обходные пути.

Другие вопросы по тегам