2013-03-03 13 views
6

私はいくつかのクラスを書いています。私はいくつかのWebサイトを扱いたいと思っています。両方の方法が同じです(ログイン、リフレッシュ)。各クラスは、独自のWATIRブラウザインスタンスを開きます。私は希望RubyスレッドとWatir

require 'watir' 
require_relative 'site1' 

agents = [] 
agents << Site1.new 

agents.each{ |agent| 
    agent.login 
} 

これはうまく動作しますが、現在の1がログイン完了するまで次のエージェントに移動doesntのを次のように

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

いないスレッドを持つメインのコードのサンプルがあります。これを処理するマルチスレッドを組み込むことはできますが、動作させることはできません。

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やそれが使用するライブラリのバグのようです。この問題は、firefoxでwatir-wedriverを使用しているときには発生しません。 –

+0

ジャスティンに感謝、それはあなたのように見えます。 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 
関連する問題