Module: Appium::Core::Device
- Extended by:
- Forwardable
- Defined in:
- lib/appium_lib_core/common/device.rb,
lib/appium_lib_core/device/app_state.rb,
lib/appium_lib_core/device/screen_record.rb
Defined Under Namespace
Classes: AppState, ScreenRecord
Class Method Summary collapse
-
.add_app_management ⇒ Object
rubocop:disable Metrics/ParameterLists,Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity.
- .add_endpoint_method(method) ⇒ Object
- .add_handling_context ⇒ Object
- .add_ime_actions ⇒ Object
-
.add_keyevent ⇒ Object
rubocop:enable Metrics/ParameterLists,Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity.
- .add_screen_recording ⇒ Object
- .add_touch_actions ⇒ Object
- .create_bridge_command(method) ⇒ Object
- .delegate_driver_method(method) ⇒ Object
- .delegate_from_appium_driver(method, delegation_target = :driver) ⇒ Object
- .extend_webdriver_with_forwardable ⇒ Object
- .extended(_mod) ⇒ Object
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_strings(language = nil) ⇒ Hash
Return the hash of all localization strings.
-
#available_contexts ⇒ Array<String>
All usable contexts, as an array of strings.
-
#background_app(duration = 0) ⇒ String
Backgrounds the app for a set number of seconds.
-
#close_app ⇒ Object
Close an app on device.
-
#current_activity ⇒ String
Get current activity name.
-
#current_context ⇒ String
The context currently being used.
-
#current_package ⇒ String
Get current package name.
-
#device_locked? ⇒ Object
Check current device status is weather locked or not.
-
#device_time ⇒ Object
Get the time on the device.
-
#get_display_density ⇒ Integer
Get connected device’s density.
-
#get_network_connection ⇒ Object
Get the device network connection current status See set_network_connection method for return value.
-
#get_settings ⇒ Object
Get appium Settings for current test session.
-
#get_system_bars ⇒ String
Get system bar’s information.
-
#hide_keyboard(close_key = nil, strategy = nil) ⇒ Object
Hide the onscreen keyboard.
-
#ime_activate(ime_name) ⇒ Object
Android only.
-
#ime_activated ⇒ Object
Android only.
-
#ime_active_engine ⇒ Object
Android only.
-
#ime_available_engines ⇒ Object
Android only.
-
#ime_deactivate ⇒ Object
Android only.
-
#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.
-
#long_press_keycode(key, metastate = nil) ⇒ Object
Long press keycode on the device.
-
#open_notifications ⇒ Object
Open Android notifications.
-
#press_keycode(key, metastate = nil) ⇒ Object
Press keycode on the device.
-
#pull_file(path) ⇒ Object
Retrieve a file from the device.
-
#pull_folder(path) ⇒ Object
Retrieve a folder from the 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.
-
#set_context(context) ⇒ 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
-
#take_element_screenshot(element, png_path) ⇒ File
Path to the screenshot.
-
#terminate_app(app_id) ⇒ Boolean
Terminate the specified app.
-
#toggle_data ⇒ Object
Switch the state of data service.
-
#toggle_flight_mode ⇒ Object
Toggle flight mode on or off.
-
#toggle_location_services ⇒ Object
Switch the state of the location service.
-
#toggle_wifi ⇒ Object
Switch the state of the wifi service.
-
#unlock ⇒ Object
Unlock the device.
-
#update_settings(settings) ⇒ Object
Update Appium Settings for current test session.
Class Method Details
.add_app_management ⇒ Object
rubocop:disable Metrics/ParameterLists,Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity
677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 |
# File 'lib/appium_lib_core/common/device.rb', line 677 def add_app_management add_endpoint_method(:install_app) do def install_app(path, replace: nil, timeout: nil, allow_test_packages: nil, use_sdcard: nil, grant_permissions: nil) args = { appPath: path } args[:options] = {} unless (replace, timeout, allow_test_packages, use_sdcard, ) args[:options][:replace] = replace unless replace.nil? args[:options][:timeout] = timeout unless timeout.nil? args[:options][:allowTestPackages] = allow_test_packages unless allow_test_packages.nil? args[:options][:useSdcard] = use_sdcard unless use_sdcard.nil? args[:options][:grantPermissions] = unless .nil? execute :install_app, {}, args end private def (replace, timeout, allow_test_packages, use_sdcard, ) replace.nil? || timeout.nil? || allow_test_packages.nil? || use_sdcard.nil? || .nil? end end add_endpoint_method(:remove_app) do def remove_app(id, keep_data: nil, timeout: nil) # required: [['appId'], ['bundleId']] args = { appId: id } args[:options] = {} unless keep_data.nil? || timeout.nil? args[:options][:keepData] = keep_data unless keep_data.nil? args[:options][:timeout] = timeout unless timeout.nil? execute :remove_app, {}, args end end add_endpoint_method(:app_installed?) do def app_installed?(app_id) # required: [['appId'], ['bundleId']] execute :app_installed?, {}, bundleId: app_id end end add_endpoint_method(:activate_app) do def activate_app(app_id) # required: [['appId'], ['bundleId']] execute :activate_app, {}, bundleId: app_id end end add_endpoint_method(:terminate_app) do def terminate_app(app_id, timeout: nil) # required: [['appId'], ['bundleId']] # args = { appId: app_id } args[:options] = {} unless timeout.nil? args[:options][:timeout] = timeout unless timeout.nil? execute :terminate_app, {}, args end end add_endpoint_method(:app_state) do def app_state(app_id) # required: [['appId'], ['bundleId']] response = execute :app_state, {}, appId: app_id case response when 0 Appium::Core::Device::AppState::NOT_INSTALLED when 1 Appium::Core::Device::AppState::NOT_RUNNING when 2 Appium::Core::Device::AppState::RUNNING_IN_BACKGROUND_SUSPENDED when 3 Appium::Core::Device::AppState::RUNNING_IN_BACKGROUND when 4 Appium::Core::Device::AppState::RUNNING_IN_FOREGROUND else Appium::Logger.debug("Unexpected status in app_state: #{response}") response end end end end |
.add_endpoint_method(method) ⇒ Object
640 641 642 643 644 645 |
# File 'lib/appium_lib_core/common/device.rb', line 640 def add_endpoint_method(method) block_given? ? create_bridge_command(method, &Proc.new) : create_bridge_command(method) delegate_driver_method method delegate_from_appium_driver method end |
.add_handling_context ⇒ Object
848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 |
# File 'lib/appium_lib_core/common/device.rb', line 848 def add_handling_context add_endpoint_method(:within_context) do def within_context(context) existing_context = current_context set_context context if block_given? result = yield set_context existing_context result else set_context existing_context end end end add_endpoint_method(:switch_to_default_context) do def switch_to_default_context set_context nil end end end |
.add_ime_actions ⇒ Object
812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 |
# File 'lib/appium_lib_core/common/device.rb', line 812 def add_ime_actions add_endpoint_method(:ime_activate) do def ime_activate(ime_name) # from Selenium::WebDriver::Remote::OSS execute :ime_activate_engine, {}, engine: ime_name end end add_endpoint_method(:ime_available_engines) do def ime_available_engines execute :ime_get_available_engines end end add_endpoint_method(:ime_active_engine) do # from Selenium::WebDriver::Remote::OSS def ime_active_engine execute :ime_get_active_engine end end add_endpoint_method(:ime_activated) do # from Selenium::WebDriver::Remote::OSS def ime_activated execute :ime_is_activated end end add_endpoint_method(:ime_deactivate) do # from Selenium::WebDriver::Remote::OSS def ime_deactivate execute :ime_deactivate, {} end end end |
.add_keyevent ⇒ Object
rubocop:enable Metrics/ParameterLists,Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity
770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 |
# File 'lib/appium_lib_core/common/device.rb', line 770 def add_keyevent # Only for Selendroid add_endpoint_method(:keyevent) do def keyevent(key, = nil) args = { keycode: key } args[:metastate] = if execute :keyevent, {}, args end end add_endpoint_method(:press_keycode) do def press_keycode(key, = nil) args = { keycode: key } args[:metastate] = if execute :press_keycode, {}, args end end add_endpoint_method(:long_press_keycode) do def long_press_keycode(key, = nil) args = { keycode: key } args[:metastate] = if execute :long_press_keycode, {}, args end end end |
.add_screen_recording ⇒ Object
870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 |
# File 'lib/appium_lib_core/common/device.rb', line 870 def add_screen_recording add_endpoint_method(:stop_recording_screen) do def stop_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT') option = ::Appium::Core::Device::ScreenRecord.new( remote_path: remote_path, user: user, pass: pass, method: method ).upload_option params = option.empty? ? {} : { options: option } execute(:stop_recording_screen, {}, params) end end add_endpoint_method(:stop_and_save_recording_screen) do def stop_and_save_recording_screen(file_path) base64data = execute(:stop_recording_screen, {}, {}) File.open(file_path, 'wb') { |f| f << Base64.decode64(base64data) } end end end |
.add_touch_actions ⇒ Object
797 798 799 800 801 802 803 804 805 806 807 808 809 810 |
# File 'lib/appium_lib_core/common/device.rb', line 797 def add_touch_actions add_endpoint_method(:touch_actions) do def touch_actions(actions) actions = { actions: [actions].flatten } execute :touch_actions, {}, actions end end add_endpoint_method(:multi_touch) do def multi_touch(actions) execute :multi_touch, {}, actions: actions end end end |
.create_bridge_command(method) ⇒ Object
667 668 669 670 671 672 673 674 |
# File 'lib/appium_lib_core/common/device.rb', line 667 def create_bridge_command(method) ::Appium::Core::Base::Bridge::MJSONWP.class_eval do block_given? ? class_eval(&Proc.new) : define_method(method) { execute method } end ::Appium::Core::Base::Bridge::W3C.class_eval do block_given? ? class_eval(&Proc.new) : define_method(method) { execute method } end end |
.delegate_driver_method(method) ⇒ Object
656 657 658 659 |
# File 'lib/appium_lib_core/common/device.rb', line 656 def delegate_driver_method(method) return if ::Appium::Core::Base::Driver.method_defined? method ::Appium::Core::Base::Driver.class_eval { def_delegator :@bridge, method } end |
.delegate_from_appium_driver(method, delegation_target = :driver) ⇒ Object
662 663 664 |
# File 'lib/appium_lib_core/common/device.rb', line 662 def delegate_from_appium_driver(method, delegation_target = :driver) def_delegator delegation_target, method end |
.extend_webdriver_with_forwardable ⇒ Object
648 649 650 651 652 653 |
# File 'lib/appium_lib_core/common/device.rb', line 648 def extend_webdriver_with_forwardable return if ::Appium::Core::Base::Driver.is_a? Forwardable ::Appium::Core::Base::Driver.class_eval do extend Forwardable end end |
.extended(_mod) ⇒ Object
518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 |
# File 'lib/appium_lib_core/common/device.rb', line 518 def extended(_mod) extend_webdriver_with_forwardable ::Appium::Core::Commands::COMMAND_NO_ARG.each_key do |method| add_endpoint_method method end add_endpoint_method(:available_contexts) do def available_contexts # return empty array instead of nil on failure execute(:available_contexts, {}) || [] end end add_endpoint_method(:app_strings) do def app_strings(language = nil) opts = language ? { language: language } : {} execute :app_strings, {}, opts end end add_endpoint_method(:lock) do def lock(duration = nil) opts = duration ? { seconds: duration } : {} execute :lock, {}, opts end end add_endpoint_method(:background_app) do def background_app(duration = 0) execute :background_app, {}, seconds: duration end end add_endpoint_method(:set_context) do def set_context(context = null) execute :set_context, {}, name: context end end add_endpoint_method(:hide_keyboard) do def hide_keyboard(close_key = nil, strategy = nil) option = {} option[:key] = close_key || 'Done' # default to Done key. option[:strategy] = strategy || :pressKey # default to pressKey execute :hide_keyboard, {}, option end end add_endpoint_method(:take_element_screenshot) do def take_element_screenshot(element, png_path) result = execute :take_element_screenshot, id: element.ref extension = File.extname(png_path).downcase if extension != '.png' WebDriver.logger.warn 'name used for saved screenshot does not match file type. '\ 'It should end with .png extension' end File.open(png_path, 'wb') { |f| f << result.unpack('m')[0] } end end add_endpoint_method(:set_immediate_value) do def set_immediate_value(element, *value) keys = ::Selenium::WebDriver::Keys.encode(value) execute :set_immediate_value, { id: element.ref }, value: Array(keys) end end add_endpoint_method(:replace_value) do def replace_value(element, *value) keys = ::Selenium::WebDriver::Keys.encode(value) execute :replace_value, { id: element.ref }, value: Array(keys) end end add_endpoint_method(:push_file) do def push_file(path, filedata) encoded_data = Base64.encode64 filedata execute :push_file, {}, path: path, data: encoded_data end end add_endpoint_method(:pull_file) do def pull_file(path) data = execute :pull_file, {}, path: path Base64.decode64 data end end add_endpoint_method(:pull_folder) do def pull_folder(path) data = execute :pull_folder, {}, path: path Base64.decode64 data end end add_endpoint_method(:get_settings) do def get_settings execute :get_settings, {} end end add_endpoint_method(:update_settings) do def update_settings(settings) execute :update_settings, {}, settings: settings end end add_keyevent add_touch_actions add_ime_actions add_handling_context add_screen_recording add_app_management end |
Instance Method Details
#activate_app(app_id) ⇒ Hash
Activate(Launch) the specified app.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 222
|
#app_installed?(app_id) ⇒ Boolean
Check whether the specified app is installed on the device
|
|
# File 'lib/appium_lib_core/common/device.rb', line 200
|
#app_strings(language = nil) ⇒ Hash
Return the hash of all localization strings.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 249
|
#available_contexts ⇒ Array<String>
Returns All usable contexts, as an array of strings.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 451
|
#background_app(duration = 0) ⇒ String
Backgrounds the app for a set number of seconds. This is a blocking application
|
|
# File 'lib/appium_lib_core/common/device.rb', line 269
|
#close_app ⇒ Object
Close an app on device
|
|
# File 'lib/appium_lib_core/common/device.rb', line 66
|
#current_activity ⇒ String
Get current activity name
|
|
# File 'lib/appium_lib_core/common/device.rb', line 14
|
#current_context ⇒ String
Returns The context currently being used.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 443
|
#current_package ⇒ String
Get current package name
|
|
# File 'lib/appium_lib_core/common/device.rb', line 23
|
#device_locked? ⇒ Object
Check current device status is weather locked or not
|
|
# File 'lib/appium_lib_core/common/device.rb', line 106
|
#device_time ⇒ Object
Get the time on the device
|
|
# File 'lib/appium_lib_core/common/device.rb', line 132
|
#get_display_density ⇒ Integer
Get connected device’s density.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 41
|
#get_network_connection ⇒ Object
Get the device network connection current status See set_network_connection method for return value
|
|
# File 'lib/appium_lib_core/common/device.rb', line 114
|
#get_settings ⇒ Object
Get appium Settings for current test session
|
|
# File 'lib/appium_lib_core/common/device.rb', line 360
|
#get_system_bars ⇒ String
Get system bar’s information
|
|
# File 'lib/appium_lib_core/common/device.rb', line 32
|
#hide_keyboard(close_key = nil, strategy = nil) ⇒ Object
Hide the onscreen keyboard
|
|
# File 'lib/appium_lib_core/common/device.rb', line 282
|
#ime_activate(ime_name) ⇒ Object
Android only. Make an engine that is available active.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 393
|
#ime_activated ⇒ Object
Android only. Indicates whether IME input is active at the moment (not if it is available).
|
|
# File 'lib/appium_lib_core/common/device.rb', line 418
|
#ime_active_engine ⇒ Object
Android only. Get the name of the active IME engine.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 410
|
#ime_available_engines ⇒ Object
Android only. List all available input engines on the machine.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 402
|
#ime_deactivate ⇒ Object
Android only. De-activates the currently-active IME engine.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 426
|
#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
|
|
# File 'lib/appium_lib_core/common/device.rb', line 172
|
#is_keyboard_shown ⇒ Boolean
Get whether keyboard is displayed or not.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 50
|
#keyevent(key, metastate = nil) ⇒ Object
Send keyevent on the device.(Only for Selendroid) developer.android.com/reference/android/view/KeyEvent.html
|
|
# File 'lib/appium_lib_core/common/device.rb', line 297
|
#launch_app ⇒ Object
Start the simulator and application configured with desired capabilities
|
|
# File 'lib/appium_lib_core/common/device.rb', line 58
|
#lock(duration = nil) ⇒ String
Lock the device
|
|
# File 'lib/appium_lib_core/common/device.rb', line 258
|
#long_press_keycode(key, metastate = nil) ⇒ Object
Long press keycode on the device. developer.android.com/reference/android/view/KeyEvent.html
|
|
# File 'lib/appium_lib_core/common/device.rb', line 319
|
#open_notifications ⇒ Object
Open Android notifications
|
|
# File 'lib/appium_lib_core/common/device.rb', line 124
|
#press_keycode(key, metastate = nil) ⇒ Object
Press keycode on the device. developer.android.com/reference/android/view/KeyEvent.html
|
|
# File 'lib/appium_lib_core/common/device.rb', line 308
|
#pull_file(path) ⇒ Object
Retrieve a file from the device. This can retrieve an absolute path or a path relative to the installed app (iOS only).
|
|
# File 'lib/appium_lib_core/common/device.rb', line 340
|
#pull_folder(path) ⇒ Object
Retrieve a folder from the device.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 351
|
#push_file(path, filedata) ⇒ Object
Place a file in a specific location on the device.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 330
|
#remove_app(app_id, keep_data: nil, timeout: nil) ⇒ Object
|
|
# File 'lib/appium_lib_core/common/device.rb', line 188
|
#replace_value(element, *value) ⇒ Object
Replace the value to element directly
|
|
# File 'lib/appium_lib_core/common/device.rb', line 385
|
#reset ⇒ Object
Reset the device, relaunching the application.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 74
|
#set_context(context) ⇒ Object
Change the context to the given context.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 434
|
#set_immediate_value(element, *value) ⇒ Object
Set the value to element directly
|
|
# File 'lib/appium_lib_core/common/device.rb', line 377
|
#shake ⇒ Object
Cause the device to shake
|
|
# File 'lib/appium_lib_core/common/device.rb', line 82
|
#stop_and_save_recording_screen(file_path) ⇒ Object
|
|
# File 'lib/appium_lib_core/common/device.rb', line 503
|
#stop_recording_screen(remote_path: nil, user: nil, pass: nil, method: 'PUT') ⇒ Object
|
|
# File 'lib/appium_lib_core/common/device.rb', line 486
|
#take_element_screenshot(element, png_path) ⇒ File
Returns Path to the screenshot.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 476
|
#terminate_app(app_id) ⇒ Boolean
Terminate the specified app.
|
|
# File 'lib/appium_lib_core/common/device.rb', line 209
|
#toggle_data ⇒ Object
Switch the state of data service
|
|
# File 'lib/appium_lib_core/common/device.rb', line 159
|
#toggle_flight_mode ⇒ Object
Toggle flight mode on or off
|
|
# File 'lib/appium_lib_core/common/device.rb', line 90
|
#toggle_location_services ⇒ Object
Switch the state of the location service
|
|
# File 'lib/appium_lib_core/common/device.rb', line 141
|
#toggle_wifi ⇒ Object
Switch the state of the wifi service
|
|
# File 'lib/appium_lib_core/common/device.rb', line 150
|
#unlock ⇒ Object
Unlock the device
|
|
# File 'lib/appium_lib_core/common/device.rb', line 98
|
#update_settings(settings) ⇒ Object
Update Appium Settings for current test session
|
|
# File 'lib/appium_lib_core/common/device.rb', line 368
|