Ruby Threads with Watir

6

I have several classes written that govern how I want to handle several websites, with similar methods in both (ie. login, refresh). Each class opens up its own WATIR browser instance.

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

a sample of code in the main with no threads is as follows

require 'watir'
require_relative 'site1'

agents = []
agents << Site1.new

agents.each{ |agent|
     agent.login
}

This works fine, but doesnt move onto the next agent until the current one has finished logging in. I would like to incorporate multithreading to handle this, but cant seem to get it to work.

require 'watir'
require_relative 'site1'

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


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

threads.each { |t| t.join }

this gives me the error: unknown property or method: navigate. HRESULT error code:0x8001010e. The application called an interface that was marshalled for a different thread.

does anyone know how to fix this, or how to implement a similar functionality?

ruby
multithreading
watir
asked on Stack Overflow Mar 3, 2013 by cubesnyc • edited Mar 4, 2013 by cubesnyc

1 Answer

0

Not really sure on this, but here is a swing using 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
answered on Stack Overflow Sep 18, 2013 by Singularity

User contributions licensed under CC BY-SA 3.0