Class: Appium::Core::Base::Driver
- Inherits:
-
Selenium::WebDriver::Driver
- Object
- Selenium::WebDriver::Driver
- Appium::Core::Base::Driver
- Includes:
- SearchContext, TakeScreenshot, Selenium::WebDriver::DriverExtensions::HasRemoteStatus, Selenium::WebDriver::DriverExtensions::HasSessionId, Selenium::WebDriver::DriverExtensions::HasWebStorage, Selenium::WebDriver::DriverExtensions::Rotatable, Selenium::WebDriver::DriverExtensions::UploadsFiles
- Defined in:
- lib/appium_lib_core/common/base/driver.rb
Constant Summary
Constants included from SearchContext
Instance Method Summary collapse
-
#activate_app(app_id) ⇒ Hash
Activate(Launch) the specified app.
-
#app_installed?(app_id) ⇒ Boolean
Check whether the specified app is installed on the device.
-
#app_state(app_id) ⇒ AppState::STATUS
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.
-
#close_app ⇒ Object
Close an app on device.
- #compare_images(mode: :matchFeatures, first_image:, second_image:, options: nil) ⇒ Object
-
#context=(context = null) ⇒ Object
(also: #set_context)
Change the context to the given context.
-
#current_context ⇒ String
The context currently being used.
-
#device_locked? ⇒ Boolean
Check current device status is weather locked or not.
-
#device_time(format = nil) ⇒ String
Get the time on the device.
-
#dialect ⇒ :oss|:w3c
Get the dialect value.
-
#find_element_by_image(img_path) ⇒ ::Selenium::WebDriver::Element
Return an element if current view has a partial image.
-
#find_elements_by_image(img_path) ⇒ ::Selenium::WebDriver::Element
Return elements if current view has a partial image.
- #find_image_occurrence(full_image:, partial_image:, visualize: false, 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, strategy = nil) ⇒ Object
Hide the onscreen keyboard.
-
#ime_activate(ime_name) ⇒ Object
Android only.
- #ime_activated ⇒ Object
-
#ime_active_engine ⇒ Object
Android only.
-
#ime_available_engines ⇒ Object
Android only.
-
#ime_deactivate ⇒ Object
Android only.
-
#initialize(opts = {}) ⇒ Driver
constructor
A new instance of Driver.
-
#install_app(path, replace: nil, timeout: nil, allow_test_packages: nil, use_sdcard: nil, grant_permissions: nil) ⇒ Object
Install the given app onto the device.
-
#keyboard_shown? ⇒ Boolean
(also: #is_keyboard_shown)
Get whether keyboard is displayed or not.
-
#keyevent(key, metastate = nil) ⇒ Object
Send keyevent on the device.(Only for Selendroid) developer.android.com/reference/android/view/KeyEvent.html.
-
#launch_app ⇒ Object
Start the simulator and application configured with desired capabilities.
-
#lock(duration = nil) ⇒ String
Lock the device.
-
#logs ⇒ String
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.
- #multi_touch(actions) ⇒ Object
-
#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 simulator/device.
-
#pull_folder(path) ⇒ Base64-decoded
Pull a folder content from the simulator/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
-
#replace_value(element, *value) ⇒ Object
Replace the value to element directly.
-
#reset ⇒ Object
Reset the device, relaunching the application.
-
#send_keys(*key) ⇒ Object
(also: #type)
- DEPRECATION
-
Send keys for a current active element.
-
#session_capabilities ⇒ Selenium::WebDriver::Remote::Capabilities
Retrieve the capabilities of the specified session.
-
#set_immediate_value(element, *value) ⇒ Object
Set the value to element directly.
-
#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
-
#switch_to_default_context ⇒ Object
Change to the default context.
-
#terminate_app(app_id, timeout: nil) ⇒ Boolean
Terminate the specified app.
-
#touch_actions(actions) ⇒ Object
touch actions.
-
#unlock ⇒ Object
Unlock the device.
-
#update_settings(settings) ⇒ Object
Update Appium Settings for current test session.
-
#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) ⇒ Object
Perform a block within the given context, then switch back to the starting context.
Methods included from TakeScreenshot
#element_screenshot_as, #save_element_screenshot, #save_screenshot, #save_viewport_screenshot, #screenshot_as
Methods included from SearchContext
Constructor Details
#initialize(opts = {}) ⇒ Driver
Returns a new instance of Driver.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 18 def initialize(opts = {}) listener = opts.delete(:listener) @bridge = ::Appium::Core::Base::Bridge.handshake(opts) if @bridge.dialect == :oss # MJSONWP extend ::Selenium::WebDriver::DriverExtensions::HasTouchScreen extend ::Selenium::WebDriver::DriverExtensions::HasLocation extend ::Selenium::WebDriver::DriverExtensions::HasNetworkConnection elsif @bridge.dialect == :w3c # TODO: Only for Appium. Ideally, we'd like to remove the below like selenium-webdriver extend ::Selenium::WebDriver::DriverExtensions::HasTouchScreen extend ::Selenium::WebDriver::DriverExtensions::HasLocation extend ::Selenium::WebDriver::DriverExtensions::HasNetworkConnection end super(@bridge, listener: listener) end |
Instance Method Details
#activate_app(app_id) ⇒ Hash
Activate(Launch) the specified app.
524 525 526 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 524 def activate_app(app_id) @bridge.activate_app(app_id) end |
#app_installed?(app_id) ⇒ Boolean
Check whether the specified app is installed on the device
513 514 515 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 513 def app_installed?(app_id) @bridge.app_installed?(app_id) end |
#app_state(app_id) ⇒ AppState::STATUS
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: developer.apple.com/documentation/xctest/xcuiapplicationstate
561 562 563 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 561 def app_state(app_id) @bridge.app_state(app_id) end |
#app_strings(language = nil) ⇒ Hash
Return the hash of all localization strings.
439 440 441 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 439 def app_strings(language = nil) @bridge.app_strings(language) end |
#available_contexts ⇒ Array<String>
Returns All usable contexts, as an array of strings.
230 231 232 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 230 def available_contexts @bridge.available_contexts end |
#back ⇒ String
Get the device window’s size.
701 702 703 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 701 def back navigate.back end |
#background_app(duration = 0) ⇒ String
Backgrounds the app for a set number of seconds. This is a blocking application
454 455 456 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 454 def background_app(duration = 0) @bridge.background_app(duration) end |
#close_app ⇒ Object
Close an app on device
418 419 420 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 418 def close_app @bridge.close_app end |
#compare_images(mode: :matchFeatures, first_image:, second_image:, options: nil) ⇒ Object
844 845 846 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 844 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 = null) ⇒ Object Also known as: set_context
Change the context to the given context.
242 243 244 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 242 def context=(context = null) @bridge.set_context(context) end |
#current_context ⇒ String
Returns The context currently being used.
220 221 222 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 220 def current_context @bridge.current_context end |
#device_locked? ⇒ Boolean
Check current device status is weather locked or not
61 62 63 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 61 def device_locked? @bridge.device_locked? end |
#device_time(format = nil) ⇒ String
Get the time on the device
622 623 624 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 622 def device_time(format = nil) @bridge.device_time(format) end |
#dialect ⇒ :oss|:w3c
Get the dialect value
36 37 38 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 36 def dialect @bridge.dialect end |
#find_element_by_image(img_path) ⇒ ::Selenium::WebDriver::Element
Return an element if current view has a partial image. The logic depends on template matching by OpenCV. You can handle settings for the comparision following below.
864 865 866 867 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 864 def find_element_by_image(img_path) template = Base64.encode64 File.read img_path find_element :image, template end |
#find_elements_by_image(img_path) ⇒ ::Selenium::WebDriver::Element
Return elements if current view has a partial image. The logic depends on template matching by OpenCV. You can handle settings for the comparision following below.
886 887 888 889 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 886 def find_elements_by_image(img_path) template = Base64.encode64 File.read img_path find_elements :image, template end |
#find_image_occurrence(full_image:, partial_image:, visualize: false, threshold: nil) ⇒ Object
833 834 835 836 837 838 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 833 def find_image_occurrence(full_image:, partial_image:, visualize: false, threshold: nil) @bridge.find_image_occurrence(full_image: full_image, partial_image: partial_image, visualize: visualize, threshold: threshold) end |
#get_images_similarity(first_image:, second_image:, visualize: false) ⇒ Object
840 841 842 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 840 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
124 125 126 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 124 def get_settings @bridge.get_settings end |
#get_timeouts ⇒ Hash
For W3C. Get the timeout related settings on the server side.
725 726 727 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 725 def get_timeouts @bridge.get_timeouts end |
#hide_keyboard(close_key = nil, strategy = nil) ⇒ Object
Hide the onscreen keyboard
88 89 90 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 88 def hide_keyboard(close_key = nil, strategy = nil) @bridge.hide_keyboard close_key, strategy end |
#ime_activate(ime_name) ⇒ Object
Android only. Make an engine that is available active.
146 147 148 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 146 def ime_activate(ime_name) @bridge.ime_activate(ime_name) end |
#ime_activated ⇒ Object
177 178 179 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 177 def ime_activated @bridge.ime_activated end |
#ime_active_engine ⇒ Object
Android only. Get the name of the active IME engine.
166 167 168 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 166 def ime_active_engine @bridge.ime_active_engine end |
#ime_available_engines ⇒ Object
Android only. List all available input engines on the machine.
156 157 158 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 156 def ime_available_engines @bridge.ime_available_engines end |
#ime_deactivate ⇒ Object
Android only. De-activates the currently-active IME engine.
187 188 189 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 187 def ime_deactivate @bridge.ime_deactivate end |
#install_app(path, replace: nil, timeout: nil, allow_test_packages: nil, use_sdcard: nil, grant_permissions: nil) ⇒ Object
Install the given app onto the device
478 479 480 481 482 483 484 485 486 487 488 489 490 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 478 def install_app(path, replace: nil, timeout: nil, allow_test_packages: nil, use_sdcard: nil, grant_permissions: nil) @bridge.install_app(path, replace: replace, timeout: timeout, allow_test_packages: allow_test_packages, use_sdcard: use_sdcard, grant_permissions: ) end |
#keyboard_shown? ⇒ Boolean Also known as: is_keyboard_shown
Get whether keyboard is displayed or not.
99 100 101 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 99 def keyboard_shown? @bridge.is_keyboard_shown end |
#keyevent(key, metastate = nil) ⇒ Object
Send keyevent on the device.(Only for Selendroid) developer.android.com/reference/android/view/KeyEvent.html
354 355 356 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 354 def keyevent(key, = nil) @bridge.keyevent(key, ) end |
#launch_app ⇒ Object
Start the simulator and application configured with desired capabilities
408 409 410 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 408 def launch_app @bridge.launch_app end |
#lock(duration = nil) ⇒ String
Lock the device
51 52 53 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 51 def lock(duration = nil) @bridge.lock(duration) end |
#logs ⇒ String
Get the device window’s logs.
713 714 715 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 713 def logs @logs ||= Logs.new(@bridge) end |
#long_press_keycode(key, metastate: [], flags: []) ⇒ Object
Long press keycode on the device. developer.android.com/reference/android/view/KeyEvent.html
398 399 400 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 398 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
819 820 821 822 823 824 825 826 827 828 829 830 831 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 819 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 |
#multi_touch(actions) ⇒ Object
631 632 633 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 631 def multi_touch(actions) @bridge.multi_touch(actions) end |
#perform_actions(data) ⇒ Object
Send multiple W3C action chains to server. Use ‘@driver.action` for single action chain.
@example: Zoom
f1 = @driver.action.add_pointer_input(:touch, '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 = @driver.action.add_pointer_input(:touch, '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
661 662 663 664 665 666 667 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 661 def perform_actions(data) raise ArgumentError, "'#{data}' must be Array" unless data.is_a? Array @bridge.send_actions data.map(&:encode).compact data.each(&:clear_actions) nil end |
#press_keycode(key, metastate: [], flags: []) ⇒ Object
Press keycode on the device. developer.android.com/reference/android/view/KeyEvent.html
376 377 378 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 376 def press_keycode(key, metastate: [], flags: []) @bridge.press_keycode(key, metastate: , flags: flags) end |
#pull_file(path) ⇒ Base64-decoded
Pull a file from the simulator/device. On iOS the server should have ifuse libraries installed and configured properly for this feature to work on real devices. 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.
315 316 317 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 315 def pull_file(path) @bridge.pull_file(path) end |
#pull_folder(path) ⇒ Base64-decoded
Pull a folder content from the simulator/device. On iOS the server should have ifuse libraries installed and configured properly for this feature to work on real devices. 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.
341 342 343 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 341 def pull_folder(path) @bridge.pull_folder(path) end |
#push_file(path, filedata) ⇒ Object
Place a file in a specific location on the device. On iOS, the server should have ifuse libraries installed and configured properly for this feature to work on real devices. 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.
289 290 291 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 289 def push_file(path, filedata) @bridge.push_file(path, filedata) end |
#remove_app(app_id, keep_data: nil, timeout: nil) ⇒ Object
502 503 504 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 502 def remove_app(app_id, keep_data: nil, timeout: nil) @bridge.remove_app(app_id, keep_data: keep_data, timeout: timeout) end |
#replace_value(element, *value) ⇒ Object
Replace the value to element directly
263 264 265 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 263 def replace_value(element, *value) @bridge.replace_value(element, *value) end |
#reset ⇒ Object
Reset the device, relaunching the application.
428 429 430 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 428 def reset @bridge.reset end |
#send_keys(*key) ⇒ Object Also known as: type
- DEPRECATION
-
Send keys for a current active element
112 113 114 115 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 112 def send_keys(*key) warn '[DEPRECATION] Driver#send_keys is deprecated in W3C spec. Use driver.action.<command>.perform instead' @bridge.send_keys_to_active_element(key) end |
#session_capabilities ⇒ Selenium::WebDriver::Remote::Capabilities
Retrieve the capabilities of the specified session. It’s almost same as ‘@driver.capabilities` but you can get more details.
814 815 816 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 814 def session_capabilities @bridge.session_capabilities end |
#set_immediate_value(element, *value) ⇒ Object
Set the value to element directly
253 254 255 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 253 def set_immediate_value(element, *value) @bridge.set_immediate_value(element, *value) end |
#shake ⇒ Object
Cause the device to shake
606 607 608 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 606 def shake @bridge.shake end |
#stop_and_save_recording_screen(file_path) ⇒ Object
596 597 598 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 596 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
580 581 582 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 580 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 |
#switch_to_default_context ⇒ Object
Change to the default context. This is equivalent to ‘set_context nil`.
210 211 212 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 210 def switch_to_default_context @bridge.switch_to_default_context end |
#terminate_app(app_id, timeout: nil) ⇒ Boolean
Terminate the specified app.
540 541 542 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 540 def terminate_app(app_id, timeout: nil) @bridge.terminate_app(app_id, timeout: timeout) end |
#touch_actions(actions) ⇒ Object
touch actions
627 628 629 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 627 def touch_actions(actions) @bridge.touch_actions(actions) end |
#unlock ⇒ Object
Unlock the device
71 72 73 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 71 def unlock @bridge.unlock end |
#update_settings(settings) ⇒ Object
Update Appium Settings for current test session
135 136 137 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 135 def update_settings(settings) @bridge.update_settings(settings) end |
#window_rect ⇒ Selenium::WebDriver::Rectangle
Get the device window’s rect.
691 692 693 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 691 def window_rect manage.window.rect end |
#window_size ⇒ Selenium::WebDriver::Dimension
Get the device window’s size.
677 678 679 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 677 def window_size manage.window.size end |
#within_context(context) ⇒ Object
Perform a block within the given context, then switch back to the starting context.
200 201 202 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 200 def within_context(context) block_given? ? @bridge.within_context(context, &Proc.new) : @bridge.within_context(context) end |