2013-03-03 10 views
6

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?

+1

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. –

+0

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

Antwort

0

Nicht wirklich sicher, aber hier ist eine Schaukel mit Threads.

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 
Verwandte Themen