Class: Autospec::DriverHelper
- Inherits:
-
Object
- Object
- Autospec::DriverHelper
- Defined in:
- lib/autospec/driver_helper.rb
Constant Summary collapse
- LOCAL_DRIVERS =
[:firefox]
Instance Attribute Summary collapse
-
#driver_to_use ⇒ Object
Returns the value of attribute driver_to_use.
-
#pass ⇒ Object
Returns the value of attribute pass.
-
#sauce_config ⇒ Object
Returns the value of attribute sauce_config.
-
#user ⇒ Object
Returns the value of attribute user.
Instance Method Summary collapse
- #driver ⇒ Object
-
#initialize(sauce_config) ⇒ DriverHelper
constructor
A new instance of DriverHelper.
-
#set_sauce_session_name(new_name) ⇒ Object
update session name on saucelabs.
Constructor Details
#initialize(sauce_config) ⇒ DriverHelper
Returns a new instance of DriverHelper.
8 9 10 |
# File 'lib/autospec/driver_helper.rb', line 8 def initialize(sauce_config) self.sauce_config = sauce_config end |
Instance Attribute Details
#driver_to_use ⇒ Object
Returns the value of attribute driver_to_use.
5 6 7 |
# File 'lib/autospec/driver_helper.rb', line 5 def driver_to_use @driver_to_use end |
#pass ⇒ Object
Returns the value of attribute pass.
5 6 7 |
# File 'lib/autospec/driver_helper.rb', line 5 def pass @pass end |
#sauce_config ⇒ Object
Returns the value of attribute sauce_config.
6 7 8 |
# File 'lib/autospec/driver_helper.rb', line 6 def sauce_config @sauce_config end |
#user ⇒ Object
Returns the value of attribute user.
5 6 7 |
# File 'lib/autospec/driver_helper.rb', line 5 def user @user end |
Instance Method Details
#driver ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/autospec/driver_helper.rb', line 12 def driver # Local drivers registration LOCAL_DRIVERS.each do |driver| Capybara.register_driver driver do |app| Capybara::Selenium::Driver.new(app, :browser => driver) end end if ENV['r_driver'].nil? # set default_driver to a local firefox driver_to_use = 'firefox' else # cmd_r_driver may be 'chrome' or ['saucelabs', 'phu', 'win7_ff34'], etc cmd_r_driver = ENV['r_driver'].split(':') # Remote driver registration # Retrieve hub url, user credentials and browser info from saucelabs.yml if ENV['r_driver'].include?('saucelabs') remote_driver_yaml = self.sauce_config remote_capabilities = Selenium::WebDriver::Remote::Capabilities.new overrides_hash = remote_driver_yaml['overrides'] if cmd_r_driver[1].nil? # set default self.user = remote_driver_yaml['hub']['user'] self.pass = remote_driver_yaml['hub']['pass'] remote_capabilities = { 'browserName' => 'firefox', 'version' => '34', 'platform' => 'Windows 7' } else # set by overrides self.user = overrides_hash[cmd_r_driver[1]]['hub']['user'] self.pass = overrides_hash[cmd_r_driver[1]]['hub']['pass'] remote_capabilities = overrides_hash[cmd_r_driver[2]]['capabilities'] end Autospec.logger.debug "remote_capabilities: #{remote_capabilities}" = { :browser => :remote, :url => "http://#{self.user}:#{self.pass}@ondemand.saucelabs.com/wd/hub", :desired_capabilities => remote_capabilities } Capybara.register_driver :saucelabs do |app| Capybara::Selenium::Driver.new(app, ) end end # set default_driver to a local browser or saucelabs driver_to_use = cmd_r_driver[0] end driver_to_use end |
#set_sauce_session_name(new_name) ⇒ Object
update session name on saucelabs
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/autospec/driver_helper.rb', line 69 def set_sauce_session_name(new_name) = "started by #{self.user}" require 'json' # current session is a wrapper of Capybara::Selenium::Driver, # Capybara::Selenium::Driver instantiates a browser from Selenium::Webdriver # then bridge is a private method in Selenium::Webdriver::Driver bridge = Capybara.current_session.driver.browser.send :bridge session_id = bridge.session_id Autospec.logger.debug "bridge session_id: #{session_id}" http_auth = "https://#{self.user}:#{self.pass}@saucelabs.com/rest/v1/#{self.user}/jobs/#{session_id}" # to_json need to: require "active_support/core_ext", but will mess up the whole framework, require 'json' in this method solved it body = {"name" => new_name, "tags" => []}.to_json # gem 'rest-client' Autospec.logger.debug "About to send request to saucelabs with url as #{http_auth} and body as #{body}" RestClient.put(http_auth, body, {:content_type => "application/json"}) end |