Ich habe mehrere Klassen geschrieben, die regeln, wie ich mehrere Websites mit ähnlichen Methoden in beiden (dh Login, Aktualisieren) behandeln möchte. Jede Klasse öffnet ihre eigene WATIR-Browserinstanz.Ruby Threads mit Watir
class Site1
def initialize
@ie = Watir::Browser.new
end
def login
@ie.goto "www.blah.com"
end
end
Beispiel des Codes in der Haupt ohne Gewinde ist als
require 'watir'
require_relative 'site1'
agents = []
agents << Site1.new
agents.each{ |agent|
agent.login
}
Dies funktioniert gut, aber tut auf den nächsten Agenten folgt bewegen, bis die aktuelle in der Anmeldung abgeschlossen ist. Würde Ich mag Multithreading zu integrieren, um damit umzugehen, aber es scheint nicht zu funktionieren.
require 'watir'
require_relative 'site1'
agents = []; threads = []
agents << Site1.new
agents.each{ |agent|
threads << Thread.new(agent){ agent.login }
}
threads.each { |t| t.join }
das gibt mir den Fehler: unbekannte Eigenschaft oder Methode: navigate
. HRESULT-Fehlercode: 0x8001010e. Die Anwendung hat eine Schnittstelle aufgerufen, die für einen anderen Thread gemarshallt wurde.
weiß jemand, wie man das repariert, oder wie man eine ähnliche Funktionalität implementiert?
Es scheint, es ist ein Fehler in watir-classic oder einer der Bibliotheken, die es verwendet. Das Problem tritt nicht auf, wenn watir-wedriver mit Firefox verwendet wird. –
danke Justin, es sieht aus wie du bist richtig. funktioniert gut mit watir-webdriver, also denke ich, es ist nur ein Bug mit watir-classic. – cubesnyc