lib/watirgrid.rb in watirgrid-1.1.1 vs lib/watirgrid.rb in watirgrid-1.1.2

- old
+ new

@@ -8,11 +8,11 @@ # Extend Watir with a Grid class which # implements a grid of browsers by connecting to a tuplespace # and instatiating remote browser objects on nominated providers. class Grid - attr_accessor :drb_server_uri, :ring_server, :browsers, :tuples + attr_accessor :drb_server_uri, :ring_server, :browsers, :tuples, :providers def initialize(params = {}) @drb_server_host = params[:drb_server_host] || external_interface @drb_server_port = params[:drb_server_port] || 0 @controller_uri = params[:controller_uri] @@ -21,21 +21,23 @@ @renewer = params[:renewer] || Rinda::SimpleRenewer.new logfile = params[:logfile] || STDOUT @log = Logger.new(logfile, 'daily') @log.level = params[:loglevel] || Logger::ERROR @log.datetime_format = "%Y-%m-%d %H:%M:%S " - + @webdriver_browser_type = params[:browser].to_sym if params[:browser] @browsers = [] @tuples = [] + @providers = [] end ## # Start required services def start(params = {}) start_drb_server find_ring_server(params) get_tuples(params) + setup if params[:initiate] end ## # Return the size (quantity) of browsers started on the grid def size @@ -44,9 +46,30 @@ ## # Write tuple back to tuplespace when finished using it def release_tuples @tuples.each { |tuple| @ring_server.write(tuple) } + end + + ## + # Instantiate new browser object on each of the remote providers + def setup + @browsers.each_with_index do |browser, index| + sleep 0.15 + @providers[index] ||= browser[:object].new_browser(@webdriver_browser_type) + end + end + + ## + # Iterate with a block over each of the remote providers + def iterate &block + threads = [] + @providers.each do |browser| + threads << Thread.new do + yield browser + end + end + threads.each {|thread| thread.join} end ## # This is a helper method to control a grid. def self.control(params = {}, &block)