lib/appium_lib/driver.rb in appium_lib-0.6.0 vs lib/appium_lib/driver.rb in appium_lib-0.6.1
- old
+ new
@@ -113,10 +113,48 @@
require 'android/patch'
require 'android/element/alert'
require 'android/element/generic'
require 'android/element/textfield'
+ ##
+ # Promote appium methods to class instance methods
+ #
+ # @param class_array [Array<Class>] An array of classes
+ #
+ # To promote methods to all classes:
+ #
+ # ```ruby
+ # Appium.promote_appium_methods Object
+ # ```
+
+ def self.promote_appium_methods class_array
+ raise 'Driver is nil' if $driver.nil?
+ # Wrap single class into an array
+ class_array = [class_array] unless class_array.class == Array
+ # Promote Appium driver methods to class instance methods.
+ class_array.each do |klass|
+ $driver.public_methods(false).each do |m|
+ klass.class_eval do
+ define_method m do |*args, &block|
+ begin
+ # Prefer existing method.
+ # super will invoke method missing on driver
+ super(*args, &block)
+ # minitest also defines a name method,
+ # so rescue argument error
+ # and call the name method on $driver
+ rescue NoMethodError, ArgumentError
+ # puts "[Object.class_eval] '#{m}' not on super"
+ $driver.send m, *args, &block if $driver.respond_to?(m)
+ end
+ end
+ end
+ end
+ end
+ nil # return nil
+ end
+
class Driver
@@loaded = false
attr_reader :default_wait, :app_path, :app_name, :device,
:app_package, :app_activity, :app_wait_activity,
@@ -218,29 +256,11 @@
# 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.
- $driver.public_methods(false).each do | m |
- # not MiniTest::Spec
- ::Minitest::Spec.class_eval do
- define_method m do | *args, &block |
- begin
- # puts "[Object.class_eval] Calling super for '#{m}'"
- # prefer existing method.
- # super will invoke method missing on driver
- super(*args, &block)
- # minitest also defines a name method,
- # so rescue argument error
- # and call the name method on $driver
- rescue NoMethodError, ArgumentError
- # puts "[Object.class_eval] '#{m}' not on super"
- $driver.send m, *args, &block if $driver.respond_to?(m)
- end
- end
- end
- end
+ # Promote only on Minitest::Spec (minitest 5) by default
+ Appium.promote_appium_methods ::Minitest::Spec
end
self # return newly created driver
end # def initialize