Ho scritto diverse classi che governano il modo in cui voglio gestire diversi siti web, con metodi simili in entrambi (ad es. Login, aggiornamento). Ogni classe apre la propria istanza del browser WATIR.Fili di rubino con Watir
class Site1
def initialize
@ie = Watir::Browser.new
end
def login
@ie.goto "www.blah.com"
end
end
un esempio di codice nella principale senza fili è il seguente
require 'watir'
require_relative 'site1'
agents = []
agents << Site1.new
agents.each{ |agent|
agent.login
}
Questo funziona bene, ma doesnt spostare sulla linea successiva finché quella corrente ha terminato il login. Vorrei incorporare il multithreading per gestire questo, ma non riesco a farlo funzionare.
require 'watir'
require_relative 'site1'
agents = []; threads = []
agents << Site1.new
agents.each{ |agent|
threads << Thread.new(agent){ agent.login }
}
threads.each { |t| t.join }
questo mi dà l'errore: la proprietà sconosciuta o il metodo: navigate
. Codice errore HRESULT: 0x8001010e. L'applicazione ha chiamato un'interfaccia che è stata sottoposta a marshalling per un thread diverso.
qualcuno sa come risolvere questo problema o come implementare una funzionalità simile?
Sembra che si tratti di un bug in watir-classic o in una delle librerie che utilizza. Il problema non si verifica quando si usa watir-wedriver con firefox. –
grazie justin, sembra che tu abbia ragione. funziona bene con watir-webdriver quindi immagino sia solo un baco con watir-classic. – cubesnyc