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