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 collapse
- DEFAULT_MATCH_THRESHOLD =
0.5
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
-
#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(png_img_path, match_threshold: DEFAULT_MATCH_THRESHOLD, visualize: false) ⇒ ::Appium::Core::ImageElement
Return ImageElement if current view has a partial image.
-
#find_elements_by_image(png_img_paths, match_threshold: DEFAULT_MATCH_THRESHOLD, visualize: false) ⇒ [::Appium::Core::ImageElement], ::Appium::Core::Error::CoreError
Return ImageElement if current view has partial images.
- #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.
-
#is_keyboard_shown ⇒ Boolean
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
-
#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.
-
#session_capabilities ⇒ Selenium::WebDriver::Remote::Capabilities
Retrieve the capabilities of the specified session.
-
#set_context(context = null) ⇒ Object
Change the context to the given context.
-
#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
add_finders, #find_element, #find_elements
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.
503 504 505 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 503 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
492 493 494 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 492 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
540 541 542 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 540 def app_state(app_id) @bridge.app_state(app_id) end |
#app_strings(language = nil) ⇒ Hash
Return the hash of all localization strings.
418 419 420 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 418 def app_strings(language = nil) @bridge.app_strings(language) end |
#available_contexts ⇒ Array<String>
Returns All usable contexts, as an array of strings.
214 215 216 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 214 def available_contexts @bridge.available_contexts end |
#back ⇒ String
Get the device window’s size.
640 641 642 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 640 def back navigate.back end |
#background_app(duration = 0) ⇒ String
Backgrounds the app for a set number of seconds. This is a blocking application
433 434 435 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 433 def background_app(duration = 0) @bridge.background_app(duration) end |
#close_app ⇒ Object
Close an app on device
397 398 399 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 397 def close_app @bridge.close_app end |
#compare_images(mode: :matchFeatures, first_image:, second_image:, options: nil) ⇒ Object
785 786 787 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 785 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 |
#current_context ⇒ String
Returns The context currently being used.
204 205 206 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 204 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
595 596 597 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 595 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(png_img_path, match_threshold: DEFAULT_MATCH_THRESHOLD, visualize: false) ⇒ ::Appium::Core::ImageElement
Return ImageElement if current view has a partial image
803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 803 def find_element_by_image(png_img_path, match_threshold: DEFAULT_MATCH_THRESHOLD, visualize: false) full_image = @bridge.screenshot partial_image = Base64.encode64 File.read(png_img_path) element = begin @bridge.find_element_by_image(full_image: full_image, partial_image: partial_image, match_threshold: match_threshold, visualize: visualize) rescue Selenium::WebDriver::Error::TimeOutError raise ::Appium::Core::Error::NoSuchElementError rescue ::Selenium::WebDriver::Error::WebDriverError => e raise ::Appium::Core::Error::NoSuchElementError if e..include?('Cannot find any occurrences') raise ::Appium::Core::Error::CoreError, e. end raise ::Appium::Core::Error::NoSuchElementError if element.nil? element end |
#find_elements_by_image(png_img_paths, match_threshold: DEFAULT_MATCH_THRESHOLD, visualize: false) ⇒ [::Appium::Core::ImageElement], ::Appium::Core::Error::CoreError
Return ImageElement if current view has partial images
838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 838 def find_elements_by_image(png_img_paths, match_threshold: DEFAULT_MATCH_THRESHOLD, visualize: false) full_image = @bridge.screenshot partial_images = png_img_paths.map do |png_img_path| Base64.encode64 File.read(png_img_path) end begin @bridge.find_elements_by_image(full_image: full_image, partial_images: partial_images, match_threshold: match_threshold, visualize: visualize) rescue Selenium::WebDriver::Error::TimeOutError [] rescue ::Selenium::WebDriver::Error::WebDriverError => e return [] if e..include?('Cannot find any occurrences') raise ::Appium::Core::Error::CoreError, e. end end |
#find_image_occurrence(full_image:, partial_image:, visualize: false, threshold: nil) ⇒ Object
774 775 776 777 778 779 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 774 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
781 782 783 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 781 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
108 109 110 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 108 def get_settings @bridge.get_settings end |
#get_timeouts ⇒ Hash
For W3C. Get the timeout related settings on the server side.
664 665 666 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 664 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.
130 131 132 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 130 def ime_activate(ime_name) @bridge.ime_activate(ime_name) end |
#ime_activated ⇒ Object
161 162 163 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 161 def ime_activated @bridge.ime_activated end |
#ime_active_engine ⇒ Object
Android only. Get the name of the active IME engine.
150 151 152 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 150 def ime_active_engine @bridge.ime_active_engine end |
#ime_available_engines ⇒ Object
Android only. List all available input engines on the machine.
140 141 142 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 140 def ime_available_engines @bridge.ime_available_engines end |
#ime_deactivate ⇒ Object
Android only. De-activates the currently-active IME engine.
171 172 173 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 171 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
457 458 459 460 461 462 463 464 465 466 467 468 469 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 457 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 |
#is_keyboard_shown ⇒ Boolean
Get whether keyboard is displayed or not.
98 99 100 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 98 def is_keyboard_shown # rubocop:disable Naming/PredicateName @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
333 334 335 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 333 def keyevent(key, = nil) @bridge.keyevent(key, ) end |
#launch_app ⇒ Object
Start the simulator and application configured with desired capabilities
387 388 389 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 387 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.
652 653 654 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 652 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
377 378 379 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 377 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
760 761 762 763 764 765 766 767 768 769 770 771 772 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 760 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
604 605 606 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 604 def multi_touch(actions) @bridge.multi_touch(actions) end |
#press_keycode(key, metastate: [], flags: []) ⇒ Object
Press keycode on the device. developer.android.com/reference/android/view/KeyEvent.html
355 356 357 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 355 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.
294 295 296 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 294 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.
320 321 322 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 320 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.
268 269 270 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 268 def push_file(path, filedata) @bridge.push_file(path, filedata) end |
#remove_app(app_id, keep_data: nil, timeout: nil) ⇒ Object
481 482 483 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 481 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
245 246 247 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 245 def replace_value(element, *value) @bridge.replace_value(element, *value) end |
#reset ⇒ Object
Reset the device, relaunching the application.
407 408 409 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 407 def reset @bridge.reset 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.
753 754 755 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 753 def session_capabilities @bridge.session_capabilities end |
#set_context(context = null) ⇒ Object
Change the context to the given context.
225 226 227 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 225 def set_context(context = null) @bridge.set_context(context) end |
#set_immediate_value(element, *value) ⇒ Object
Set the value to element directly
235 236 237 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 235 def set_immediate_value(element, *value) @bridge.set_immediate_value(element, *value) end |
#shake ⇒ Object
Cause the device to shake
579 580 581 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 579 def shake @bridge.shake end |
#stop_and_save_recording_screen(file_path) ⇒ Object
569 570 571 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 569 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
559 560 561 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 559 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`.
194 195 196 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 194 def switch_to_default_context @bridge.switch_to_default_context end |
#terminate_app(app_id, timeout: nil) ⇒ Boolean
Terminate the specified app.
519 520 521 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 519 def terminate_app(app_id, timeout: nil) @bridge.terminate_app(app_id, timeout: timeout) end |
#touch_actions(actions) ⇒ Object
touch actions
600 601 602 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 600 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
119 120 121 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 119 def update_settings(settings) @bridge.update_settings(settings) end |
#window_rect ⇒ Selenium::WebDriver::Rectangle
Get the device window’s rect.
630 631 632 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 630 def window_rect manage.window.rect end |
#window_size ⇒ Selenium::WebDriver::Dimension
Get the device window’s size.
616 617 618 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 616 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.
184 185 186 |
# File 'lib/appium_lib_core/common/base/driver.rb', line 184 def within_context(context) @bridge.within_context(context) end |