lib/appium_lib/driver.rb in appium_lib-0.3.3 vs lib/appium_lib/driver.rb in appium_lib-0.3.4

- old
+ new

@@ -35,36 +35,46 @@ @@loaded = false attr_reader :app_path, :app_name, :app_package, :app_activity, :app_wait_activity, :sauce_username, :sauce_access_key, :port, :os, :ios_js - def initialize opts={} + def initialize options={} + # quit last driver + $driver.driver_quit if $driver + + opts = {} + # convert to downcased symbols + options.each_pair { |k,v| opts[k.to_s.downcase.strip.intern] = v } + opts = {} if opts.nil? # Path to the .apk, .app or .app.zip. # The path can be local or remote for Sauce. - @app_path = opts.fetch 'APP_PATH', ENV['APP_PATH'] + @app_path = opts.fetch :app_path, ENV['APP_PATH'] raise 'APP_PATH must be set.' if @app_path.nil? # The name to use for the test run on Sauce. - @app_name = opts.fetch 'APP_NAME', ENV['APP_NAME'] + @app_name = opts.fetch :app_name, ENV['APP_NAME'] + # If key or env is defined, use selendroid else nil + @selendroid = opts.key?(:selendroid) || ENV['SELENDROID'] ? 'selendroid' : nil + # Android app package - @app_package = opts.fetch 'APP_PACKAGE', ENV['APP_PACKAGE'] + @app_package = opts.fetch :app_package, ENV['APP_PACKAGE'] # Android app starting activity. - @app_activity = opts.fetch 'APP_ACTIVITY', ENV['APP_ACTIVITY'] + @app_activity = opts.fetch :app_activity, ENV['APP_ACTIVITY'] # Android app waiting activity - @app_wait_activity = opts.fetch 'APP_WAIT_ACTIVITY', ENV['APP_WAIT_ACTIVITY'] + @app_wait_activity = opts.fetch :app_wait_activity, ENV['APP_WAIT_ACTIVITY'] # Sauce Username - @sauce_username = opts.fetch'SAUCE_USERNAME', ENV['SAUCE_USERNAME'] + @sauce_username = opts.fetch :sauce_username, ENV['SAUCE_USERNAME'] # Sauce Key - @sauce_access_key = opts.fetch 'SAUCE_ACCESS_KEY', ENV['SAUCE_ACCESS_KEY'] + @sauce_access_key = opts.fetch :sauce_access_key, ENV['SAUCE_ACCESS_KEY'] - @port = opts.fetch 'PORT', ENV['PORT'] || 4723 + @port = opts.fetch :port, ENV['PORT'] || 4723 @os = :ios @os = :android if @app_path.end_with?('.apk') || @app_path.end_with?('.apk.zip') puts "OS is: #{@os}" if defined?(Pry) @@ -79,22 +89,28 @@ @ios_js = [] # used to keep track of loaded JavaScript on iOS # load iOS specific methods extend Appium::Ios end + # apply os specific patches + patch_webdriver_element + + # enable debug patch + patch_webdriver_bridge if opts.fetch :debug, defined?(Pry) + # Save global reference to last created Appium driver for top level methods. - $last_driver = self + $driver = self # Promote exactly once the first time the driver is created. # Subsequent drivers do not trigger promotion. unless @@loaded @@loaded = true # Promote Appium driver methods to Object instance methods. - $last_driver.public_methods(false).each do | m | + $driver.public_methods(false).each do | m | Object.class_eval do define_method m do | *args, &block | - $last_driver.send m, *args, &block + $driver.send m, *args, &block end end end end end # def initialize @@ -104,10 +120,10 @@ def android_capabilities { browserName: 'Android', platform: 'LINUX', version: '4.1', - device: 'Android', + device: @selendroid || 'Android', name: @app_name || 'Ruby Console Android Appium', app: absolute_app_path, :'app-package' => @app_package, :'app-activity' => @app_activity, :'app-wait-activity' => @app_wait_activity || @app_activity \ No newline at end of file