2013-03-03 25 views
6

Tôi có một số lớp được viết để chi phối cách tôi muốn xử lý một số trang web, với các phương thức tương tự trong cả hai (ví dụ: đăng nhập, làm mới). Mỗi lớp sẽ mở ra cá thể trình duyệt WATIR của riêng nó.Chủ đề Ruby với Watir

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

một mẫu mã trong chính không có chủ đề là như sau

require 'watir' 
require_relative 'site1' 

agents = [] 
agents << Site1.new 

agents.each{ |agent| 
    agent.login 
} 

này hoạt động tốt, nhưng doesnt chuyển sang đại lý tiếp theo cho đến khi hiện tại đã hoàn thành việc đăng nhập. Tôi muốn để kết hợp đa luồng để xử lý điều này, nhưng không thể dường như làm cho nó hoạt động.

require 'watir' 
require_relative 'site1' 

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


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

threads.each { |t| t.join } 

điều này cho tôi lỗi: không xác định thuộc tính hoặc phương pháp: navigate. Mã lỗi HRESULT: 0x8001010e. Ứng dụng này được gọi là một giao diện được sắp xếp theo một chủ đề khác.

có ai biết cách sửa lỗi này hoặc cách triển khai chức năng tương tự không?

+1

Dường như đó là lỗi trong watir-classic hoặc một trong các thư viện mà nó sử dụng. Vấn đề không xảy ra khi sử dụng watir-wedriver với firefox. –

+0

cảm ơn bạn, có vẻ như bạn đúng. hoạt động tốt với watir-webdriver vì vậy tôi đoán nó chỉ là một lỗi với watir-classic. – cubesnyc

Trả lời

0

Không thực sự chắc chắn về điều này, nhưng đây là một swing sử dụng chủ đề.

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