Appium-Python-Client 0.13__tar.gz → 6.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) hide show
  1. appium_python_client-6.0.2/.github/actions/setup-appium-server/action.yml +65 -0
  2. appium_python_client-6.0.2/.github/dependabot.yml +17 -0
  3. appium_python_client-6.0.2/.github/issue_template.md +23 -0
  4. appium_python_client-6.0.2/.github/workflows/functional-test.yml +368 -0
  5. appium_python_client-6.0.2/.github/workflows/lock-update.yml +31 -0
  6. appium_python_client-6.0.2/.github/workflows/pr-title.yml +10 -0
  7. appium_python_client-6.0.2/.github/workflows/publish.yml +50 -0
  8. appium_python_client-6.0.2/.github/workflows/unit-test.yml +36 -0
  9. appium_python_client-6.0.2/.gitignore +30 -0
  10. appium_python_client-6.0.2/.pre-commit-config.yaml +15 -0
  11. appium_python_client-6.0.2/.ruff.toml +29 -0
  12. appium_python_client-6.0.2/CHANGELOG.md +2662 -0
  13. appium_python_client-6.0.2/LICENSE +201 -0
  14. appium_python_client-6.0.2/Makefile +51 -0
  15. appium_python_client-6.0.2/PKG-INFO +569 -0
  16. appium_python_client-6.0.2/README.md +542 -0
  17. {Appium-Python-Client-0.13 → appium_python_client-6.0.2}/appium/__init__.py +0 -6
  18. {Appium-Python-Client-0.13 → appium_python_client-6.0.2}/appium/common/exceptions.py +2 -4
  19. appium_python_client-6.0.2/appium/common/helper.py +42 -0
  20. appium_python_client-6.0.2/appium/common/logger.py +28 -0
  21. appium_python_client-6.0.2/appium/options/android/__init__.py +4 -0
  22. appium_python_client-6.0.2/appium/options/android/common/__init__.py +0 -0
  23. appium_python_client-6.0.2/appium/options/android/common/adb/__init__.py +0 -0
  24. appium_python_client-6.0.2/appium/options/android/common/adb/adb_exec_timeout_option.py +40 -0
  25. appium_python_client-6.0.2/appium/options/android/common/adb/adb_port_option.py +37 -0
  26. appium_python_client-6.0.2/appium/options/android/common/adb/allow_delay_adb_option.py +38 -0
  27. appium_python_client-6.0.2/appium/options/android/common/adb/build_tools_version_option.py +41 -0
  28. appium_python_client-6.0.2/appium/options/android/common/adb/clear_device_logs_on_start_option.py +39 -0
  29. appium_python_client-6.0.2/appium/options/android/common/adb/ignore_hidden_api_policy_error_option.py +39 -0
  30. appium_python_client-6.0.2/appium/options/android/common/adb/logcat_filter_specs_option.py +41 -0
  31. appium_python_client-6.0.2/appium/options/android/common/adb/logcat_format_option.py +38 -0
  32. appium_python_client-6.0.2/appium/options/android/common/adb/mock_location_app_option.py +41 -0
  33. appium_python_client-6.0.2/appium/options/android/common/adb/remote_adb_host_option.py +38 -0
  34. appium_python_client-6.0.2/appium/options/android/common/adb/skip_logcat_capture_option.py +39 -0
  35. appium_python_client-6.0.2/appium/options/android/common/adb/suppress_kill_server_option.py +38 -0
  36. appium_python_client-6.0.2/appium/options/android/common/app/__init__.py +0 -0
  37. appium_python_client-6.0.2/appium/options/android/common/app/allow_test_packages_option.py +39 -0
  38. appium_python_client-6.0.2/appium/options/android/common/app/android_install_timeout_option.py +42 -0
  39. appium_python_client-6.0.2/appium/options/android/common/app/app_activity_option.py +38 -0
  40. appium_python_client-6.0.2/appium/options/android/common/app/app_package_option.py +38 -0
  41. appium_python_client-6.0.2/appium/options/android/common/app/app_wait_activity_option.py +39 -0
  42. appium_python_client-6.0.2/appium/options/android/common/app/app_wait_duration_option.py +40 -0
  43. appium_python_client-6.0.2/appium/options/android/common/app/app_wait_for_launch_option.py +40 -0
  44. appium_python_client-6.0.2/appium/options/android/common/app/app_wait_package_option.py +39 -0
  45. appium_python_client-6.0.2/appium/options/android/common/app/auto_grant_premissions_option.py +39 -0
  46. appium_python_client-6.0.2/appium/options/android/common/app/enforce_app_install_option.py +39 -0
  47. appium_python_client-6.0.2/appium/options/android/common/app/intent_action_option.py +39 -0
  48. appium_python_client-6.0.2/appium/options/android/common/app/intent_category_option.py +39 -0
  49. appium_python_client-6.0.2/appium/options/android/common/app/intent_flags_option.py +39 -0
  50. appium_python_client-6.0.2/appium/options/android/common/app/optional_intent_arguments_option.py +39 -0
  51. appium_python_client-6.0.2/appium/options/android/common/app/remote_apps_cache_limit_option.py +41 -0
  52. appium_python_client-6.0.2/appium/options/android/common/app/uninstall_other_packages_option.py +38 -0
  53. appium_python_client-6.0.2/appium/options/android/common/avd/__init__.py +0 -0
  54. appium_python_client-6.0.2/appium/options/android/common/avd/avd_args_option.py +37 -0
  55. appium_python_client-6.0.2/appium/options/android/common/avd/avd_env_option.py +37 -0
  56. appium_python_client-6.0.2/appium/options/android/common/avd/avd_launch_timeout_option.py +40 -0
  57. appium_python_client-6.0.2/appium/options/android/common/avd/avd_option.py +40 -0
  58. appium_python_client-6.0.2/appium/options/android/common/avd/avd_ready_timeout_option.py +40 -0
  59. appium_python_client-6.0.2/appium/options/android/common/avd/gps_enabled_option.py +38 -0
  60. appium_python_client-6.0.2/appium/options/android/common/avd/network_speed_option.py +40 -0
  61. appium_python_client-6.0.2/appium/options/android/common/context/__init__.py +0 -0
  62. appium_python_client-6.0.2/appium/options/android/common/context/auto_webview_timeout_option.py +40 -0
  63. appium_python_client-6.0.2/appium/options/android/common/context/chrome_logging_prefs_option.py +41 -0
  64. appium_python_client-6.0.2/appium/options/android/common/context/chrome_options_option.py +40 -0
  65. appium_python_client-6.0.2/appium/options/android/common/context/chromedriver_args_option.py +40 -0
  66. appium_python_client-6.0.2/appium/options/android/common/context/chromedriver_chrome_mapping_file_option.py +42 -0
  67. appium_python_client-6.0.2/appium/options/android/common/context/chromedriver_disable_build_check_option.py +40 -0
  68. appium_python_client-6.0.2/appium/options/android/common/context/chromedriver_executable_dir_option.py +42 -0
  69. appium_python_client-6.0.2/appium/options/android/common/context/chromedriver_executable_option.py +37 -0
  70. appium_python_client-6.0.2/appium/options/android/common/context/chromedriver_port_option.py +38 -0
  71. appium_python_client-6.0.2/appium/options/android/common/context/chromedriver_ports_option.py +38 -0
  72. appium_python_client-6.0.2/appium/options/android/common/context/chromedriver_use_system_executable_option.py +39 -0
  73. appium_python_client-6.0.2/appium/options/android/common/context/ensure_webviews_have_pages_option.py +39 -0
  74. appium_python_client-6.0.2/appium/options/android/common/context/extract_chrome_android_package_from_context_name_option.py +39 -0
  75. appium_python_client-6.0.2/appium/options/android/common/context/native_web_screenshot_option.py +39 -0
  76. appium_python_client-6.0.2/appium/options/android/common/context/recreate_chrome_driver_sessions_option.py +40 -0
  77. appium_python_client-6.0.2/appium/options/android/common/context/show_chromedriver_log_option.py +38 -0
  78. appium_python_client-6.0.2/appium/options/android/common/context/webview_devtools_port_option.py +39 -0
  79. appium_python_client-6.0.2/appium/options/android/common/localization/__init__.py +0 -0
  80. appium_python_client-6.0.2/appium/options/android/common/localization/locale_script_option.py +39 -0
  81. appium_python_client-6.0.2/appium/options/android/common/locking/__init__.py +0 -0
  82. appium_python_client-6.0.2/appium/options/android/common/locking/skip_unlock_option.py +41 -0
  83. appium_python_client-6.0.2/appium/options/android/common/locking/unlock_key_option.py +39 -0
  84. appium_python_client-6.0.2/appium/options/android/common/locking/unlock_strategy_option.py +39 -0
  85. appium_python_client-6.0.2/appium/options/android/common/locking/unlock_success_timeout_option.py +42 -0
  86. appium_python_client-6.0.2/appium/options/android/common/locking/unlock_type_option.py +39 -0
  87. appium_python_client-6.0.2/appium/options/android/common/mjpeg/__init__.py +0 -0
  88. appium_python_client-6.0.2/appium/options/android/common/mjpeg/mjpeg_screenshot_url_option.py +39 -0
  89. appium_python_client-6.0.2/appium/options/android/common/other/__init__.py +0 -0
  90. appium_python_client-6.0.2/appium/options/android/common/other/disable_suppress_accessibility_service_option.py +39 -0
  91. appium_python_client-6.0.2/appium/options/android/common/other/user_profile_option.py +41 -0
  92. appium_python_client-6.0.2/appium/options/android/common/signing/__init__.py +0 -0
  93. appium_python_client-6.0.2/appium/options/android/common/signing/key_alias_option.py +39 -0
  94. appium_python_client-6.0.2/appium/options/android/common/signing/key_password_option.py +39 -0
  95. appium_python_client-6.0.2/appium/options/android/common/signing/keystore_password_option.py +39 -0
  96. appium_python_client-6.0.2/appium/options/android/common/signing/keystore_path_option.py +39 -0
  97. appium_python_client-6.0.2/appium/options/android/common/signing/no_sign_option.py +41 -0
  98. appium_python_client-6.0.2/appium/options/android/common/signing/use_keystore_option.py +41 -0
  99. appium_python_client-6.0.2/appium/options/android/espresso/__init__.py +0 -0
  100. appium_python_client-6.0.2/appium/options/android/espresso/activity_options_option.py +40 -0
  101. appium_python_client-6.0.2/appium/options/android/espresso/app_locale_option.py +43 -0
  102. appium_python_client-6.0.2/appium/options/android/espresso/base.py +220 -0
  103. appium_python_client-6.0.2/appium/options/android/espresso/espresso_build_config_option.py +46 -0
  104. appium_python_client-6.0.2/appium/options/android/espresso/espresso_server_launch_timeout_option.py +42 -0
  105. appium_python_client-6.0.2/appium/options/android/espresso/force_espresso_rebuild_option.py +40 -0
  106. appium_python_client-6.0.2/appium/options/android/espresso/intent_options_option.py +41 -0
  107. appium_python_client-6.0.2/appium/options/android/espresso/show_gradle_log_option.py +38 -0
  108. appium_python_client-6.0.2/appium/options/android/uiautomator2/__init__.py +0 -0
  109. appium_python_client-6.0.2/appium/options/android/uiautomator2/base.py +220 -0
  110. appium_python_client-6.0.2/appium/options/android/uiautomator2/disable_window_animation_option.py +39 -0
  111. appium_python_client-6.0.2/appium/options/android/uiautomator2/mjpeg_server_port_option.py +40 -0
  112. appium_python_client-6.0.2/appium/options/android/uiautomator2/skip_device_initialization_option.py +39 -0
  113. appium_python_client-6.0.2/appium/options/android/uiautomator2/skip_server_installation_option.py +43 -0
  114. appium_python_client-6.0.2/appium/options/android/uiautomator2/uiautomator2_server_install_timeout_option.py +43 -0
  115. appium_python_client-6.0.2/appium/options/android/uiautomator2/uiautomator2_server_launch_timeout_option.py +43 -0
  116. appium_python_client-6.0.2/appium/options/android/uiautomator2/uiautomator2_server_read_timeout_option.py +45 -0
  117. appium_python_client-6.0.2/appium/options/common/__init__.py +3 -0
  118. appium_python_client-6.0.2/appium/options/common/app_option.py +40 -0
  119. appium_python_client-6.0.2/appium/options/common/auto_web_view_option.py +39 -0
  120. appium_python_client-6.0.2/appium/options/common/automation_name_option.py +37 -0
  121. appium_python_client-6.0.2/appium/options/common/base.py +128 -0
  122. appium_python_client-6.0.2/appium/options/common/browser_name_option.py +37 -0
  123. appium_python_client-6.0.2/appium/options/common/bundle_id_option.py +37 -0
  124. appium_python_client-6.0.2/appium/options/common/clear_system_files_option.py +37 -0
  125. appium_python_client-6.0.2/appium/options/common/device_name_option.py +37 -0
  126. appium_python_client-6.0.2/appium/options/common/enable_performance_logging_option.py +37 -0
  127. appium_python_client-6.0.2/appium/options/common/event_timings_option.py +39 -0
  128. appium_python_client-6.0.2/appium/options/common/full_reset_option.py +37 -0
  129. appium_python_client-6.0.2/appium/options/common/is_headless_option.py +38 -0
  130. appium_python_client-6.0.2/appium/options/common/language_option.py +37 -0
  131. appium_python_client-6.0.2/appium/options/common/locale_option.py +37 -0
  132. appium_python_client-6.0.2/appium/options/common/new_command_timeout_option.py +40 -0
  133. appium_python_client-6.0.2/appium/options/common/no_reset_option.py +37 -0
  134. appium_python_client-6.0.2/appium/options/common/orientation_option.py +39 -0
  135. appium_python_client-6.0.2/appium/options/common/other_apps_option.py +38 -0
  136. appium_python_client-6.0.2/appium/options/common/platform_version_option.py +39 -0
  137. appium_python_client-6.0.2/appium/options/common/postrun_option.py +38 -0
  138. appium_python_client-6.0.2/appium/options/common/prerun_option.py +39 -0
  139. appium_python_client-6.0.2/appium/options/common/print_page_source_on_find_failure_option.py +39 -0
  140. appium_python_client-6.0.2/appium/options/common/skip_log_capture_option.py +37 -0
  141. appium_python_client-6.0.2/appium/options/common/supports_capabilities.py +26 -0
  142. appium_python_client-6.0.2/appium/options/common/system_host_option.py +37 -0
  143. appium_python_client-6.0.2/appium/options/common/system_port_option.py +37 -0
  144. appium_python_client-6.0.2/appium/options/common/udid_option.py +37 -0
  145. appium_python_client-6.0.2/appium/options/flutter_integration/__init__.py +17 -0
  146. appium_python_client-6.0.2/appium/options/flutter_integration/base.py +38 -0
  147. appium_python_client-6.0.2/appium/options/flutter_integration/flutter_element_wait_timeout_option.py +49 -0
  148. appium_python_client-6.0.2/appium/options/flutter_integration/flutter_enable_mock_camera_option.py +44 -0
  149. appium_python_client-6.0.2/appium/options/flutter_integration/flutter_server_launch_timeout_option.py +50 -0
  150. appium_python_client-6.0.2/appium/options/flutter_integration/flutter_system_port_option.py +44 -0
  151. appium_python_client-6.0.2/appium/options/gecko/__init__.py +3 -0
  152. appium_python_client-6.0.2/appium/options/gecko/android_storage_option.py +38 -0
  153. appium_python_client-6.0.2/appium/options/gecko/base.py +50 -0
  154. appium_python_client-6.0.2/appium/options/gecko/firefox_options_option.py +38 -0
  155. appium_python_client-6.0.2/appium/options/gecko/marionette_port_option.py +42 -0
  156. appium_python_client-6.0.2/appium/options/gecko/verbosity_option.py +39 -0
  157. appium_python_client-6.0.2/appium/options/ios/__init__.py +4 -0
  158. appium_python_client-6.0.2/appium/options/ios/safari/__init__.py +0 -0
  159. appium_python_client-6.0.2/appium/options/ios/safari/automatic_inspection_option.py +40 -0
  160. appium_python_client-6.0.2/appium/options/ios/safari/automatic_profiling_option.py +40 -0
  161. appium_python_client-6.0.2/appium/options/ios/safari/base.py +50 -0
  162. appium_python_client-6.0.2/appium/options/ios/safari/device_name_option.py +42 -0
  163. appium_python_client-6.0.2/appium/options/ios/safari/device_type_option.py +40 -0
  164. appium_python_client-6.0.2/appium/options/ios/safari/device_udid_option.py +42 -0
  165. appium_python_client-6.0.2/appium/options/ios/safari/platform_build_version_option.py +40 -0
  166. appium_python_client-6.0.2/appium/options/ios/safari/platform_version_option.py +40 -0
  167. appium_python_client-6.0.2/appium/options/ios/safari/use_simulator_option.py +40 -0
  168. appium_python_client-6.0.2/appium/options/ios/safari/webkit_webrtc_option.py +52 -0
  169. appium_python_client-6.0.2/appium/options/ios/xcuitest/__init__.py +0 -0
  170. appium_python_client-6.0.2/appium/options/ios/xcuitest/app/__init__.py +0 -0
  171. appium_python_client-6.0.2/appium/options/ios/xcuitest/app/app_install_strategy_option.py +45 -0
  172. appium_python_client-6.0.2/appium/options/ios/xcuitest/app/app_push_timeout_option.py +41 -0
  173. appium_python_client-6.0.2/appium/options/ios/xcuitest/app/localizable_strings_dir_option.py +38 -0
  174. appium_python_client-6.0.2/appium/options/ios/xcuitest/base.py +226 -0
  175. appium_python_client-6.0.2/appium/options/ios/xcuitest/general/__init__.py +0 -0
  176. appium_python_client-6.0.2/appium/options/ios/xcuitest/general/include_device_caps_to_session_info_option.py +40 -0
  177. appium_python_client-6.0.2/appium/options/ios/xcuitest/general/reset_location_service_option.py +38 -0
  178. appium_python_client-6.0.2/appium/options/ios/xcuitest/other/__init__.py +0 -0
  179. appium_python_client-6.0.2/appium/options/ios/xcuitest/other/command_timeouts_option.py +56 -0
  180. appium_python_client-6.0.2/appium/options/ios/xcuitest/other/launch_with_idb_option.py +41 -0
  181. appium_python_client-6.0.2/appium/options/ios/xcuitest/other/show_ios_log_option.py +38 -0
  182. appium_python_client-6.0.2/appium/options/ios/xcuitest/other/use_json_source_option.py +38 -0
  183. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/__init__.py +0 -0
  184. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/calendar_access_authorized_option.py +40 -0
  185. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/calendar_format_option.py +37 -0
  186. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/connect_hardware_keyboard_option.py +42 -0
  187. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/custom_ssl_cert_option.py +38 -0
  188. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/enforce_fresh_simulator_creation_option.py +38 -0
  189. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/force_simulator_software_keyboard_presence_option.py +44 -0
  190. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/ios_simulator_logs_predicate_option.py +37 -0
  191. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/keep_key_chains_option.py +38 -0
  192. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/keychains_exclude_patterns_option.py +43 -0
  193. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/permissions_option.py +49 -0
  194. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/reduce_motion_option.py +39 -0
  195. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/reset_on_session_start_only_option.py +40 -0
  196. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/scale_factor_option.py +43 -0
  197. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/shutdown_other_simulators_option.py +43 -0
  198. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/simulator_devices_set_path_option.py +40 -0
  199. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/simulator_pasteboard_automatic_sync_option.py +41 -0
  200. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/simulator_startup_timeout_option.py +45 -0
  201. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/simulator_trace_pointer_option.py +40 -0
  202. appium_python_client-6.0.2/appium/options/ios/xcuitest/simulator/simulator_window_center_option.py +40 -0
  203. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/__init__.py +0 -0
  204. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/allow_provisioning_device_regitration_option.py +39 -0
  205. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/auto_accept_alerts_option.py +38 -0
  206. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/auto_disimiss_alerts_option.py +38 -0
  207. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/derived_data_path_option.py +40 -0
  208. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/disable_automatic_screenshots_option.py +39 -0
  209. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/force_app_launch_option.py +41 -0
  210. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/keychain_password_option.py +38 -0
  211. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/keychain_path_option.py +38 -0
  212. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/max_typing_frequency_option.py +39 -0
  213. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/mjpeg_server_port_option.py +41 -0
  214. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/prebuilt_wda_path_option.py +38 -0
  215. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/process_arguments_option.py +41 -0
  216. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/result_bundle_path_option.py +41 -0
  217. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/screenshot_quality_option.py +41 -0
  218. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/should_terminate_app_option.py +41 -0
  219. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/should_use_singleton_test_manager_option.py +38 -0
  220. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/show_xcode_log_option.py +39 -0
  221. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/simple_is_visible_check_option.py +41 -0
  222. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/updated_wda_bundle_id_option.py +38 -0
  223. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/use_native_caching_strategy_option.py +40 -0
  224. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/use_new_wda_option.py +50 -0
  225. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/use_prebuilt_wda_option.py +38 -0
  226. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/use_preinstalled_wda_option.py +39 -0
  227. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/use_simple_build_test_option.py +39 -0
  228. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/use_xctestrun_file_option.py +48 -0
  229. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/wait_for_idle_timeout_option.py +44 -0
  230. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/wait_for_quiescence_option.py +41 -0
  231. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/wda_base_url_option.py +40 -0
  232. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/wda_connection_timeout_option.py +42 -0
  233. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/wda_eventloop_idle_delay_option.py +45 -0
  234. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/wda_launch_timeout_option.py +40 -0
  235. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/wda_local_port_option.py +40 -0
  236. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/wda_startup_retries_option.py +38 -0
  237. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/wda_startup_retry_interval_option.py +42 -0
  238. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/web_driver_agent_url_option.py +38 -0
  239. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/xcode_org_id_option.py +38 -0
  240. appium_python_client-6.0.2/appium/options/ios/xcuitest/wda/xcode_signing_id_option.py +38 -0
  241. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/__init__.py +0 -0
  242. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/absolute_web_locations_option.py +41 -0
  243. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/additional_webview_bundle_ids_option.py +39 -0
  244. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/enable_async_execute_from_https_option.py +38 -0
  245. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/full_context_list_option.py +41 -0
  246. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/include_safari_in_webviews_option.py +40 -0
  247. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/native_web_tap_option.py +39 -0
  248. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/safari_garbage_collect_option.py +38 -0
  249. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/safari_ignore_fraud_warning_option.py +38 -0
  250. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/safari_ignore_web_hostnames_option.py +41 -0
  251. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/safari_initial_url_option.py +37 -0
  252. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/safari_log_all_communication_hex_dump_option.py +42 -0
  253. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/safari_log_all_communication_option.py +39 -0
  254. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/safari_open_links_in_background_option.py +38 -0
  255. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/safari_socket_chunk_size_option.py +40 -0
  256. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/safari_web_inspector_max_frame_length_option.py +40 -0
  257. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/webkit_response_timeout_option.py +42 -0
  258. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/webview_connect_retries_option.py +39 -0
  259. appium_python_client-6.0.2/appium/options/ios/xcuitest/webview/webview_connect_timeout_option.py +42 -0
  260. appium_python_client-6.0.2/appium/options/mac/__init__.py +3 -0
  261. appium_python_client-6.0.2/appium/options/mac/mac2/__init__.py +0 -0
  262. appium_python_client-6.0.2/appium/options/mac/mac2/app_path_option.py +38 -0
  263. appium_python_client-6.0.2/appium/options/mac/mac2/arguments_option.py +38 -0
  264. appium_python_client-6.0.2/appium/options/mac/mac2/base.py +112 -0
  265. appium_python_client-6.0.2/appium/options/mac/mac2/bootstrap_root_option.py +40 -0
  266. appium_python_client-6.0.2/appium/options/mac/mac2/environment_option.py +40 -0
  267. appium_python_client-6.0.2/appium/options/mac/mac2/server_startup_timeout_option.py +43 -0
  268. appium_python_client-6.0.2/appium/options/mac/mac2/show_server_logs_option.py +38 -0
  269. appium_python_client-6.0.2/appium/options/mac/mac2/skip_app_kill_option.py +39 -0
  270. appium_python_client-6.0.2/appium/options/mac/mac2/web_driver_agent_mac_url_option.py +38 -0
  271. appium_python_client-6.0.2/appium/options/windows/__init__.py +3 -0
  272. appium_python_client-6.0.2/appium/options/windows/windows/__init__.py +0 -0
  273. appium_python_client-6.0.2/appium/options/windows/windows/app_arguments_option.py +39 -0
  274. appium_python_client-6.0.2/appium/options/windows/windows/app_top_level_window_option.py +39 -0
  275. appium_python_client-6.0.2/appium/options/windows/windows/app_working_dir_option.py +39 -0
  276. appium_python_client-6.0.2/appium/options/windows/windows/base.py +96 -0
  277. appium_python_client-6.0.2/appium/options/windows/windows/create_session_timeout_option.py +44 -0
  278. appium_python_client-6.0.2/appium/options/windows/windows/expreimental_web_driver_option.py +38 -0
  279. appium_python_client-6.0.2/appium/options/windows/windows/wait_for_app_launch_option.py +42 -0
  280. appium_python_client-6.0.2/appium/protocols/__init__.py +13 -0
  281. appium_python_client-6.0.2/appium/protocols/webdriver/__init__.py +13 -0
  282. appium_python_client-6.0.2/appium/protocols/webdriver/can_execute_commands.py +23 -0
  283. appium_python_client-6.0.2/appium/protocols/webdriver/can_execute_scripts.py +27 -0
  284. appium_python_client-6.0.2/appium/protocols/webdriver/can_find_elements.py +32 -0
  285. appium_python_client-6.0.2/appium/py.typed +0 -0
  286. appium_python_client-6.0.2/appium/version.py +17 -0
  287. {Appium-Python-Client-0.13 → appium_python_client-6.0.2}/appium/webdriver/__init__.py +2 -0
  288. appium_python_client-6.0.2/appium/webdriver/appium_connection.py +65 -0
  289. appium_python_client-6.0.2/appium/webdriver/appium_service.py +334 -0
  290. appium_python_client-6.0.2/appium/webdriver/applicationstate.py +21 -0
  291. appium_python_client-6.0.2/appium/webdriver/client_config.py +38 -0
  292. appium_python_client-6.0.2/appium/webdriver/clipboard_content_type.py +19 -0
  293. Appium-Python-Client-0.13/appium/webdriver/common/mobileby.py → appium_python_client-6.0.2/appium/webdriver/command_method.py +11 -5
  294. appium_python_client-6.0.2/appium/webdriver/common/appiumby.py +54 -0
  295. {Appium-Python-Client-0.13 → appium_python_client-6.0.2}/appium/webdriver/connectiontype.py +18 -10
  296. appium_python_client-6.0.2/appium/webdriver/errorhandler.py +126 -0
  297. appium_python_client-6.0.2/appium/webdriver/extensions/__init__.py +13 -0
  298. appium_python_client-6.0.2/appium/webdriver/extensions/action_helpers.py +186 -0
  299. appium_python_client-6.0.2/appium/webdriver/extensions/android/__init__.py +0 -0
  300. appium_python_client-6.0.2/appium/webdriver/extensions/android/activities.py +56 -0
  301. appium_python_client-6.0.2/appium/webdriver/extensions/android/common.py +34 -0
  302. appium_python_client-6.0.2/appium/webdriver/extensions/android/display.py +35 -0
  303. appium_python_client-6.0.2/appium/webdriver/extensions/android/gsm.py +125 -0
  304. appium_python_client-6.0.2/appium/webdriver/extensions/android/nativekey.py +1163 -0
  305. appium_python_client-6.0.2/appium/webdriver/extensions/android/network.py +149 -0
  306. appium_python_client-6.0.2/appium/webdriver/extensions/android/performance.py +61 -0
  307. appium_python_client-6.0.2/appium/webdriver/extensions/android/power.py +65 -0
  308. appium_python_client-6.0.2/appium/webdriver/extensions/android/sms.py +42 -0
  309. appium_python_client-6.0.2/appium/webdriver/extensions/android/system_bars.py +44 -0
  310. appium_python_client-6.0.2/appium/webdriver/extensions/applications.py +192 -0
  311. appium_python_client-6.0.2/appium/webdriver/extensions/clipboard.py +90 -0
  312. appium_python_client-6.0.2/appium/webdriver/extensions/context.py +62 -0
  313. appium_python_client-6.0.2/appium/webdriver/extensions/device_time.py +54 -0
  314. appium_python_client-6.0.2/appium/webdriver/extensions/execute_driver.py +60 -0
  315. appium_python_client-6.0.2/appium/webdriver/extensions/execute_mobile_command.py +62 -0
  316. appium_python_client-6.0.2/appium/webdriver/extensions/flutter_integration/__init__.py +13 -0
  317. appium_python_client-6.0.2/appium/webdriver/extensions/flutter_integration/flutter_commands.py +293 -0
  318. appium_python_client-6.0.2/appium/webdriver/extensions/flutter_integration/flutter_finder.py +55 -0
  319. appium_python_client-6.0.2/appium/webdriver/extensions/flutter_integration/scroll_directions.py +6 -0
  320. appium_python_client-6.0.2/appium/webdriver/extensions/hw_actions.py +121 -0
  321. appium_python_client-6.0.2/appium/webdriver/extensions/images_comparison.py +153 -0
  322. appium_python_client-6.0.2/appium/webdriver/extensions/keyboard.py +125 -0
  323. appium_python_client-6.0.2/appium/webdriver/extensions/location.py +87 -0
  324. appium_python_client-6.0.2/appium/webdriver/extensions/log_event.py +67 -0
  325. appium_python_client-6.0.2/appium/webdriver/extensions/logs.py +53 -0
  326. appium_python_client-6.0.2/appium/webdriver/extensions/remote_fs.py +89 -0
  327. appium_python_client-6.0.2/appium/webdriver/extensions/screen_record.py +216 -0
  328. appium_python_client-6.0.2/appium/webdriver/extensions/session.py +40 -0
  329. appium_python_client-6.0.2/appium/webdriver/extensions/settings.py +49 -0
  330. appium_python_client-6.0.2/appium/webdriver/locator_converter.py +28 -0
  331. appium_python_client-6.0.2/appium/webdriver/mobilecommand.py +100 -0
  332. {Appium-Python-Client-0.13 → appium_python_client-6.0.2}/appium/webdriver/switch_to.py +9 -6
  333. appium_python_client-6.0.2/appium/webdriver/webdriver.py +463 -0
  334. appium_python_client-6.0.2/appium/webdriver/webelement.py +131 -0
  335. appium_python_client-6.0.2/docs/Makefile +20 -0
  336. appium_python_client-6.0.2/docs/README.md +14 -0
  337. appium_python_client-6.0.2/docs/conf.py +58 -0
  338. appium_python_client-6.0.2/docs/generate.sh +4 -0
  339. appium_python_client-6.0.2/docs/index.rst +18 -0
  340. appium_python_client-6.0.2/docs/make.bat +35 -0
  341. appium_python_client-6.0.2/docs/webdriver.common.rst +21 -0
  342. appium_python_client-6.0.2/docs/webdriver.extensions.android.rst +93 -0
  343. appium_python_client-6.0.2/docs/webdriver.extensions.flutter_integration.rst +37 -0
  344. appium_python_client-6.0.2/docs/webdriver.extensions.rst +158 -0
  345. appium_python_client-6.0.2/docs/webdriver.rst +126 -0
  346. appium_python_client-6.0.2/pyproject.toml +144 -0
  347. appium_python_client-6.0.2/uv.lock +1839 -0
  348. Appium-Python-Client-0.13/Appium_Python_Client.egg-info/PKG-INFO +0 -22
  349. Appium-Python-Client-0.13/Appium_Python_Client.egg-info/SOURCES.txt +0 -26
  350. Appium-Python-Client-0.13/Appium_Python_Client.egg-info/dependency_links.txt +0 -1
  351. Appium-Python-Client-0.13/Appium_Python_Client.egg-info/requires.txt +0 -2
  352. Appium-Python-Client-0.13/Appium_Python_Client.egg-info/top_level.txt +0 -1
  353. Appium-Python-Client-0.13/LICENSE +0 -13
  354. Appium-Python-Client-0.13/PKG-INFO +0 -22
  355. Appium-Python-Client-0.13/appium/saucetestcase.py +0 -56
  356. Appium-Python-Client-0.13/appium/webdriver/common/multi_action.py +0 -79
  357. Appium-Python-Client-0.13/appium/webdriver/common/touch_action.py +0 -130
  358. Appium-Python-Client-0.13/appium/webdriver/errorhandler.py +0 -30
  359. Appium-Python-Client-0.13/appium/webdriver/mobilecommand.py +0 -56
  360. Appium-Python-Client-0.13/appium/webdriver/webdriver.py +0 -786
  361. Appium-Python-Client-0.13/appium/webdriver/webelement.py +0 -105
  362. Appium-Python-Client-0.13/docs/roadmap.md +0 -36
  363. Appium-Python-Client-0.13/docs/touch_actions.md +0 -105
  364. Appium-Python-Client-0.13/setup.cfg +0 -5
  365. Appium-Python-Client-0.13/setup.py +0 -54
  366. {Appium-Python-Client-0.13 → appium_python_client-6.0.2}/MANIFEST.in +0 -0
  367. {Appium-Python-Client-0.13 → appium_python_client-6.0.2}/appium/common/__init__.py +0 -0
  368. /Appium-Python-Client-0.13/README.txt → /appium_python_client-6.0.2/appium/options/__init__.py +0 -0
  369. {Appium-Python-Client-0.13 → appium_python_client-6.0.2}/appium/webdriver/common/__init__.py +0 -0
@@ -0,0 +1,65 @@
1
+ name: 'Start Appium Server'
2
+ description: 'Start Appium server with configurable arguments and wait for startup'
3
+
4
+ inputs:
5
+ port:
6
+ description: 'Appium server port'
7
+ required: false
8
+ default: '4723'
9
+ host:
10
+ description: 'Appium server host'
11
+ required: false
12
+ default: '127.0.0.1'
13
+ timeout:
14
+ description: 'Timeout in seconds to wait for server startup'
15
+ required: false
16
+ default: '25'
17
+ server_args:
18
+ description: 'Additional server arguments (space-separated)'
19
+ required: false
20
+ default: ''
21
+ log_file:
22
+ description: 'Log file name'
23
+ required: false
24
+ default: 'appium.log'
25
+
26
+ runs:
27
+ using: 'composite'
28
+ steps:
29
+ - name: Start Appium server
30
+ shell: bash
31
+ run: |
32
+ nohup appium server \
33
+ --port=${{ inputs.port }} \
34
+ --address=${{ inputs.host }} \
35
+ --log-no-colors \
36
+ --log-timestamp \
37
+ --keep-alive-timeout 1200 \
38
+ ${{ inputs.server_args }} \
39
+ 2>&1 > ${{ inputs.log_file }} &
40
+
41
+ - name: Wait for Appium server to start
42
+ shell: bash
43
+ run: |
44
+ TIMEOUT_SEC=${{ inputs.timeout }}
45
+ INTERVAL_SEC=1
46
+
47
+ start_time=$(date +%s)
48
+ while true; do
49
+ current_time=$(date +%s)
50
+ elapsed=$((current_time - start_time))
51
+
52
+ if nc -z ${{ inputs.host }} ${{ inputs.port }}; then
53
+ echo "Appium server is running after $elapsed seconds"
54
+ cat ${{ inputs.log_file }}
55
+ exit 0
56
+ fi
57
+
58
+ if [[ "$elapsed" -ge "$TIMEOUT_SEC" ]]; then
59
+ echo "${elapsed} seconds timeout reached: Appium server is NOT running"
60
+ exit 1
61
+ fi
62
+
63
+ echo "Waiting $elapsed seconds for Appium server to start..."
64
+ sleep "$INTERVAL_SEC"
65
+ done
@@ -0,0 +1,17 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: uv
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: "11:00"
8
+ open-pull-requests-limit: 10
9
+ - package-ecosystem: github-actions
10
+ directory: "/"
11
+ schedule:
12
+ interval: weekly
13
+ time: "11:00"
14
+ open-pull-requests-limit: 10
15
+ commit-message:
16
+ prefix: "ci"
17
+ include: "scope"
@@ -0,0 +1,23 @@
1
+ ## The problem
2
+
3
+ Briefly describe the issue you are experiencing (or the feature you want to see added to Appium). Tell us what you were trying to do and what happened instead. Remember, this is _not_ a place to ask questions. For that, go to http://discuss.appium.io!
4
+
5
+
6
+ ## Environment
7
+ - Appium version (or git revision) that exhibits the issue:
8
+ - Last Appium version that did not exhibit the issue (if applicable):
9
+ - Desktop OS/version used to run Appium:
10
+ - Node.js version (unless using Appium.app|exe):
11
+ - Mobile platform/version under test:
12
+ - Real device or emulator/simulator:
13
+ - Appium CLI or Appium.app|exe:
14
+
15
+ ## Details
16
+
17
+ If necessary, describe the problem you have been experiencing in more detail.
18
+
19
+ ## Link to Appium Logs
20
+
21
+ Create a [GIST](https://gist.github.com) which is a paste of your _full_ Appium logs, and link them here.
22
+
23
+ ## Code To reproduce issue
@@ -0,0 +1,368 @@
1
+ name: Functional Tests
2
+
3
+ on:
4
+ # Run by manual at this time
5
+ workflow_dispatch:
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ env:
14
+ APPIUM_TEST_SERVER_PORT: '4723'
15
+ APPIUM_TEST_SERVER_HOST: '127.0.0.1'
16
+ PYTHONUNBUFFERED: 1
17
+
18
+ jobs:
19
+ ios_test:
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ test_targets:
24
+ - target: test/functional/ios/safari_tests.py
25
+ name: func_test_ios1
26
+
27
+ runs-on: macos-15
28
+
29
+ # Please make sure the available Xcode versions and iOS versions
30
+ # on the runner images. https://github.com/actions/runner-images
31
+ env:
32
+ XCODE_VERSION: '16.4'
33
+ IOS_VERSION: '18.5'
34
+ IPHONE_MODEL: 'iPhone 16 Plus'
35
+ PREBUILT_WDA_PATH: ${{ github.workspace }}/wda/WebDriverAgentRunner-Runner.app
36
+
37
+ steps:
38
+ - uses: actions/checkout@v7
39
+
40
+ - name: Install Node.js
41
+ uses: actions/setup-node@v7
42
+ with:
43
+ node-version: 'lts/*'
44
+
45
+ - name: Select Xcode
46
+ uses: maxim-lobanov/setup-xcode@v1
47
+ with:
48
+ xcode-version: ${{ env.XCODE_VERSION }}
49
+
50
+ - name: Install Appium and drivers
51
+ run: |
52
+ npm install -g appium
53
+ appium driver install xcuitest
54
+ appium driver run xcuitest download-wda-sim --platform=ios --outdir=$(dirname "$PREBUILT_WDA_PATH")
55
+
56
+ - name: Start Appium server
57
+ uses: ./.github/actions/setup-appium-server
58
+ with:
59
+ port: ${{ env.APPIUM_TEST_SERVER_PORT }}
60
+ host: ${{ env.APPIUM_TEST_SERVER_HOST }}
61
+ server_args: '--relaxed-security'
62
+
63
+ - name: Start iOS Simulator UI
64
+ run: |
65
+ defaults write com.apple.iphonesimulator PasteboardAutomaticSync -bool false
66
+ open -Fn "$(xcode-select --print-path)/Applications/Simulator.app"
67
+ - name: Prepare iOS simulator
68
+ uses: futureware-tech/simulator-action@v5
69
+ with:
70
+ model: ${{ env.IPHONE_MODEL }}
71
+ os_version: ${{ env.IOS_VERSION }}
72
+ wait_for_boot: true
73
+ shutdown_after_job: false
74
+
75
+ - name: Finalize iOS simulator boot
76
+ run: xcrun --sdk iphonesimulator --show-sdk-version
77
+
78
+ - name: Set up Python
79
+ uses: actions/setup-python@v7
80
+ with:
81
+ python-version: 3.14
82
+
83
+ - name: Cache uv modules
84
+ uses: actions/cache@v6
85
+ with:
86
+ path: |
87
+ ~/.cache/uv
88
+ .venv
89
+ key: ${{ runner.os }}-uv-shared-${{ hashFiles('**/uv.lock') }}
90
+ restore-keys: |
91
+ ${{ runner.os }}-uv-shared-
92
+
93
+ - name: Install uv
94
+ run: make install-uv
95
+
96
+ - name: Run Tests
97
+ run: |
98
+ uv run pytest -v ${{ matrix.test_targets.target}} \
99
+ --doctest-modules \
100
+ --junitxml=junit/test-results.xml \
101
+ --cov=com \
102
+ --cov-report=xml \
103
+ --cov-report=html
104
+ env:
105
+ LOCAL_PREBUILT_WDA: ${{ env.PREBUILT_WDA_PATH }}
106
+
107
+ - name: Save server output
108
+ if: ${{ always() }}
109
+ uses: actions/upload-artifact@master
110
+ with:
111
+ name: appium-ios-${{matrix.test_targets.name}}.log
112
+ path: appium.log
113
+
114
+
115
+ android_test:
116
+ strategy:
117
+ fail-fast: false
118
+ matrix:
119
+ test_targets:
120
+ - target: test/functional/android/appium_service_tests.py test/functional/android/chrome_tests.py test/functional/android/bidi_tests.py
121
+ name: func_test_android1
122
+
123
+ runs-on: ubuntu-latest
124
+
125
+ env:
126
+ API_LEVEL: 29
127
+ ARCH: x86
128
+
129
+ steps:
130
+ - uses: actions/checkout@v7
131
+
132
+ - uses: actions/setup-java@v6.0.0
133
+ with:
134
+ distribution: 'temurin'
135
+ java-version: '17'
136
+
137
+ - name: Install ffmpeg
138
+ run: |
139
+ sudo apt-get update
140
+ sudo apt-get install -y ffmpeg
141
+
142
+ - name: Install Node.js
143
+ uses: actions/setup-node@v7
144
+ with:
145
+ node-version: 'lts/*'
146
+
147
+ - name: Install Appium and drivers
148
+ run: |
149
+ npm install -g appium
150
+ appium driver install uiautomator2
151
+ appium driver install espresso
152
+ appium plugin install execute-driver
153
+
154
+ - name: Start Appium server
155
+ uses: ./.github/actions/setup-appium-server
156
+ with:
157
+ port: ${{ env.APPIUM_TEST_SERVER_PORT }}
158
+ host: ${{ env.APPIUM_TEST_SERVER_HOST }}
159
+ server_args: '--relaxed-security --use-plugins=execute-driver'
160
+
161
+ - name: Enable KVM group perms
162
+ run: |
163
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
164
+ sudo udevadm control --reload-rules
165
+ sudo udevadm trigger --name-match=kvm
166
+
167
+ - name: AVD cache
168
+ uses: actions/cache@v6
169
+ id: avd-cache
170
+ with:
171
+ path: |
172
+ ~/.android/avd/*
173
+ ~/.android/adb*
174
+ key: avd-${{ env.API_LEVEL }}
175
+ - name: Create AVD and generate snapshot for caching
176
+ if: steps.avd-cache.outputs.cache-hit != 'true'
177
+ uses: reactivecircus/android-emulator-runner@v2
178
+ with:
179
+ api-level: ${{ env.API_LEVEL }}
180
+ arch: ${{ env.ARCH }}
181
+ target: google_apis
182
+ force-avd-creation: false
183
+ emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
184
+ disable-animations: false
185
+ script: echo "Generated AVD snapshot for caching."
186
+
187
+ - name: Set up Python 3.14
188
+ uses: actions/setup-python@v7
189
+ with:
190
+ python-version: 3.14
191
+
192
+ - name: Cache uv modules
193
+ uses: actions/cache@v6
194
+ with:
195
+ path: |
196
+ ~/.cache/uv
197
+ .venv
198
+ key: ${{ runner.os }}-uv-shared-${{ hashFiles('**/uv.lock') }}
199
+ restore-keys: |
200
+ ${{ runner.os }}-uv-shared-
201
+
202
+ - name: Run tests
203
+ uses: reactivecircus/android-emulator-runner@v2
204
+ with:
205
+ api-level: ${{ env.API_LEVEL }}
206
+ arch: ${{ env.ARCH }}
207
+ script: |
208
+ make install-uv
209
+ uv run pytest -v ${{ matrix.test_targets.target}} --doctest-modules --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html
210
+ target: google_apis
211
+ profile: Nexus 5X
212
+ disable-spellchecker: true
213
+ disable-animations: true
214
+
215
+ env:
216
+ ANDROID_SDK_VERSION: ${{ env.API_LEVEL }}
217
+ APPIUM_DRIVER: ${{matrix.test_targets.automation_name}}
218
+ IGNORE_VERSION_SKIP: true
219
+ CI: true
220
+
221
+ - name: Save server output
222
+ if: ${{ always() }}
223
+ uses: actions/upload-artifact@master
224
+ with:
225
+ name: appium-android-${{matrix.test_targets.name}}.log
226
+ path: appium.log
227
+
228
+ flutter_e2e_test:
229
+ # These flutter integration driver tests are maintained by: MummanaSubramanya
230
+ strategy:
231
+ fail-fast: false
232
+ matrix:
233
+ include:
234
+ - platform: macos-15
235
+ e2e-tests: flutter-ios
236
+ - platform: ubuntu-latest
237
+ e2e-tests: flutter-android
238
+
239
+ runs-on: ${{ matrix.platform }}
240
+
241
+ env:
242
+ API_LEVEL: 28
243
+ ARCH: x86
244
+ CI: true
245
+ XCODE_VERSION: 16.4
246
+ IOS_VERSION: 18.5
247
+ IPHONE_MODEL: iPhone 16
248
+ FLUTTER_ANDROID_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/download/0.0.33/app-debug.apk"
249
+ FLUTTER_IOS_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/download/0.0.33/ios.zip"
250
+ PREBUILT_WDA_PATH: ${{ github.workspace }}/wda/WebDriverAgentRunner-Runner.app
251
+
252
+ steps:
253
+
254
+ - uses: actions/checkout@v7
255
+
256
+ - uses: actions/setup-java@v6.0.0
257
+ if: matrix.e2e-tests == 'flutter-android'
258
+ with:
259
+ distribution: 'zulu'
260
+ java-version: '17'
261
+
262
+ - name: Enable KVM group perms
263
+ if: matrix.e2e-tests == 'flutter-android'
264
+ run: |
265
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
266
+ sudo udevadm control --reload-rules
267
+ sudo udevadm trigger --name-match=kvm
268
+
269
+ - name: Set up Python 3.14
270
+ uses: actions/setup-python@v7
271
+ with:
272
+ python-version: 3.14
273
+
274
+ - name: Install Node.js
275
+ uses: actions/setup-node@v7
276
+ with:
277
+ node-version: 'lts/*'
278
+
279
+ - name: Select Xcode
280
+ if: matrix.e2e-tests == 'flutter-ios'
281
+ uses: maxim-lobanov/setup-xcode@v1
282
+ with:
283
+ xcode-version: ${{ env.XCODE_VERSION }}
284
+
285
+ - name: Install Appium and drivers
286
+ if: matrix.e2e-tests == 'flutter-android'
287
+ run: |
288
+ npm install --location=global appium
289
+ appium driver install uiautomator2
290
+ appium driver install appium-flutter-integration-driver --source npm
291
+
292
+ - name: Install Appium and drivers
293
+ if: matrix.e2e-tests == 'flutter-ios'
294
+ run: |
295
+ npm install --location=global appium
296
+ appium driver install xcuitest
297
+ appium driver run xcuitest download-wda-sim --platform=ios --outdir=$(dirname "$PREBUILT_WDA_PATH")
298
+ appium driver install appium-flutter-integration-driver --source npm
299
+
300
+ - name: Start Appium server
301
+ uses: ./.github/actions/setup-appium-server
302
+ with:
303
+ port: ${{ env.APPIUM_TEST_SERVER_PORT }}
304
+ host: ${{ env.APPIUM_TEST_SERVER_HOST }}
305
+ server_args: '--relaxed-security'
306
+ log_file: appium-${{ matrix.e2e-tests }}.log
307
+
308
+ - name: Cache uv modules
309
+ uses: actions/cache@v6
310
+ with:
311
+ path: |
312
+ ~/.cache/uv
313
+ .venv
314
+ key: ${{ runner.os }}-uv-shared-${{ hashFiles('**/uv.lock') }}
315
+ restore-keys: |
316
+ ${{ runner.os }}-uv-shared-
317
+
318
+ - name: Run Android tests
319
+ if: matrix.e2e-tests == 'flutter-android'
320
+ uses: reactivecircus/android-emulator-runner@v2
321
+ with:
322
+ api-level: ${{ env.API_LEVEL }}
323
+ script: |
324
+ make install-uv
325
+ uv run pytest -v test/functional/flutter_integration/*_test.py --doctest-modules --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html
326
+ target: default
327
+ disable-spellchecker: true
328
+ disable-animations: true
329
+
330
+ - name: Start iOS Simulator UI
331
+ if: matrix.e2e-tests == 'flutter-ios'
332
+ run: |
333
+ defaults write com.apple.iphonesimulator PasteboardAutomaticSync -bool false
334
+ open -Fn "$(xcode-select --print-path)/Applications/Simulator.app"
335
+
336
+ - uses: futureware-tech/simulator-action@v5
337
+ if: matrix.e2e-tests == 'flutter-ios'
338
+ with:
339
+ # https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md
340
+ model: ${{ env.IPHONE_MODEL }}
341
+ os_version: ${{ env.IOS_VERSION }}
342
+ wait_for_boot: true
343
+ shutdown_after_job: false
344
+
345
+ - name: Finalize iOS simulator boot
346
+ if: matrix.e2e-tests == 'flutter-ios'
347
+ run: xcrun --sdk iphonesimulator --show-sdk-version
348
+
349
+ - name: Run IOS tests
350
+ if: matrix.e2e-tests == 'flutter-ios'
351
+ run: |
352
+ make install-uv
353
+ export PLATFORM=ios
354
+ uv run pytest -v test/functional/flutter_integration/*_test.py \
355
+ --doctest-modules \
356
+ --junitxml=junit/test-results.xml \
357
+ --cov=com \
358
+ --cov-report=xml \
359
+ --cov-report=html
360
+ env:
361
+ LOCAL_PREBUILT_WDA: ${{ env.PREBUILT_WDA_PATH }}
362
+
363
+ - name: Save server output
364
+ if: ${{ always() }}
365
+ uses: actions/upload-artifact@master
366
+ with:
367
+ name: appium-${{ matrix.e2e-tests }}.log
368
+ path: appium-${{ matrix.e2e-tests }}.log
@@ -0,0 +1,31 @@
1
+ name: Update uv.lock
2
+
3
+ on:
4
+ pull_request:
5
+ types: [ opened, synchronize ]
6
+ paths:
7
+ - 'pyproject.toml'
8
+
9
+ permissions:
10
+ contents: write
11
+ pull-requests: write
12
+
13
+ jobs:
14
+ uv-lock-update:
15
+ if: github.actor == 'dependabot[bot]'
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v7
19
+ with:
20
+ token: ${{ secrets.GITHUB_TOKEN }}
21
+ ref: ${{ github.head_ref }}
22
+ - name: Set up Python
23
+ uses: actions/setup-python@v7
24
+ with:
25
+ python-version: '3.12'
26
+ - name: Install uv
27
+ run: make install-uv
28
+ - run: uv lock
29
+ - uses: stefanzweifel/git-auto-commit-action@v7
30
+ with:
31
+ commit_message: "chore: Refresh uv.lock"
@@ -0,0 +1,10 @@
1
+ name: Conventional Commits
2
+ on:
3
+ pull_request:
4
+ types: [opened, edited, synchronize, reopened]
5
+
6
+ jobs:
7
+ lint:
8
+ uses: appium/appium-workflows/.github/workflows/pr-title.yml@main
9
+ with:
10
+ config-preset: angular
@@ -0,0 +1,50 @@
1
+ name: Release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches: [ master ]
7
+
8
+ permissions:
9
+ contents: write
10
+ id-token: write
11
+
12
+ jobs:
13
+ release:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v7
17
+
18
+ - name: Set up Python
19
+ uses: actions/setup-python@v7
20
+ with:
21
+ python-version: '3.12'
22
+
23
+ - name: Install uv
24
+ run: make install-uv
25
+
26
+ - name: Semantic Release Version
27
+ env:
28
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29
+ run: uv run semantic-release version
30
+
31
+ - name: Check if dist directory exists
32
+ id: check_dist
33
+ run: |
34
+ if [ -d "dist" ]; then
35
+ echo "exists=true" >> $GITHUB_OUTPUT
36
+ else
37
+ echo "exists=false" >> $GITHUB_OUTPUT
38
+ fi
39
+
40
+ - name: Publish to PyPI
41
+ if: steps.check_dist.outputs.exists == 'true'
42
+ uses: pypa/gh-action-pypi-publish@release/v1
43
+ with:
44
+ packages-dir: dist/
45
+
46
+ - name: Publish GitHub Release
47
+ if: steps.check_dist.outputs.exists == 'true'
48
+ env:
49
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
50
+ run: uv run semantic-release publish
@@ -0,0 +1,36 @@
1
+ name: Unit tests
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches: [ master ]
7
+ pull_request:
8
+ branches: [ master ]
9
+
10
+ jobs:
11
+ test-ubuntu:
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ matrix:
15
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
16
+ steps:
17
+ - uses: actions/checkout@v7
18
+ - name: Set up Python ${{ matrix.python-version }}
19
+ uses: actions/setup-python@v7
20
+ with:
21
+ python-version: ${{ matrix.python-version }}
22
+ - name: Cache uv modules
23
+ uses: actions/cache@v6
24
+ with:
25
+ path: |
26
+ ~/.cache/uv
27
+ .venv
28
+ key: ${{ runner.os }}-uv-shared-${{ hashFiles('**/uv.lock') }}
29
+ restore-keys: |
30
+ ${{ runner.os }}-uv-shared-
31
+ - name: Install uv
32
+ run: make install-uv
33
+ - name: Run Checks
34
+ run: make check
35
+ - name: Run Unit Tests
36
+ run: make unittest
@@ -0,0 +1,30 @@
1
+ .DS_Store
2
+
3
+ *~
4
+ *#
5
+ *._*
6
+ *.log
7
+ *.log.*
8
+ _*/
9
+
10
+ *.pyc
11
+ *.egg-info
12
+
13
+ MANIFEST
14
+
15
+ build
16
+ dist
17
+
18
+ # Cache
19
+ .cache
20
+ __pycache__
21
+ .idea
22
+ .pytest_cache
23
+ .mypy_cache
24
+
25
+ # Virtual Environments
26
+ venv*
27
+ .venv
28
+ .tox
29
+
30
+ .coverage
@@ -0,0 +1,15 @@
1
+ repos:
2
+ - repo: local
3
+ hooks:
4
+ - id: ruff-check
5
+ name: ruff check
6
+ entry: uv run ruff check
7
+ language: system
8
+ types_or: [python, pyi]
9
+ args: [--fix, --show-fixes]
10
+
11
+ - id: ruff-format
12
+ name: ruff format
13
+ entry: uv run ruff format
14
+ language: system
15
+ types_or: [python, pyi]
@@ -0,0 +1,29 @@
1
+ line-length = 128
2
+ indent-width = 4
3
+
4
+ [lint]
5
+ select = [
6
+ "F", # Pyflakes
7
+ "PL", # Pylint
8
+ "I", # isort
9
+ "PERF", # perflint
10
+ "FURB", # Refurb
11
+ "SIM", # Simplify
12
+ "UP", # Upgrade
13
+ ]
14
+
15
+ [lint.per-file-ignores]
16
+ "__init__.py" = [
17
+ # import violations
18
+ "E402"
19
+ ]
20
+ "**/{test,docs}/*" = [
21
+ # https://docs.astral.sh/ruff/rules/magic-value-comparison/
22
+ "PLR2004"
23
+ ]
24
+
25
+ [lint.pylint]
26
+ max-args = 6
27
+
28
+ [format]
29
+ quote-style = "single"