2013-03-03 4 views
6

У меня есть несколько классов, которые определяют, как я хочу обрабатывать несколько веб-сайтов, с аналогичными методами в обоих (то есть, логин, обновление). Каждый класс открывает собственный экземпляр браузера WATIR.Ruby Threads with Watir

class Site1 
    def initialize 
     @ie = Watir::Browser.new 
    end 
    def login 
     @ie.goto "www.blah.com" 
    end 
end 

образец кода в основном без каких-либо нитей следующим образом

require 'watir' 
require_relative 'site1' 

agents = [] 
agents << Site1.new 

agents.each{ |agent| 
    agent.login 
} 

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

require 'watir' 
require_relative 'site1' 

agents = []; threads = [] 
agents << Site1.new 


agents.each{ |agent| 
    threads << Thread.new(agent){ agent.login } 
} 

threads.each { |t| t.join } 

это дает мне ошибку: неизвестен свойство или метод: navigate. Код ошибки HRESULT: 0x8001010e. Приложение называется интерфейсом, который был настроен для другого потока.

Кто-нибудь знает, как исправить это, или как реализовать аналогичную функциональность?

+1

Кажется, что это ошибка в watir-classic или одна из библиотек, которые она использует. Проблема не возникает при использовании watir-wedriver с firefox. –

+0

спасибо, justin, похоже, что ты прав. хорошо работает с watir-webdriver, поэтому я думаю, что это просто ошибка с watir-classic. – cubesnyc

ответ

0

Не совсем уверен в этом, но вот качели с использованием потоков.

require 'thread' 
    threads = []    # Setting an array to store threaded commands 
    c_thread = Thread.new do # Start a new thread 
    login      # Call our command in the thread 
    end 
    threads << c_thread