Class: Appium::Core::Base::Driver
- Inherits:
-
Selenium::WebDriver::Driver
- Object
- Selenium::WebDriver::Driver
- Appium::Core::Base::Driver
- Extended by:
- Forwardable
- Includes:
- HasLocation, HasRemoteStatus, Rotatable, TakesScreenshot, Waitable, Selenium::WebDriver::DriverExtensions::HasSessionId, Selenium::WebDriver::DriverExtensions::UploadsFiles
- Defined in:
- lib/appium_lib_core/common/base/driver.rb,
sig/lib/appium_lib_core/common/base/driver.rbs
Constant Summary collapse
- AVAILABLE_METHODS =
[ :get, :head, :post, :put, :delete, :connect, :options, :trace, :patch ].freeze
Constants included from Rotatable
Instance Attribute Summary collapse
-
#bridge ⇒ Object
readonly
Private API.
Instance Method Summary collapse
-
#activate_app(app_id) ⇒ Hash
Activate(Launch) the specified app.
-
#add_command(method:, url:, name:, &block) { ... } ⇒ Object
Define a new custom method to the driver so that you can define your own method for drivers/plugins in Appium 2.0.
-
#app_installed?(app_id) ⇒ Boolean
Check whether the specified app is installed on the device.
-
#app_state(app_id) ⇒ AppState::STATUS
(also: #query_app_state)
Get the status of an existing application on the device.
-
#app_strings(language = nil) ⇒ Hash
Return the hash of all localization strings.
-
#available_contexts ⇒ Array<String>
All usable contexts, as an array of strings.
-
#back ⇒ String
Get the device window's size.
-
#background_app(duration = 0) ⇒ String
Backgrounds the app for a set number of seconds.
-
#bidi ⇒ ::Selenium::WebDriver::BiDi
Return bidi instance.
- #compare_images(mode: :matchFeatures, first_image:, second_image:, options: nil) ⇒ Object
-
#context=(context = nil) ⇒ Object
(also: #set_context)
Change the context to the given context.
-
#convert_to_element(response_id) ⇒ ::Appium::Core::Element
Convert vanilla element response to ::Appium::Core::Element.
-
#create_bridge(**opts) ⇒ ::Appium::Core::Base::Bridge
Create a proper bridge instance.
-
#current_context ⇒ String
The context currently being used.
-
#device_time(format = nil) ⇒ String
Get the time on the device.
-
#execute_driver(script: '', type: 'webdriverio', timeout_ms: nil) ⇒ Appium::Core::Base::Device::ExecuteDriver::Result
Run a set of script against the current session, allowing execution of many commands in one Appium request.
-
#find_element_by_image(img_path) ⇒ ::Appium::Core::Element
Return an element if current view has a partial image.
-
#find_elements_by_image(img_path) ⇒ Array<::Appium::Core::Element>
Return elements if current view has a partial image.
- #find_image_occurrence(full_image:, partial_image:, visualize: false, threshold: nil, multiple: nil, match_neighbour_threshold: nil) ⇒ Object
- #get_images_similarity(first_image:, second_image:, visualize: false) ⇒ Object
-
#get_settings ⇒ Object
Get appium Settings for current test session.
-
#get_timeouts ⇒ Hash
For W3C.
-
#hide_keyboard(close_key = nil) ⇒ Object
Hide the onscreen keyboard.
-
#ime ⇒ Appium::Core::Base::Driver::DeviceIME
deprecated
Deprecated.
Use 'mobile: shell' extension instead.
-
#ime_activate(ime_name) ⇒ Object
deprecated
Deprecated.
Use 'mobile: shell' extension instead.
-
#ime_activated ⇒ Boolean
deprecated
Deprecated.
Use 'mobile: shell' extension instead.
-
#ime_active_engine ⇒ Object
deprecated
Deprecated.
Use 'mobile: shell' extension instead.
-
#ime_available_engines ⇒ Object
deprecated
Deprecated.
Use 'mobile: shell' extension instead.
-
#ime_deactivate ⇒ Object
deprecated
Deprecated.
Use 'mobile: shell' extension instead.
-
#initialize(bridge: nil, listener: nil, **opts) ⇒ Driver
constructor
override.
-
#install_app(path, **options) ⇒ Object
Install the given app onto the device.
-
#key_action(async: false) ⇒ Object
Perform 'key' actions for W3C module.
-
#keyboard_shown? ⇒ Boolean
(also: #is_keyboard_shown)
Get whether keyboard is displayed or not.
-
#lock(duration = nil) ⇒ String
Lock the device.
-
#locked? ⇒ Boolean
(also: #device_locked?)
Check current device status is weather locked or not.
-
#logs ⇒ Appium::Core::Logs
Get the device window's logs.
-
#long_press_keycode(key, metastate: [], flags: []) ⇒ Object
Long press keycode on the device.
-
#match_images_features(first_image:, second_image:, detector_name: 'ORB', match_func: 'BruteForce', good_matches_factor: nil, visualize: false) ⇒ Object
Image Comparison.
-
#perform_actions(data) ⇒ Object
Send multiple W3C action chains to server.
-
#press_keycode(key, metastate: [], flags: []) ⇒ Object
Press keycode on the device.
-
#pull_file(path) ⇒ Base64-decoded
Pull a file from the remote device.
-
#pull_folder(path) ⇒ Base64-decoded
Pull a folder content from the remote device.
-
#push_file(path, filedata) ⇒ Object
Place a file in a specific location on the device.
- #remove_app(app_id, keep_data: nil, timeout: nil) ⇒ Object
-
#settings ⇒ Object
Returns an instance of DriverSettings to call get/update.
-
#settings=(value) ⇒ Object
(also: #update_settings)
Update Appium Settings for current test session Alias of @driver.settings#update.
-
#shake ⇒ Object
Cause the device to shake.
- #stop_and_save_recording_screen(file_path) ⇒ Object
- #stop_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT') ⇒ Object
-
#terminate_app(app_id, timeout: nil) ⇒ Boolean
Terminate the specified app.
-
#unlock ⇒ Object
Unlock the device.
-
#update_sending_request_to(protocol:, host:, port:, path:) ⇒ nil, untyped
Update
server_urland HTTP clients following this arguments, protocol, host, port and path. -
#window_rect ⇒ Selenium::WebDriver::Rectangle
Get the device window's rect.
-
#window_size ⇒ Selenium::WebDriver::Dimension
Get the device window's size.
-
#within_context(context, &block) ⇒ void
Perform a block within the given context, then switch back to the starting context.
Methods included from Forwardable
def_delegator, def_delegators, def_instance_delegator, def_instance_delegators, def_single_delegator, def_single_delegators
Methods included from Waitable
Methods included from HasLocation
#location, #location=, #set_location
Methods included from HasRemoteStatus
Methods included from _Bridge
#execute, #execute_async_script, #execute_script
Methods included from TakesScreenshot
#element_screenshot_as, #save_element_screenshot, #save_screenshot, #save_viewport_screenshot, #screenshot_as
Methods included from Rotatable
Methods inherited from Selenium::WebDriver::Driver
#add_extensions, #capabilities, #find_element, #find_elements, #manage, #navigate
Constructor Details
#initialize(bridge: nil, listener: nil, **opts) ⇒ Driver
override
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 48 def initialize(bridge: nil, listener: nil, **opts) # rubocop:disable Lint/MissingSuper original_opts = opts.dup # For ::Appium::Core::Waitable @wait_timeout = opts.delete(:wait_timeout) || ::Appium::Core::Wait::DEFAULT_TIMEOUT @wait_interval = opts.delete(:wait_interval) || ::Appium::Core::Wait::DEFAULT_INTERVAL # Selenium WebDriver attributes @devtools = nil @bidi = nil # internal use @has_bidi = false # steep:ignore:start ::Selenium::WebDriver::Remote::Bridge.element_class = ::Appium::Core::Element # steep:ignore:end bridge ||= create_bridge(**opts) add_extensions(bridge.browser) @bridge = listener ? ::Appium::Support::EventFiringBridge.new(bridge, listener, **original_opts) : bridge end |
Instance Attribute Details
#bridge ⇒ Object (readonly)
Private API. Do not use this for general use. Used by flutter driver to get bridge for creating a new element
45 46 47 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 45 def bridge @bridge end |
Instance Method Details
#activate_app(app_id) ⇒ Hash
Activate(Launch) the specified app.
702 703 704 705 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 702 def activate_app(app_id) # TODO: use mobile command in the background? @bridge.activate_app(app_id) end |
#add_command(method:, url:, name:, &block) { ... } ⇒ Object
Define a new custom method to the driver so that you can define your own method for drivers/plugins in Appium 2.0. Appium 2.0 and its custom drivers/plugins allow you to define custom commands that are not part of W3C spec.
Uses Selenium's Bridge.add_command under the hood to register the command
and define the method on the bridge.
213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 213 def add_command(method:, url:, name:, &block) raise ::Appium::Core::Error::ArgumentError, "Available method is either #{AVAILABLE_METHODS}" unless AVAILABLE_METHODS.include? method ::Appium::Logger.info "Overriding the command '#{name}' for '#{url}'" if Bridge.extra_commands&.key?(name) # Use Selenium's Bridge.add_command to register the command and define the method. # When no block is given, create a default implementation that calls execute. block ||= proc { execute(name) } Bridge.add_command(name, method, url, &block) # Ensure the driver delegates the new method to bridge self.class.class_eval { def_delegator :@bridge, name } unless self.class.method_defined?(name) end |
#app_installed?(app_id) ⇒ Boolean
Check whether the specified app is installed on the device
690 691 692 693 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 690 def app_installed?(app_id) # TODO: use mobile command in the background? @bridge.app_installed?(app_id) end |
#app_state(app_id) ⇒ AppState::STATUS Also known as: query_app_state
Get the status of an existing application on the device. State:
:not_installed : The current application state cannot be determined/is unknown
:not_running : The application is not running
:running_in_background_suspended : The application is running in the background and is suspended
:running_in_background : The application is running in the background and is not suspended
:running_in_foreground : The application is running in the foreground
For more details: https://developer.apple.com/documentation/xctest/xcuiapplicationstate
743 744 745 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 743 def app_state(app_id) @bridge.app_state(app_id) end |
#app_strings(language = nil) ⇒ Hash
Return the hash of all localization strings.
612 613 614 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 612 def app_strings(language = nil) @bridge.app_strings(language) end |
#available_contexts ⇒ Array<String>
Returns All usable contexts, as an array of strings.
468 469 470 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 468 def available_contexts @bridge.available_contexts end |
#back ⇒ String
Get the device window's size.
879 880 881 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 879 def back navigate.back end |
#background_app(duration = 0) ⇒ String
Backgrounds the app for a set number of seconds. This is a blocking application
627 628 629 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 627 def background_app(duration = 0) @bridge.background_app(duration) end |
#bidi ⇒ ::Selenium::WebDriver::BiDi
Return bidi instance
1048 1049 1050 1051 1052 1053 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 1048 def bidi return @bridge.bidi if @has_bidi msg = 'BiDi must be enabled by providing webSocketUrl capability to true' raise(::Selenium::WebDriver::Error::WebDriverError, msg) end |
#compare_images(mode: :matchFeatures, first_image:, second_image:, options: nil) ⇒ Object
936 937 938 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 936 def compare_images(mode: :matchFeatures, first_image:, second_image:, options: nil) @bridge.compare_images(mode: mode, first_image: first_image, second_image: second_image, options: ) end |
#context=(context = nil) ⇒ Object Also known as: set_context
Change the context to the given context.
480 481 482 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 480 def context=(context = nil) @bridge.set_context(context) end |
#convert_to_element(response_id) ⇒ ::Appium::Core::Element
Convert vanilla element response to ::Appium::Core::Element
1029 1030 1031 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 1029 def convert_to_element(response_id) @bridge.convert_to_element response_id end |
#create_bridge(**opts) ⇒ ::Appium::Core::Base::Bridge
Create a proper bridge instance.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 76 def create_bridge(**opts) # for a new session request capabilities = opts.delete(:capabilities) bridge_extensions = opts.delete(:bridge_extensions) bridge_opts = { http_client: opts.delete(:http_client), url: opts.delete(:url) } # for attaching to an existing session session_id = opts.delete(:existing_session_id) automation_name = opts.delete(:automation_name) platform_name = opts.delete(:platform_name) raise ::Appium::Core::Error::ArgumentError, "Unable to create a driver with parameters: #{opts}" unless opts.empty? @has_bidi = capabilities && capabilities['webSocketUrl'] ? true : false bridge_clzz = @has_bidi ? ::Appium::Core::Base::BiDiBridge : ::Appium::Core::Base::Bridge # steep:ignore:start bridge = bridge_clzz.new(**bridge_opts) bridge.extend(bridge_extensions) if bridge_extensions # steep:ignore:end if session_id.nil? bridge.create_session(capabilities) else # attach to the existing session id bridge.attach_to(session_id, platform_name, automation_name) end bridge end |
#current_context ⇒ String
Returns The context currently being used.
458 459 460 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 458 def current_context @bridge.current_context end |
#device_time(format = nil) ⇒ String
Get the time on the device
805 806 807 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 805 def device_time(format = nil) @bridge.device_time(format) end |
#execute_driver(script: '', type: 'webdriverio', timeout_ms: nil) ⇒ Appium::Core::Base::Device::ExecuteDriver::Result
Run a set of script against the current session, allowing execution of many commands in one Appium request. Supports WebdriverIO API so far. Please read command API for more details about acceptable scripts and the output.
1015 1016 1017 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 1015 def execute_driver(script: '', type: 'webdriverio', timeout_ms: nil) @bridge.execute_driver(script: script, type: type, timeout_ms: timeout_ms) end |
#find_element_by_image(img_path) ⇒ ::Appium::Core::Element
Return an element if current view has a partial image. The logic depends on template matching by OpenCV. image-comparison
You can handle settings for the comparision following below. device-settings
957 958 959 960 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 957 def find_element_by_image(img_path) template = Base64.strict_encode64 File.read img_path find_element :image, template end |
#find_elements_by_image(img_path) ⇒ Array<::Appium::Core::Element>
Return elements if current view has a partial image. The logic depends on template matching by OpenCV. image-comparison
You can handle settings for the comparision following below. device-settings
980 981 982 983 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 980 def find_elements_by_image(img_path) template = Base64.strict_encode64 File.read img_path find_elements :image, template end |
#find_image_occurrence(full_image:, partial_image:, visualize: false, threshold: nil, multiple: nil, match_neighbour_threshold: nil) ⇒ Object
922 923 924 925 926 927 928 929 930 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 922 def find_image_occurrence(full_image:, partial_image:, visualize: false, threshold: nil, multiple: nil, match_neighbour_threshold: nil) @bridge.find_image_occurrence(full_image: full_image, partial_image: partial_image, visualize: visualize, threshold: threshold, multiple: multiple, match_neighbour_threshold: match_neighbour_threshold) end |
#get_images_similarity(first_image:, second_image:, visualize: false) ⇒ Object
932 933 934 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 932 def get_images_similarity(first_image:, second_image:, visualize: false) @bridge.get_images_similarity(first_image: first_image, second_image: second_image, visualize: visualize) end |
#get_settings ⇒ Object
Get appium Settings for current test session. Alias of @driver.settings.get
335 336 337 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 335 def get_settings settings.get end |
#get_timeouts ⇒ Hash
For W3C. Get the timeout related settings on the server side.
903 904 905 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 903 def get_timeouts @bridge.get_timeouts end |
#hide_keyboard(close_key = nil) ⇒ Object
Hide the onscreen keyboard
300 301 302 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 300 def hide_keyboard(close_key = nil) @bridge.hide_keyboard close_key end |
#ime ⇒ Appium::Core::Base::Driver::DeviceIME
Use 'mobile: shell' extension instead.
Returns an instance of DeviceIME
368 369 370 371 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 368 def ime ::Appium::Logger.warn "[DEPRECATION] Please use 'mobile: shell' extension instead" @ime ||= DeviceIME.new(@bridge) end |
#ime_activate(ime_name) ⇒ Object
Use 'mobile: shell' extension instead.
Android only. Make an engine that is available active.
383 384 385 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 383 def ime_activate(ime_name) ime.activate(ime_name) end |
#ime_activated ⇒ Boolean
Use 'mobile: shell' extension instead.
422 423 424 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 422 def ime_activated ime.activated? end |
#ime_active_engine ⇒ Object
Use 'mobile: shell' extension instead.
Android only. Get the name of the active IME engine.
407 408 409 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 407 def ime_active_engine ime.active_engine end |
#ime_available_engines ⇒ Object
Use 'mobile: shell' extension instead.
Android only. List all available input engines on the machine.
395 396 397 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 395 def ime_available_engines ime.available_engines end |
#ime_deactivate ⇒ Object
Use 'mobile: shell' extension instead.
Android only. De-activates the currently-active IME engine.
434 435 436 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 434 def ime_deactivate ime.deactivate end |
#install_app(path, **options) ⇒ Object
Install the given app onto the device. Each options can be snake-case or camel-case. Snake-cases will be converted to camel-case as options value.
Other parameters such as https://github.com/appium/appium-xcuitest-driver#mobile-installapp also can be set. Then, arguments in snake case will be camel case as its request parameters.
657 658 659 660 661 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 657 def install_app(path, **) # TODO: use mobile command in the background? = .transform_keys { |key| key.to_s.gsub(/_./) { |v| v[1]&.upcase } } unless .nil? @bridge.install_app(path, ) end |
#key_action(async: false) ⇒ Object
Perform 'key' actions for W3C module.
Generate key pointer action here and users can use this via driver.key_action
- https://www.selenium.dev/selenium/docs/api/rb/Selenium/WebDriver/ActionBuilder.html
- https://www.selenium.dev/selenium/docs/api/rb/Selenium/WebDriver/KeyActions.html
The pointer type is 'key' by default in the Appium Ruby client.
driver.action in Appium Ruby client has 'pointer' action by default.
This method is a shortcut to set 'key' type.
Hense this method is equal to driver.action(devices: [::Selenium::WebDriver::Interactions.key('keyboard')])
as below example.
247 248 249 250 251 252 253 254 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 247 def key_action(async: false) @bridge.action( async: async, # steep:ignore:start devices: [::Selenium::WebDriver::Interactions.key('keyboard')] # steep:ignore:end ) end |
#keyboard_shown? ⇒ Boolean Also known as: is_keyboard_shown
Get whether keyboard is displayed or not.
311 312 313 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 311 def keyboard_shown? @bridge.is_keyboard_shown end |
#lock(duration = nil) ⇒ String
Lock the device
265 266 267 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 265 def lock(duration = nil) @bridge.lock(duration) end |
#locked? ⇒ Boolean Also known as: device_locked?
Check current device status is weather locked or not
276 277 278 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 276 def locked? @bridge.device_locked? end |
#logs ⇒ Appium::Core::Logs
Get the device window's logs.
891 892 893 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 891 def logs @logs ||= Logs.new(@bridge) end |
#long_press_keycode(key, metastate: [], flags: []) ⇒ Object
Long press keycode on the device. http://developer.android.com/reference/android/view/KeyEvent.html
601 602 603 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 601 def long_press_keycode(key, metastate: [], flags: []) @bridge.long_press_keycode(key, metastate: , flags: flags) end |
#match_images_features(first_image:, second_image:, detector_name: 'ORB', match_func: 'BruteForce', good_matches_factor: nil, visualize: false) ⇒ Object
Image Comparison
908 909 910 911 912 913 914 915 916 917 918 919 920 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 908 def match_images_features(first_image:, second_image:, detector_name: 'ORB', match_func: 'BruteForce', good_matches_factor: nil, visualize: false) @bridge.match_images_features(first_image: first_image, second_image: second_image, detector_name: detector_name, match_func: match_func, good_matches_factor: good_matches_factor, visualize: visualize) end |
#perform_actions(data) ⇒ Object
Send multiple W3C action chains to server. Use @driver.action for single action chain.
@example: Zoom
f1 = ::Selenium::WebDriver::Interactions.pointer(:touch, name: 'finger1')
f1.create_pointer_move(duration: 1, x: 200, y: 500,
origin: ::Selenium::WebDriver::Interactions::PointerMove::VIEWPORT)
f1.create_pointer_down(:left)
f1.create_pointer_move(duration: 1, x: 200, y: 200,
origin: ::Selenium::WebDriver::Interactions::PointerMove::VIEWPORT)
f1.create_pointer_up(:left)
f2 = ::Selenium::WebDriver::Interactions.pointer(:touch, name: 'finger2')
f2.create_pointer_move(duration: 1, x: 200, y: 500,
origin: ::Selenium::WebDriver::Interactions::PointerMove::VIEWPORT)
f2.create_pointer_down(:left)
f2.create_pointer_move(duration: 1, x: 200, y: 800,
origin: ::Selenium::WebDriver::Interactions::PointerMove::VIEWPORT)
f2.create_pointer_up(:left)
@driver.perform_actions [f1, f2] #=> 'nil' if the action succeed
835 836 837 838 839 840 841 842 843 844 845 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 835 def perform_actions(data) raise ::Appium::Core::Error::ArgumentError, "'#{data}' must be Array" unless data.is_a? Array # NOTE: 'add_input' in Selenium Ruby implementation has additional 'pause'. # This implementation is to avoid the additional pause. # https://github.com/SeleniumHQ/selenium/blob/64447d4b03f6986337d1ca8d8b6476653570bcc1/rb/lib/selenium/webdriver/common/action_builder.rb#L207 @bridge.send_actions data.map(&:encode).compact data.each(&:clear_actions) nil end |
#press_keycode(key, metastate: [], flags: []) ⇒ Object
Press keycode on the device. http://developer.android.com/reference/android/view/KeyEvent.html
579 580 581 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 579 def press_keycode(key, metastate: [], flags: []) @bridge.press_keycode(key, metastate: , flags: flags) end |
#pull_file(path) ⇒ Base64-decoded
Pull a file from the remote device. On Android the application under test should be built with debuggable flag enabled in order to get access to its container on the internal file system.
530 531 532 533 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 530 def pull_file(path) # TODO: use 'mobile: pullFile' internally @bridge.pull_file(path) end |
#pull_folder(path) ⇒ Base64-decoded
Pull a folder content from the remote device. On Android the application under test should be built with debuggable flag enabled in order to get access to its container on the internal file system.
556 557 558 559 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 556 def pull_folder(path) # TODO: use 'mobile: pullFolder' internally @bridge.pull_folder(path) end |
#push_file(path, filedata) ⇒ Object
Place a file in a specific location on the device. On Android, the application under test should be built with debuggable flag enabled in order to get access to its container on the internal file system.
501 502 503 504 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 501 def push_file(path, filedata) # TODO: use 'mobile: pushFile' internally @bridge.push_file(path, filedata) end |
#remove_app(app_id, keep_data: nil, timeout: nil) ⇒ Object
678 679 680 681 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 678 def remove_app(app_id, keep_data: nil, timeout: nil) # TODO: use mobile command in the background? @bridge.remove_app(app_id, keep_data: keep_data, timeout: timeout) end |
#settings ⇒ Object
Returns an instance of DriverSettings to call get/update.
323 324 325 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 323 def settings @settings ||= DriverSettings.new(@bridge) end |
#settings=(value) ⇒ Object Also known as: update_settings
Update Appium Settings for current test session Alias of @driver.settings#update
350 351 352 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 350 def settings=(value) settings.update(value) end |
#shake ⇒ Object
Cause the device to shake
789 790 791 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 789 def shake @bridge.shake end |
#stop_and_save_recording_screen(file_path) ⇒ Object
779 780 781 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 779 def stop_and_save_recording_screen(file_path) @bridge.stop_and_save_recording_screen(file_path) end |
#stop_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT') ⇒ Object
763 764 765 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 763 def stop_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT') @bridge.stop_recording_screen(remote_path: remote_path, user: user, pass: pass, method: method) end |
#terminate_app(app_id, timeout: nil) ⇒ Boolean
Terminate the specified app.
719 720 721 722 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 719 def terminate_app(app_id, timeout: nil) # TODO: use mobile command in the background? @bridge.terminate_app(app_id, timeout: timeout) end |
#unlock ⇒ Object
Unlock the device
287 288 289 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 287 def unlock @bridge.unlock end |
#update_sending_request_to(protocol:, host:, port:, path:) ⇒ nil, untyped
Update server_url and HTTP clients following this arguments, protocol, host, port and path.
After this method, @bridge.http will be a new instance following them instead of server_url which is
set before creating session.
If @bridge.http did not have update_sending_request_to method, this method returns immediately.
119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 119 def update_sending_request_to(protocol:, host:, port:, path:) unless @bridge.http&.class&.method_defined? :update_sending_request_to ::Appium::Logger.warn "#{@bridge.http&.class} has no 'update_sending_request_to'. " \ 'It keeps current connection target.' return end @bridge.http&.update_sending_request_to(scheme: protocol, host: host, port: port, path: path) end |
#window_rect ⇒ Selenium::WebDriver::Rectangle
Get the device window's rect.
869 870 871 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 869 def window_rect manage.window.rect end |
#window_size ⇒ Selenium::WebDriver::Dimension
Get the device window's size.
855 856 857 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 855 def window_size manage.window.size end |
#within_context(context, &block) ⇒ void
This method returns an undefined value.
Perform a block within the given context, then switch back to the starting context.
448 449 450 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 448 def within_context(context, &block) block_given? ? @bridge.within_context(context, &block) : @bridge.within_context(context) end |