From 347eec738d72d01b1029dd96872823f07fc0cdf2 Mon Sep 17 00:00:00 2001 From: vyuroshchin Date: Mon, 17 Aug 2026 11:55:13 +0300 Subject: [PATCH] chore: add UP ruff rules and delete old typings --- .github/issue_template.md | 1 - .ruff.toml | 4 +-- appium/common/helper.py | 4 +-- .../common/adb/adb_exec_timeout_option.py | 5 ++- .../android/common/adb/adb_port_option.py | 3 +- .../common/adb/allow_delay_adb_option.py | 3 +- .../common/adb/build_tools_version_option.py | 3 +- .../adb/clear_device_logs_on_start_option.py | 3 +- .../ignore_hidden_api_policy_error_option.py | 3 +- .../common/adb/logcat_filter_specs_option.py | 3 +- .../common/adb/logcat_format_option.py | 3 +- .../common/adb/mock_location_app_option.py | 3 +- .../common/adb/remote_adb_host_option.py | 3 +- .../common/adb/skip_logcat_capture_option.py | 3 +- .../common/adb/suppress_kill_server_option.py | 3 +- .../common/app/allow_test_packages_option.py | 3 +- .../app/android_install_timeout_option.py | 5 ++- .../android/common/app/app_activity_option.py | 3 +- .../android/common/app/app_package_option.py | 3 +- .../common/app/app_wait_activity_option.py | 3 +- .../common/app/app_wait_duration_option.py | 5 ++- .../common/app/app_wait_for_launch_option.py | 3 +- .../common/app/app_wait_package_option.py | 3 +- .../app/auto_grant_premissions_option.py | 3 +- .../common/app/enforce_app_install_option.py | 3 +- .../common/app/intent_action_option.py | 3 +- .../common/app/intent_category_option.py | 3 +- .../android/common/app/intent_flags_option.py | 3 +- .../app/optional_intent_arguments_option.py | 3 +- .../app/remote_apps_cache_limit_option.py | 3 +- .../app/uninstall_other_packages_option.py | 3 +- .../android/common/avd/avd_args_option.py | 3 +- .../android/common/avd/avd_env_option.py | 5 ++- .../common/avd/avd_launch_timeout_option.py | 5 ++- .../options/android/common/avd/avd_option.py | 3 +- .../common/avd/avd_ready_timeout_option.py | 5 ++- .../android/common/avd/gps_enabled_option.py | 3 +- .../common/avd/network_speed_option.py | 3 +- .../context/auto_webview_timeout_option.py | 5 ++- .../context/chrome_logging_prefs_option.py | 6 ++-- .../common/context/chrome_options_option.py | 6 ++-- .../context/chromedriver_args_option.py | 5 ++- ...chromedriver_chrome_mapping_file_option.py | 3 +- ...chromedriver_disable_build_check_option.py | 3 +- .../chromedriver_executable_dir_option.py | 3 +- .../context/chromedriver_executable_option.py | 3 +- .../context/chromedriver_port_option.py | 3 +- .../context/chromedriver_ports_option.py | 5 ++- ...romedriver_use_system_executable_option.py | 3 +- .../ensure_webviews_have_pages_option.py | 3 +- ...ndroid_package_from_context_name_option.py | 3 +- .../context/native_web_screenshot_option.py | 3 +- .../recreate_chrome_driver_sessions_option.py | 3 +- .../context/show_chromedriver_log_option.py | 3 +- .../context/webview_devtools_port_option.py | 3 +- .../localization/locale_script_option.py | 3 +- .../common/locking/skip_unlock_option.py | 3 +- .../common/locking/unlock_key_option.py | 3 +- .../common/locking/unlock_strategy_option.py | 3 +- .../locking/unlock_success_timeout_option.py | 5 ++- .../common/locking/unlock_type_option.py | 3 +- .../mjpeg/mjpeg_screenshot_url_option.py | 3 +- ...e_suppress_accessibility_service_option.py | 3 +- .../common/other/user_profile_option.py | 3 +- .../common/signing/key_alias_option.py | 3 +- .../common/signing/key_password_option.py | 3 +- .../signing/keystore_password_option.py | 3 +- .../common/signing/keystore_path_option.py | 3 +- .../android/common/signing/no_sign_option.py | 3 +- .../common/signing/use_keystore_option.py | 3 +- .../espresso/activity_options_option.py | 5 ++- .../android/espresso/app_locale_option.py | 5 ++- appium/options/android/espresso/base.py | 3 +- .../espresso/espresso_build_config_option.py | 6 ++-- .../espresso_server_launch_timeout_option.py | 5 ++- .../espresso/force_espresso_rebuild_option.py | 3 +- .../android/espresso/intent_options_option.py | 6 ++-- .../espresso/show_gradle_log_option.py | 3 +- appium/options/android/uiautomator2/base.py | 3 +- .../disable_window_animation_option.py | 3 +- .../uiautomator2/mjpeg_server_port_option.py | 3 +- .../skip_device_initialization_option.py | 3 +- .../skip_server_installation_option.py | 3 +- ...utomator2_server_install_timeout_option.py | 5 ++- ...automator2_server_launch_timeout_option.py | 5 ++- ...uiautomator2_server_read_timeout_option.py | 5 ++- appium/options/common/app_option.py | 3 +- appium/options/common/auto_web_view_option.py | 3 +- .../options/common/automation_name_option.py | 3 +- appium/options/common/base.py | 14 ++++---- appium/options/common/browser_name_option.py | 3 +- appium/options/common/bundle_id_option.py | 3 +- .../common/clear_system_files_option.py | 3 +- appium/options/common/device_name_option.py | 3 +- .../enable_performance_logging_option.py | 3 +- appium/options/common/event_timings_option.py | 3 +- appium/options/common/full_reset_option.py | 3 +- appium/options/common/is_headless_option.py | 3 +- appium/options/common/language_option.py | 3 +- appium/options/common/locale_option.py | 3 +- .../common/new_command_timeout_option.py | 5 ++- appium/options/common/no_reset_option.py | 3 +- appium/options/common/orientation_option.py | 3 +- appium/options/common/other_apps_option.py | 3 +- .../options/common/platform_version_option.py | 3 +- appium/options/common/postrun_option.py | 5 ++- appium/options/common/prerun_option.py | 5 ++- ...rint_page_source_on_find_failure_option.py | 3 +- .../options/common/skip_log_capture_option.py | 3 +- appium/options/common/system_host_option.py | 3 +- appium/options/common/system_port_option.py | 3 +- appium/options/common/udid_option.py | 3 +- appium/options/flutter_integration/base.py | 3 +- .../flutter_element_wait_timeout_option.py | 5 ++- .../flutter_server_launch_timeout_option.py | 5 ++- .../flutter_system_port_option.py | 3 +- .../options/gecko/android_storage_option.py | 3 +- appium/options/gecko/base.py | 3 +- .../options/gecko/firefox_options_option.py | 6 ++-- .../options/gecko/marionette_port_option.py | 3 +- appium/options/gecko/verbosity_option.py | 3 +- .../ios/safari/automatic_inspection_option.py | 3 +- .../ios/safari/automatic_profiling_option.py | 3 +- appium/options/ios/safari/base.py | 3 +- .../options/ios/safari/device_name_option.py | 3 +- .../options/ios/safari/device_type_option.py | 3 +- .../options/ios/safari/device_udid_option.py | 3 +- .../safari/platform_build_version_option.py | 3 +- .../ios/safari/platform_version_option.py | 3 +- .../ios/safari/use_simulator_option.py | 3 +- .../ios/safari/webkit_webrtc_option.py | 6 ++-- .../app/app_install_strategy_option.py | 3 +- .../xcuitest/app/app_push_timeout_option.py | 5 ++- .../app/localizable_strings_dir_option.py | 3 +- appium/options/ios/xcuitest/base.py | 3 +- ...lude_device_caps_to_session_info_option.py | 3 +- .../general/reset_location_service_option.py | 3 +- .../xcuitest/other/command_timeouts_option.py | 5 ++- .../xcuitest/other/launch_with_idb_option.py | 3 +- .../ios/xcuitest/other/show_ios_log_option.py | 3 +- .../xcuitest/other/use_json_source_option.py | 3 +- .../calendar_access_authorized_option.py | 3 +- .../simulator/calendar_format_option.py | 3 +- .../connect_hardware_keyboard_option.py | 3 +- .../simulator/custom_ssl_cert_option.py | 3 +- ...enforce_fresh_simulator_creation_option.py | 3 +- ...lator_software_keyboard_presence_option.py | 3 +- .../ios_simulator_logs_predicate_option.py | 3 +- .../simulator/keep_key_chains_option.py | 3 +- .../keychains_exclude_patterns_option.py | 3 +- .../xcuitest/simulator/permissions_option.py | 5 ++- .../simulator/reduce_motion_option.py | 3 +- .../reset_on_session_start_only_option.py | 3 +- .../xcuitest/simulator/scale_factor_option.py | 3 +- .../shutdown_other_simulators_option.py | 3 +- .../simulator_devices_set_path_option.py | 3 +- ...ulator_pasteboard_automatic_sync_option.py | 3 +- .../simulator_startup_timeout_option.py | 5 ++- .../simulator_trace_pointer_option.py | 3 +- .../simulator_window_center_option.py | 3 +- ..._provisioning_device_regitration_option.py | 3 +- .../xcuitest/wda/auto_accept_alerts_option.py | 3 +- .../wda/auto_disimiss_alerts_option.py | 3 +- .../xcuitest/wda/derived_data_path_option.py | 3 +- .../disable_automatic_screenshots_option.py | 3 +- .../xcuitest/wda/force_app_launch_option.py | 3 +- .../xcuitest/wda/keychain_password_option.py | 3 +- .../ios/xcuitest/wda/keychain_path_option.py | 3 +- .../wda/max_typing_frequency_option.py | 3 +- .../xcuitest/wda/mjpeg_server_port_option.py | 3 +- .../xcuitest/wda/prebuilt_wda_path_option.py | 3 +- .../xcuitest/wda/process_arguments_option.py | 5 ++- .../xcuitest/wda/result_bundle_path_option.py | 3 +- .../xcuitest/wda/screenshot_quality_option.py | 3 +- .../wda/should_terminate_app_option.py | 3 +- ...hould_use_singleton_test_manager_option.py | 3 +- .../ios/xcuitest/wda/show_xcode_log_option.py | 3 +- .../wda/simple_is_visible_check_option.py | 3 +- .../wda/updated_wda_bundle_id_option.py | 3 +- .../wda/use_native_caching_strategy_option.py | 3 +- .../ios/xcuitest/wda/use_new_wda_option.py | 3 +- .../xcuitest/wda/use_prebuilt_wda_option.py | 3 +- .../wda/use_preinstalled_wda_option.py | 3 +- .../wda/use_simple_build_test_option.py | 3 +- .../xcuitest/wda/use_xctestrun_file_option.py | 3 +- .../wda/wait_for_idle_timeout_option.py | 5 ++- .../wda/wait_for_quiescence_option.py | 5 ++- .../ios/xcuitest/wda/wda_base_url_option.py | 3 +- .../wda/wda_connection_timeout_option.py | 5 ++- .../wda/wda_eventloop_idle_delay_option.py | 5 ++- .../xcuitest/wda/wda_launch_timeout_option.py | 5 ++- .../ios/xcuitest/wda/wda_local_port_option.py | 3 +- .../wda/wda_startup_retries_option.py | 3 +- .../wda/wda_startup_retry_interval_option.py | 5 ++- .../wda/web_driver_agent_url_option.py | 3 +- .../ios/xcuitest/wda/xcode_org_id_option.py | 3 +- .../xcuitest/wda/xcode_signing_id_option.py | 3 +- .../webview/absolute_web_locations_option.py | 3 +- .../additional_webview_bundle_ids_option.py | 5 ++- .../enable_async_execute_from_https_option.py | 3 +- .../webview/full_context_list_option.py | 3 +- .../include_safari_in_webviews_option.py | 3 +- .../xcuitest/webview/native_web_tap_option.py | 3 +- .../webview/safari_garbage_collect_option.py | 3 +- .../safari_ignore_fraud_warning_option.py | 3 +- .../safari_ignore_web_hostnames_option.py | 3 +- .../webview/safari_initial_url_option.py | 3 +- ...i_log_all_communication_hex_dump_option.py | 3 +- .../safari_log_all_communication_option.py | 3 +- .../safari_open_links_in_background_option.py | 3 +- .../safari_socket_chunk_size_option.py | 3 +- ...i_web_inspector_max_frame_length_option.py | 3 +- .../webview/webkit_response_timeout_option.py | 5 ++- .../webview/webview_connect_retries_option.py | 3 +- .../webview/webview_connect_timeout_option.py | 5 ++- appium/options/mac/mac2/app_path_option.py | 5 ++- appium/options/mac/mac2/arguments_option.py | 5 ++- appium/options/mac/mac2/base.py | 7 ++-- .../options/mac/mac2/bootstrap_root_option.py | 3 +- appium/options/mac/mac2/environment_option.py | 5 ++- .../mac/mac2/server_startup_timeout_option.py | 5 ++- .../mac/mac2/show_server_logs_option.py | 3 +- .../options/mac/mac2/skip_app_kill_option.py | 3 +- .../mac2/web_driver_agent_mac_url_option.py | 3 +- .../windows/windows/app_arguments_option.py | 3 +- .../windows/app_top_level_window_option.py | 3 +- .../windows/windows/app_working_dir_option.py | 3 +- appium/options/windows/windows/base.py | 7 ++-- .../windows/create_session_timeout_option.py | 5 ++- .../windows/expreimental_web_driver_option.py | 3 +- .../windows/wait_for_app_launch_option.py | 5 ++- .../webdriver/can_execute_commands.py | 4 +-- .../webdriver/can_execute_scripts.py | 6 ++-- .../protocols/webdriver/can_find_elements.py | 6 ++-- appium/webdriver/appium_connection.py | 6 ++-- appium/webdriver/appium_service.py | 33 ++++++++--------- appium/webdriver/errorhandler.py | 13 +++---- appium/webdriver/extensions/action_helpers.py | 8 ++--- .../extensions/android/performance.py | 9 ++--- .../extensions/android/system_bars.py | 3 +- appium/webdriver/extensions/applications.py | 4 +-- appium/webdriver/extensions/clipboard.py | 5 ++- appium/webdriver/extensions/context.py | 3 +- appium/webdriver/extensions/device_time.py | 3 +- appium/webdriver/extensions/execute_driver.py | 8 ++--- .../extensions/execute_mobile_command.py | 4 +-- .../flutter_integration/flutter_commands.py | 32 ++++++++--------- .../flutter_integration/flutter_finder.py | 6 ++-- appium/webdriver/extensions/hw_actions.py | 3 +- .../webdriver/extensions/images_comparison.py | 10 +++--- appium/webdriver/extensions/keyboard.py | 9 +++-- appium/webdriver/extensions/location.py | 13 ++++--- appium/webdriver/extensions/log_event.py | 3 +- appium/webdriver/extensions/logs.py | 6 ++-- appium/webdriver/extensions/remote_fs.py | 5 ++- appium/webdriver/extensions/screen_record.py | 4 +-- appium/webdriver/extensions/session.py | 3 +- appium/webdriver/extensions/settings.py | 6 ++-- appium/webdriver/locator_converter.py | 3 +- appium/webdriver/switch_to.py | 3 +- appium/webdriver/webdriver.py | 35 ++++++++++--------- appium/webdriver/webelement.py | 11 +++--- pyproject.toml | 2 +- .../android/appium_service_tests.py | 3 +- test/functional/android/bidi_tests.py | 3 +- test/functional/android/chrome_tests.py | 3 +- test/functional/android/options.py | 3 +- .../flutter_integration/conftest.py | 3 +- .../flutter_integration/helper/options.py | 4 +-- test/functional/ios/helper/options.py | 3 +- test/functional/ios/safari_tests.py | 3 +- .../mac/helper/desired_capabilities.py | 6 ++-- test/functional/test_helper.py | 7 ++-- test/unit/helper/test_helper.py | 4 +-- test/unit/webdriver/device/clipboard_test.py | 2 +- test/unit/webdriver/device/keyboard_test.py | 4 +-- test/unit/webdriver/webdriver_test.py | 2 +- 277 files changed, 450 insertions(+), 681 deletions(-) diff --git a/.github/issue_template.md b/.github/issue_template.md index 6251abfd0..09aaff213 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -21,4 +21,3 @@ If necessary, describe the problem you have been experiencing in more detail. Create a [GIST](https://gist.github.com) which is a paste of your _full_ Appium logs, and link them here. ## Code To reproduce issue - diff --git a/.ruff.toml b/.ruff.toml index c6098e28c..46e769858 100644 --- a/.ruff.toml +++ b/.ruff.toml @@ -8,7 +8,8 @@ select = [ "I", # isort "PERF", # perflint "FURB", # Refurb - "SIM" # Simplify + "SIM", # Simplify + "UP", # Upgrade ] [lint.per-file-ignores] @@ -22,7 +23,6 @@ select = [ ] [lint.pylint] - max-args = 6 [format] diff --git a/appium/common/helper.py b/appium/common/helper.py index 1565b96e9..821b7c9f8 100644 --- a/appium/common/helper.py +++ b/appium/common/helper.py @@ -13,12 +13,12 @@ # limitations under the License. import base64 -from typing import Any, Dict +from typing import Any from appium import version as appium_version -def extract_const_attributes(cls: type) -> Dict[str, Any]: +def extract_const_attributes(cls: type) -> dict[str, Any]: """Return dict with constants attributes and values in the class(e.g. {'VAL1': 1, 'VAL2': 2}) Args: diff --git a/appium/options/android/common/adb/adb_exec_timeout_option.py b/appium/options/android/common/adb/adb_exec_timeout_option.py index f0ea5b802..f89b140a6 100644 --- a/appium/options/android/common/adb/adb_exec_timeout_option.py +++ b/appium/options/android/common/adb/adb_exec_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class AdbExecTimeoutOption(SupportsCapabilities): @property - def adb_exec_timeout(self) -> Optional[timedelta]: + def adb_exec_timeout(self) -> timedelta | None: """ Maximum time to wait until single ADB command is executed. """ @@ -33,7 +32,7 @@ def adb_exec_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @adb_exec_timeout.setter - def adb_exec_timeout(self, value: Union[timedelta, int]) -> None: + def adb_exec_timeout(self, value: timedelta | int) -> None: """ Maximum time to wait until single ADB command is executed. 20000 ms by default. diff --git a/appium/options/android/common/adb/adb_port_option.py b/appium/options/android/common/adb/adb_port_option.py index 4685c7a0f..515d0ae6a 100644 --- a/appium/options/android/common/adb/adb_port_option.py +++ b/appium/options/android/common/adb/adb_port_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AdbPortOption(SupportsCapabilities): @property - def adb_port(self) -> Optional[int]: + def adb_port(self) -> int | None: """ Number of the port where ADB is running. """ diff --git a/appium/options/android/common/adb/allow_delay_adb_option.py b/appium/options/android/common/adb/allow_delay_adb_option.py index cafd6ff3c..578552699 100644 --- a/appium/options/android/common/adb/allow_delay_adb_option.py +++ b/appium/options/android/common/adb/allow_delay_adb_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AllowDelayAdbOption(SupportsCapabilities): @property - def allow_delay_adb(self) -> Optional[bool]: + def allow_delay_adb(self) -> bool | None: """ Whether to prevent the emulator to use -delay-adb feature. """ diff --git a/appium/options/android/common/adb/build_tools_version_option.py b/appium/options/android/common/adb/build_tools_version_option.py index a5cd96c71..6c1172eac 100644 --- a/appium/options/android/common/adb/build_tools_version_option.py +++ b/appium/options/android/common/adb/build_tools_version_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class BuildToolsVersionOption(SupportsCapabilities): @property - def build_tools_version(self) -> Optional[str]: + def build_tools_version(self) -> str | None: """ Version of Android build tools to use. """ diff --git a/appium/options/android/common/adb/clear_device_logs_on_start_option.py b/appium/options/android/common/adb/clear_device_logs_on_start_option.py index 050cc6a7d..42212dc6a 100644 --- a/appium/options/android/common/adb/clear_device_logs_on_start_option.py +++ b/appium/options/android/common/adb/clear_device_logs_on_start_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ClearDeviceLogsOnStartOption(SupportsCapabilities): @property - def clear_device_logs_on_start(self) -> Optional[bool]: + def clear_device_logs_on_start(self) -> bool | None: """ Makes the driver to delete all the existing logs in the device buffer before starting a new test. diff --git a/appium/options/android/common/adb/ignore_hidden_api_policy_error_option.py b/appium/options/android/common/adb/ignore_hidden_api_policy_error_option.py index 4813ed246..6f77685a7 100644 --- a/appium/options/android/common/adb/ignore_hidden_api_policy_error_option.py +++ b/appium/options/android/common/adb/ignore_hidden_api_policy_error_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class IgnoreHiddenApiPolicyErrorOption(SupportsCapabilities): @property - def ignore_hidden_api_policy_error(self) -> Optional[bool]: + def ignore_hidden_api_policy_error(self) -> bool | None: """ Whether to ignore a failure while changing hidden API access policies. """ diff --git a/appium/options/android/common/adb/logcat_filter_specs_option.py b/appium/options/android/common/adb/logcat_filter_specs_option.py index 8a464d350..16b9dd97c 100644 --- a/appium/options/android/common/adb/logcat_filter_specs_option.py +++ b/appium/options/android/common/adb/logcat_filter_specs_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class LogcatFilterSpecsOption(SupportsCapabilities): @property - def logcat_filter_specs(self) -> Optional[str]: + def logcat_filter_specs(self) -> str | None: """ Logcat filter format. """ diff --git a/appium/options/android/common/adb/logcat_format_option.py b/appium/options/android/common/adb/logcat_format_option.py index 363a6f5a7..74ba8fcfe 100644 --- a/appium/options/android/common/adb/logcat_format_option.py +++ b/appium/options/android/common/adb/logcat_format_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class LogcatFormatOption(SupportsCapabilities): @property - def logcat_format(self) -> Optional[str]: + def logcat_format(self) -> str | None: """ Log print format. """ diff --git a/appium/options/android/common/adb/mock_location_app_option.py b/appium/options/android/common/adb/mock_location_app_option.py index d263ea0e6..aa919ade5 100644 --- a/appium/options/android/common/adb/mock_location_app_option.py +++ b/appium/options/android/common/adb/mock_location_app_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class MockLocationAppOption(SupportsCapabilities): @property - def mock_location_app(self) -> Optional[str]: + def mock_location_app(self) -> str | None: """ Identifier of the app, which is used as a system mock location provider. """ diff --git a/appium/options/android/common/adb/remote_adb_host_option.py b/appium/options/android/common/adb/remote_adb_host_option.py index 1656e9bd5..3a7940565 100644 --- a/appium/options/android/common/adb/remote_adb_host_option.py +++ b/appium/options/android/common/adb/remote_adb_host_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class RemoteAdbHostOption(SupportsCapabilities): @property - def remote_adb_host(self) -> Optional[str]: + def remote_adb_host(self) -> str | None: """ Address of the host where ADB is running. """ diff --git a/appium/options/android/common/adb/skip_logcat_capture_option.py b/appium/options/android/common/adb/skip_logcat_capture_option.py index 2f9f9074f..a6998ca11 100644 --- a/appium/options/android/common/adb/skip_logcat_capture_option.py +++ b/appium/options/android/common/adb/skip_logcat_capture_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SkipLogcatCaptureOption(SupportsCapabilities): @property - def skip_logcat_capture(self) -> Optional[bool]: + def skip_logcat_capture(self) -> bool | None: """ Whether to delete all the existing logs in the device buffer before starting a new test. diff --git a/appium/options/android/common/adb/suppress_kill_server_option.py b/appium/options/android/common/adb/suppress_kill_server_option.py index fb7738994..ed54e99b4 100644 --- a/appium/options/android/common/adb/suppress_kill_server_option.py +++ b/appium/options/android/common/adb/suppress_kill_server_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SuppressKillServerOption(SupportsCapabilities): @property - def suppress_kill_server(self) -> Optional[bool]: + def suppress_kill_server(self) -> bool | None: """ Prevents the driver from ever killing the ADB server explicitly. """ diff --git a/appium/options/android/common/app/allow_test_packages_option.py b/appium/options/android/common/app/allow_test_packages_option.py index b09136932..ea66db61f 100644 --- a/appium/options/android/common/app/allow_test_packages_option.py +++ b/appium/options/android/common/app/allow_test_packages_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AllowTestPackagesOption(SupportsCapabilities): @property - def allow_test_packages(self) -> Optional[bool]: + def allow_test_packages(self) -> bool | None: """ Whether it is possible to use packages built with the test flag for the automated testing (literally adds -t flag to the adb install command). diff --git a/appium/options/android/common/app/android_install_timeout_option.py b/appium/options/android/common/app/android_install_timeout_option.py index 38a997648..cb53c833a 100644 --- a/appium/options/android/common/app/android_install_timeout_option.py +++ b/appium/options/android/common/app/android_install_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class AndroidInstallTimeoutOption(SupportsCapabilities): @property - def android_install_timeout(self) -> Optional[timedelta]: + def android_install_timeout(self) -> timedelta | None: """ Maximum amount of time to wait until the application under test is installed. """ @@ -33,7 +32,7 @@ def android_install_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @android_install_timeout.setter - def android_install_timeout(self, value: Union[timedelta, int]) -> None: + def android_install_timeout(self, value: timedelta | int) -> None: """ Maximum amount of time to wait until the application under test is installed. 90000 ms by default diff --git a/appium/options/android/common/app/app_activity_option.py b/appium/options/android/common/app/app_activity_option.py index 41f66eed8..1df540a95 100644 --- a/appium/options/android/common/app/app_activity_option.py +++ b/appium/options/android/common/app/app_activity_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppActivityOption(SupportsCapabilities): @property - def app_activity(self) -> Optional[str]: + def app_activity(self) -> str | None: """ Name of the main app activity. """ diff --git a/appium/options/android/common/app/app_package_option.py b/appium/options/android/common/app/app_package_option.py index a8c7b065c..ffcb1ad8d 100644 --- a/appium/options/android/common/app/app_package_option.py +++ b/appium/options/android/common/app/app_package_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppPackageOption(SupportsCapabilities): @property - def app_package(self) -> Optional[str]: + def app_package(self) -> str | None: """ App package identifier. """ diff --git a/appium/options/android/common/app/app_wait_activity_option.py b/appium/options/android/common/app/app_wait_activity_option.py index 5d72f311d..bbf726274 100644 --- a/appium/options/android/common/app/app_wait_activity_option.py +++ b/appium/options/android/common/app/app_wait_activity_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppWaitActivityOption(SupportsCapabilities): @property - def app_wait_activity(self) -> Optional[str]: + def app_wait_activity(self) -> str | None: """ Name of the app activity to wait for. """ diff --git a/appium/options/android/common/app/app_wait_duration_option.py b/appium/options/android/common/app/app_wait_duration_option.py index 362cb3725..428dd5df3 100644 --- a/appium/options/android/common/app/app_wait_duration_option.py +++ b/appium/options/android/common/app/app_wait_duration_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class AppWaitDurationOption(SupportsCapabilities): @property - def app_wait_duration(self) -> Optional[timedelta]: + def app_wait_duration(self) -> timedelta | None: """ Identifier of the app package to wait for. """ @@ -33,7 +32,7 @@ def app_wait_duration(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @app_wait_duration.setter - def app_wait_duration(self, value: Union[timedelta, int]) -> None: + def app_wait_duration(self, value: timedelta | int) -> None: """ Maximum amount of time to wait until the application under test is started (e.g. an activity returns the control to the caller). 20000 ms by default. diff --git a/appium/options/android/common/app/app_wait_for_launch_option.py b/appium/options/android/common/app/app_wait_for_launch_option.py index 5f5b48c51..3a34b4fb5 100644 --- a/appium/options/android/common/app/app_wait_for_launch_option.py +++ b/appium/options/android/common/app/app_wait_for_launch_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppWaitForLaunchOption(SupportsCapabilities): @property - def app_wait_for_launch(self) -> Optional[bool]: + def app_wait_for_launch(self) -> bool | None: """ Whether to block until the app under test returns the control to the caller after its activity has been started by Activity Manager. diff --git a/appium/options/android/common/app/app_wait_package_option.py b/appium/options/android/common/app/app_wait_package_option.py index 9df4fa0d0..8ba087205 100644 --- a/appium/options/android/common/app/app_wait_package_option.py +++ b/appium/options/android/common/app/app_wait_package_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppWaitPackageOption(SupportsCapabilities): @property - def app_wait_package(self) -> Optional[str]: + def app_wait_package(self) -> str | None: """ Identifier of the app package to wait for. """ diff --git a/appium/options/android/common/app/auto_grant_premissions_option.py b/appium/options/android/common/app/auto_grant_premissions_option.py index e276e7da4..2aa7e459b 100644 --- a/appium/options/android/common/app/auto_grant_premissions_option.py +++ b/appium/options/android/common/app/auto_grant_premissions_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AutoGrantPermissionsOption(SupportsCapabilities): @property - def auto_grant_permissions(self) -> Optional[bool]: + def auto_grant_permissions(self) -> bool | None: """ Whether to grant all the requested application permissions automatically when a test starts. diff --git a/appium/options/android/common/app/enforce_app_install_option.py b/appium/options/android/common/app/enforce_app_install_option.py index 85d128ed7..0056924b6 100644 --- a/appium/options/android/common/app/enforce_app_install_option.py +++ b/appium/options/android/common/app/enforce_app_install_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class EnforceAppInstallOption(SupportsCapabilities): @property - def enforce_app_install(self) -> Optional[bool]: + def enforce_app_install(self) -> bool | None: """ Whether the application under test is always reinstalled even if a newer version of it already exists on the device under test. diff --git a/appium/options/android/common/app/intent_action_option.py b/appium/options/android/common/app/intent_action_option.py index 8019bcc54..b44dfe781 100644 --- a/appium/options/android/common/app/intent_action_option.py +++ b/appium/options/android/common/app/intent_action_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class IntentActionOption(SupportsCapabilities): @property - def intent_action(self) -> Optional[str]: + def intent_action(self) -> str | None: """ Intent action to be applied when starting the given appActivity by Activity Manager. diff --git a/appium/options/android/common/app/intent_category_option.py b/appium/options/android/common/app/intent_category_option.py index f6f568c20..b39ef5131 100644 --- a/appium/options/android/common/app/intent_category_option.py +++ b/appium/options/android/common/app/intent_category_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class IntentCategoryOption(SupportsCapabilities): @property - def intent_category(self) -> Optional[str]: + def intent_category(self) -> str | None: """ Intent category to be applied when starting the given appActivity by Activity Manager. diff --git a/appium/options/android/common/app/intent_flags_option.py b/appium/options/android/common/app/intent_flags_option.py index 141e51c30..4cff2dc87 100644 --- a/appium/options/android/common/app/intent_flags_option.py +++ b/appium/options/android/common/app/intent_flags_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class IntentFlagsOption(SupportsCapabilities): @property - def intent_flags(self) -> Optional[str]: + def intent_flags(self) -> str | None: """ Intent flags to be applied when starting the given appActivity by Activity Manager. diff --git a/appium/options/android/common/app/optional_intent_arguments_option.py b/appium/options/android/common/app/optional_intent_arguments_option.py index 3411fe96c..66dcf2448 100644 --- a/appium/options/android/common/app/optional_intent_arguments_option.py +++ b/appium/options/android/common/app/optional_intent_arguments_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class OptionalIntentArgumentsOption(SupportsCapabilities): @property - def optional_intent_arguments(self) -> Optional[str]: + def optional_intent_arguments(self) -> str | None: """ Intent arguments to be applied when starting the given appActivity by Activity Manager. diff --git a/appium/options/android/common/app/remote_apps_cache_limit_option.py b/appium/options/android/common/app/remote_apps_cache_limit_option.py index 0f21ec782..a5bd612f5 100644 --- a/appium/options/android/common/app/remote_apps_cache_limit_option.py +++ b/appium/options/android/common/app/remote_apps_cache_limit_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class RemoteAppsCacheLimitOption(SupportsCapabilities): @property - def remote_apps_cache_limit(self) -> Optional[int]: + def remote_apps_cache_limit(self) -> int | None: """ Maximum amount of apps that could be cached on the remote device. """ diff --git a/appium/options/android/common/app/uninstall_other_packages_option.py b/appium/options/android/common/app/uninstall_other_packages_option.py index 2cd05cdf5..0ec72aa13 100644 --- a/appium/options/android/common/app/uninstall_other_packages_option.py +++ b/appium/options/android/common/app/uninstall_other_packages_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UninstallOtherPackagesOption(SupportsCapabilities): @property - def uninstall_other_packages(self) -> Optional[str]: + def uninstall_other_packages(self) -> str | None: """ Identifiers of packages to be uninstalled from the device before a test starts. """ diff --git a/appium/options/android/common/avd/avd_args_option.py b/appium/options/android/common/avd/avd_args_option.py index a8b7b7506..43e3542ef 100644 --- a/appium/options/android/common/avd/avd_args_option.py +++ b/appium/options/android/common/avd/avd_args_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AvdArgsOption(SupportsCapabilities): @property - def avd_args(self) -> Optional[str]: + def avd_args(self) -> str | None: """ Emulator command line arguments. """ diff --git a/appium/options/android/common/avd/avd_env_option.py b/appium/options/android/common/avd/avd_env_option.py index a673a95fd..06447da22 100644 --- a/appium/options/android/common/avd/avd_env_option.py +++ b/appium/options/android/common/avd/avd_env_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict, Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +23,14 @@ class AvdEnvOption(SupportsCapabilities): @property - def avd_env(self) -> Optional[Dict[str, str]]: + def avd_env(self) -> dict[str, str] | None: """ Mapping of emulator environment variables. """ return self.get_capability(AVD_ENV) @avd_env.setter - def avd_env(self, value: Dict[str, str]) -> None: + def avd_env(self, value: dict[str, str]) -> None: """ Set the mapping of emulator environment variables. """ diff --git a/appium/options/android/common/avd/avd_launch_timeout_option.py b/appium/options/android/common/avd/avd_launch_timeout_option.py index 017396ef0..94abb5d3a 100644 --- a/appium/options/android/common/avd/avd_launch_timeout_option.py +++ b/appium/options/android/common/avd/avd_launch_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class AvdLaunchTimeoutOption(SupportsCapabilities): @property - def avd_launch_timeout(self) -> Optional[timedelta]: + def avd_launch_timeout(self) -> timedelta | None: """ Timeout to wait until Android Emulator is started. """ @@ -33,7 +32,7 @@ def avd_launch_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @avd_launch_timeout.setter - def avd_launch_timeout(self, value: Union[timedelta, int]) -> None: + def avd_launch_timeout(self, value: timedelta | int) -> None: """ Maximum timeout to wait until Android Emulator is started. 60000 ms by default. diff --git a/appium/options/android/common/avd/avd_option.py b/appium/options/android/common/avd/avd_option.py index 42c543fc8..e263a2fcc 100644 --- a/appium/options/android/common/avd/avd_option.py +++ b/appium/options/android/common/avd/avd_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AvdOption(SupportsCapabilities): @property - def avd(self) -> Optional[str]: + def avd(self) -> str | None: """ Name of Android emulator to run the test on. """ diff --git a/appium/options/android/common/avd/avd_ready_timeout_option.py b/appium/options/android/common/avd/avd_ready_timeout_option.py index c074b3190..7148cda20 100644 --- a/appium/options/android/common/avd/avd_ready_timeout_option.py +++ b/appium/options/android/common/avd/avd_ready_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class AvdReadyTimeoutOption(SupportsCapabilities): @property - def avd_ready_timeout(self) -> Optional[timedelta]: + def avd_ready_timeout(self) -> timedelta | None: """ Timeout to wait until Android Emulator is fully booted and is ready for usage. """ @@ -33,7 +32,7 @@ def avd_ready_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @avd_ready_timeout.setter - def avd_ready_timeout(self, value: Union[timedelta, int]) -> None: + def avd_ready_timeout(self, value: timedelta | int) -> None: """ Maximum timeout to wait until Android Emulator is fully booted and is ready for usage. 60000 ms by default diff --git a/appium/options/android/common/avd/gps_enabled_option.py b/appium/options/android/common/avd/gps_enabled_option.py index c9b3c60b1..73d0f3cbe 100644 --- a/appium/options/android/common/avd/gps_enabled_option.py +++ b/appium/options/android/common/avd/gps_enabled_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class GpsEnabledOption(SupportsCapabilities): @property - def gps_enabled(self) -> Optional[bool]: + def gps_enabled(self) -> bool | None: """ State of the GPS service on emulator. """ diff --git a/appium/options/android/common/avd/network_speed_option.py b/appium/options/android/common/avd/network_speed_option.py index 1ab6c1cba..b748300c4 100644 --- a/appium/options/android/common/avd/network_speed_option.py +++ b/appium/options/android/common/avd/network_speed_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class NetworkSpeedOption(SupportsCapabilities): @property - def network_speed(self) -> Optional[str]: + def network_speed(self) -> str | None: """ Desired network speed limit for the emulator. """ diff --git a/appium/options/android/common/context/auto_webview_timeout_option.py b/appium/options/android/common/context/auto_webview_timeout_option.py index 774574313..6dd854ee5 100644 --- a/appium/options/android/common/context/auto_webview_timeout_option.py +++ b/appium/options/android/common/context/auto_webview_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class AutoWebviewTimeoutOption(SupportsCapabilities): @property - def auto_webview_timeout(self) -> Optional[timedelta]: + def auto_webview_timeout(self) -> timedelta | None: """ Set the maximum timeout to wait until a web view is available if autoWebview capability is set to true. 2000 ms by default. @@ -34,7 +33,7 @@ def auto_webview_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @auto_webview_timeout.setter - def auto_webview_timeout(self, value: Union[timedelta, int]) -> None: + def auto_webview_timeout(self, value: timedelta | int) -> None: """ Timeout to wait until a web view is available. """ diff --git a/appium/options/android/common/context/chrome_logging_prefs_option.py b/appium/options/android/common/context/chrome_logging_prefs_option.py index 0c2b69c4d..80dcf35d3 100644 --- a/appium/options/android/common/context/chrome_logging_prefs_option.py +++ b/appium/options/android/common/context/chrome_logging_prefs_option.py @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -from typing import Any, Dict, Optional +from typing import Any from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +24,14 @@ class ChromeLoggingPrefsOption(SupportsCapabilities): @property - def chrome_logging_prefs(self) -> Optional[Dict[str, Any]]: + def chrome_logging_prefs(self) -> dict[str, Any] | None: """ Chrome logging preferences. """ return self.get_capability(CHROME_LOGGING_PREFS) @chrome_logging_prefs.setter - def chrome_logging_prefs(self, value: Dict[str, Any]) -> None: + def chrome_logging_prefs(self, value: dict[str, Any]) -> None: """ Chrome logging preferences mapping. Basically the same as [goog:loggingPrefs](https://newbedev.com/ diff --git a/appium/options/android/common/context/chrome_options_option.py b/appium/options/android/common/context/chrome_options_option.py index 3adb9cebb..8cb0200c0 100644 --- a/appium/options/android/common/context/chrome_options_option.py +++ b/appium/options/android/common/context/chrome_options_option.py @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -from typing import Any, Dict, Optional +from typing import Any from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +24,14 @@ class ChromeOptionsOption(SupportsCapabilities): @property - def chrome_options(self) -> Optional[Dict[str, Any]]: + def chrome_options(self) -> dict[str, Any] | None: """ Chrome options. """ return self.get_capability(CHROME_OPTIONS) @chrome_options.setter - def chrome_options(self, value: Dict[str, Any]) -> None: + def chrome_options(self, value: dict[str, Any]) -> None: """ A mapping, that allows to customize chromedriver options. See https://chromedriver.chromium.org/capabilities for the list diff --git a/appium/options/android/common/context/chromedriver_args_option.py b/appium/options/android/common/context/chromedriver_args_option.py index b3633b105..7fa181301 100644 --- a/appium/options/android/common/context/chromedriver_args_option.py +++ b/appium/options/android/common/context/chromedriver_args_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import List, Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +23,14 @@ class ChromedriverArgsOption(SupportsCapabilities): @property - def chromedriver_args(self) -> Optional[List[str]]: + def chromedriver_args(self) -> list[str] | None: """ Array of chromedriver CLI arguments. """ return self.get_capability(CHROMEDRIVER_ARGS) @chromedriver_args.setter - def chromedriver_args(self, value: List[str]) -> None: + def chromedriver_args(self, value: list[str]) -> None: """ Array of chromedriver [command line arguments](http://www.assertselenium.com/java/list-of-chrome-driver-command-line-arguments/). diff --git a/appium/options/android/common/context/chromedriver_chrome_mapping_file_option.py b/appium/options/android/common/context/chromedriver_chrome_mapping_file_option.py index cc84bed1b..fddfa23b6 100644 --- a/appium/options/android/common/context/chromedriver_chrome_mapping_file_option.py +++ b/appium/options/android/common/context/chromedriver_chrome_mapping_file_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ChromedriverChromeMappingFileOption(SupportsCapabilities): @property - def chromedriver_chrome_mapping_file(self) -> Optional[str]: + def chromedriver_chrome_mapping_file(self) -> str | None: """ Full path to the chromedrivers mapping file is located. """ diff --git a/appium/options/android/common/context/chromedriver_disable_build_check_option.py b/appium/options/android/common/context/chromedriver_disable_build_check_option.py index 16886ab1c..e9831e70f 100644 --- a/appium/options/android/common/context/chromedriver_disable_build_check_option.py +++ b/appium/options/android/common/context/chromedriver_disable_build_check_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ChromedriverDisableBuildCheckOption(SupportsCapabilities): @property - def chromedriver_disable_build_check(self) -> Optional[bool]: + def chromedriver_disable_build_check(self) -> bool | None: """ Whether to disable the compatibility validation between the current chromedriver and the destination browser/web view. diff --git a/appium/options/android/common/context/chromedriver_executable_dir_option.py b/appium/options/android/common/context/chromedriver_executable_dir_option.py index 64e96c98e..e57eace0b 100644 --- a/appium/options/android/common/context/chromedriver_executable_dir_option.py +++ b/appium/options/android/common/context/chromedriver_executable_dir_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ChromedriverExecutableDirOption(SupportsCapabilities): @property - def chromedriver_executable_dir(self) -> Optional[str]: + def chromedriver_executable_dir(self) -> str | None: """ Full path to the folder where chromedriver executables are located. """ diff --git a/appium/options/android/common/context/chromedriver_executable_option.py b/appium/options/android/common/context/chromedriver_executable_option.py index 79f30ca14..f6e25f360 100644 --- a/appium/options/android/common/context/chromedriver_executable_option.py +++ b/appium/options/android/common/context/chromedriver_executable_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ChromedriverExecutableOption(SupportsCapabilities): @property - def chromedriver_executable(self) -> Optional[str]: + def chromedriver_executable(self) -> str | None: """ Path to the chromedriver executable on the server file system. """ diff --git a/appium/options/android/common/context/chromedriver_port_option.py b/appium/options/android/common/context/chromedriver_port_option.py index 8a7ef8ab7..fc6867487 100644 --- a/appium/options/android/common/context/chromedriver_port_option.py +++ b/appium/options/android/common/context/chromedriver_port_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ChromedriverPortOption(SupportsCapabilities): @property - def chromedriver_port(self) -> Optional[int]: + def chromedriver_port(self) -> int | None: """ Local port number to use for Chromedriver communication. """ diff --git a/appium/options/android/common/context/chromedriver_ports_option.py b/appium/options/android/common/context/chromedriver_ports_option.py index 5e13c987b..84fb30fab 100644 --- a/appium/options/android/common/context/chromedriver_ports_option.py +++ b/appium/options/android/common/context/chromedriver_ports_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import List, Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +23,14 @@ class ChromedriverPortsOption(SupportsCapabilities): @property - def chromedriver_ports(self) -> Optional[List[int]]: + def chromedriver_ports(self) -> list[int] | None: """ Local port numbers to use for Chromedriver communication. """ return self.get_capability(CHROMEDRIVER_PORTS) @chromedriver_ports.setter - def chromedriver_ports(self, value: List[int]) -> None: + def chromedriver_ports(self, value: list[int]) -> None: """ Array of possible port numbers to assign for Chromedriver communication. If none of the port in this array is free then a server error is thrown. diff --git a/appium/options/android/common/context/chromedriver_use_system_executable_option.py b/appium/options/android/common/context/chromedriver_use_system_executable_option.py index b164ed13f..673c43fc8 100644 --- a/appium/options/android/common/context/chromedriver_use_system_executable_option.py +++ b/appium/options/android/common/context/chromedriver_use_system_executable_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ChromedriverUseSystemExecutableOption(SupportsCapabilities): @property - def chromedriver_use_system_executable(self) -> Optional[bool]: + def chromedriver_use_system_executable(self) -> bool | None: """ Whether to use the system chromedriver. """ diff --git a/appium/options/android/common/context/ensure_webviews_have_pages_option.py b/appium/options/android/common/context/ensure_webviews_have_pages_option.py index d1f549a9f..da374fa67 100644 --- a/appium/options/android/common/context/ensure_webviews_have_pages_option.py +++ b/appium/options/android/common/context/ensure_webviews_have_pages_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class EnsureWebviewsHavePagesOption(SupportsCapabilities): @property - def ensure_webviews_have_pages(self) -> Optional[bool]: + def ensure_webviews_have_pages(self) -> bool | None: """ Whether to ensure if web views have pages. """ diff --git a/appium/options/android/common/context/extract_chrome_android_package_from_context_name_option.py b/appium/options/android/common/context/extract_chrome_android_package_from_context_name_option.py index 95559072f..79bc4a6c3 100644 --- a/appium/options/android/common/context/extract_chrome_android_package_from_context_name_option.py +++ b/appium/options/android/common/context/extract_chrome_android_package_from_context_name_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ExtractChromeAndroidPackageFromContextNameOption(SupportsCapabilities): @property - def extract_chrome_android_package_from_context_name(self) -> Optional[bool]: + def extract_chrome_android_package_from_context_name(self) -> bool | None: """ Whether to use the android package identifier associated with the context name. """ diff --git a/appium/options/android/common/context/native_web_screenshot_option.py b/appium/options/android/common/context/native_web_screenshot_option.py index 1c59a60b5..06a1db0d1 100644 --- a/appium/options/android/common/context/native_web_screenshot_option.py +++ b/appium/options/android/common/context/native_web_screenshot_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class NativeWebScreenshotOption(SupportsCapabilities): @property - def native_web_screenshot(self) -> Optional[bool]: + def native_web_screenshot(self) -> bool | None: """ Whether to use native screenshots in web view context. """ diff --git a/appium/options/android/common/context/recreate_chrome_driver_sessions_option.py b/appium/options/android/common/context/recreate_chrome_driver_sessions_option.py index 4ef8d1096..4ec8880ff 100644 --- a/appium/options/android/common/context/recreate_chrome_driver_sessions_option.py +++ b/appium/options/android/common/context/recreate_chrome_driver_sessions_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class RecreateChromeDriverSessionsOption(SupportsCapabilities): @property - def recreate_chrome_driver_sessions(self) -> Optional[bool]: + def recreate_chrome_driver_sessions(self) -> bool | None: """ Whether chromedriver sessions should be killed and then recreated instead of just suspending it on context switch. diff --git a/appium/options/android/common/context/show_chromedriver_log_option.py b/appium/options/android/common/context/show_chromedriver_log_option.py index da4f283a4..eff41c558 100644 --- a/appium/options/android/common/context/show_chromedriver_log_option.py +++ b/appium/options/android/common/context/show_chromedriver_log_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ShowChromedriverLogOption(SupportsCapabilities): @property - def show_chromedriver_log(self) -> Optional[bool]: + def show_chromedriver_log(self) -> bool | None: """ Whether to forward chromedriver output to the Appium server log. """ diff --git a/appium/options/android/common/context/webview_devtools_port_option.py b/appium/options/android/common/context/webview_devtools_port_option.py index 2f0e6d7a7..a0c298579 100644 --- a/appium/options/android/common/context/webview_devtools_port_option.py +++ b/appium/options/android/common/context/webview_devtools_port_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class WebviewDevtoolsPortOption(SupportsCapabilities): @property - def webview_devtools_port(self) -> Optional[int]: + def webview_devtools_port(self) -> int | None: """ Local port number to use for devtools communication. """ diff --git a/appium/options/android/common/localization/locale_script_option.py b/appium/options/android/common/localization/locale_script_option.py index abcd08529..d740aecd7 100644 --- a/appium/options/android/common/localization/locale_script_option.py +++ b/appium/options/android/common/localization/locale_script_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class LocaleScriptOption(SupportsCapabilities): @property - def locale_script(self) -> Optional[str]: + def locale_script(self) -> str | None: """ Canonical name of the locale to be set for the app under test. """ diff --git a/appium/options/android/common/locking/skip_unlock_option.py b/appium/options/android/common/locking/skip_unlock_option.py index c80a6efa7..6f4dc5492 100644 --- a/appium/options/android/common/locking/skip_unlock_option.py +++ b/appium/options/android/common/locking/skip_unlock_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SkipUnlockOption(SupportsCapabilities): @property - def skip_unlock(self) -> Optional[bool]: + def skip_unlock(self) -> bool | None: """ Whether to skip the check for lock screen presence. """ diff --git a/appium/options/android/common/locking/unlock_key_option.py b/appium/options/android/common/locking/unlock_key_option.py index ffee5a1a5..297f27e08 100644 --- a/appium/options/android/common/locking/unlock_key_option.py +++ b/appium/options/android/common/locking/unlock_key_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UnlockKeyOption(SupportsCapabilities): @property - def unlock_key(self) -> Optional[str]: + def unlock_key(self) -> str | None: """ Unlock key. """ diff --git a/appium/options/android/common/locking/unlock_strategy_option.py b/appium/options/android/common/locking/unlock_strategy_option.py index fb884518d..fc36cd38c 100644 --- a/appium/options/android/common/locking/unlock_strategy_option.py +++ b/appium/options/android/common/locking/unlock_strategy_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UnlockStrategyOption(SupportsCapabilities): @property - def unlock_strategy(self) -> Optional[str]: + def unlock_strategy(self) -> str | None: """ Unlock strategy name. """ diff --git a/appium/options/android/common/locking/unlock_success_timeout_option.py b/appium/options/android/common/locking/unlock_success_timeout_option.py index 488ae5f9e..268656c0e 100644 --- a/appium/options/android/common/locking/unlock_success_timeout_option.py +++ b/appium/options/android/common/locking/unlock_success_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class UnlockSuccessTimeoutOption(SupportsCapabilities): @property - def unlock_success_timeout(self) -> Optional[timedelta]: + def unlock_success_timeout(self) -> timedelta | None: """ Timeout to wait until the device is unlocked. """ @@ -33,7 +32,7 @@ def unlock_success_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @unlock_success_timeout.setter - def unlock_success_timeout(self, value: Union[timedelta, int]) -> None: + def unlock_success_timeout(self, value: timedelta | int) -> None: """ Maximum timeout to wait until the device is unlocked. 2000 ms by default. diff --git a/appium/options/android/common/locking/unlock_type_option.py b/appium/options/android/common/locking/unlock_type_option.py index 7026cf343..a1677b400 100644 --- a/appium/options/android/common/locking/unlock_type_option.py +++ b/appium/options/android/common/locking/unlock_type_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UnlockTypeOption(SupportsCapabilities): @property - def unlock_type(self) -> Optional[str]: + def unlock_type(self) -> str | None: """ Unlock type. """ diff --git a/appium/options/android/common/mjpeg/mjpeg_screenshot_url_option.py b/appium/options/android/common/mjpeg/mjpeg_screenshot_url_option.py index 70bad0177..c0ddcf6da 100644 --- a/appium/options/android/common/mjpeg/mjpeg_screenshot_url_option.py +++ b/appium/options/android/common/mjpeg/mjpeg_screenshot_url_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class MjpegScreenshotUrlOption(SupportsCapabilities): @property - def mjpeg_screenshot_url(self) -> Optional[str]: + def mjpeg_screenshot_url(self) -> str | None: """ URL of a service that provides realtime device screenshots in MJPEG format. """ diff --git a/appium/options/android/common/other/disable_suppress_accessibility_service_option.py b/appium/options/android/common/other/disable_suppress_accessibility_service_option.py index 980da567c..e0a5b0169 100644 --- a/appium/options/android/common/other/disable_suppress_accessibility_service_option.py +++ b/appium/options/android/common/other/disable_suppress_accessibility_service_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class DisableSuppressAccessibilityServiceOption(SupportsCapabilities): @property - def disable_suppress_accessibility_service(self) -> Optional[bool]: + def disable_suppress_accessibility_service(self) -> bool | None: """ Whether to suppress accessibility services. """ diff --git a/appium/options/android/common/other/user_profile_option.py b/appium/options/android/common/other/user_profile_option.py index 76871396a..a886acef9 100644 --- a/appium/options/android/common/other/user_profile_option.py +++ b/appium/options/android/common/other/user_profile_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UserProfileOption(SupportsCapabilities): @property - def user_profile(self) -> Optional[int]: + def user_profile(self) -> int | None: """ Integer identifier of a user profile. """ diff --git a/appium/options/android/common/signing/key_alias_option.py b/appium/options/android/common/signing/key_alias_option.py index 471b28ee8..ea948faa7 100644 --- a/appium/options/android/common/signing/key_alias_option.py +++ b/appium/options/android/common/signing/key_alias_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class KeyAliasOption(SupportsCapabilities): @property - def key_alias(self) -> Optional[str]: + def key_alias(self) -> str | None: """ Keystore key alias. """ diff --git a/appium/options/android/common/signing/key_password_option.py b/appium/options/android/common/signing/key_password_option.py index 5ed91d1c1..d8879c6cb 100644 --- a/appium/options/android/common/signing/key_password_option.py +++ b/appium/options/android/common/signing/key_password_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class KeyPasswordOption(SupportsCapabilities): @property - def key_password(self) -> Optional[str]: + def key_password(self) -> str | None: """ Keystore key password. """ diff --git a/appium/options/android/common/signing/keystore_password_option.py b/appium/options/android/common/signing/keystore_password_option.py index 8b7667117..c4a9cc3ec 100644 --- a/appium/options/android/common/signing/keystore_password_option.py +++ b/appium/options/android/common/signing/keystore_password_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class KeystorePasswordOption(SupportsCapabilities): @property - def keystore_password(self) -> Optional[str]: + def keystore_password(self) -> str | None: """ Keystore password. """ diff --git a/appium/options/android/common/signing/keystore_path_option.py b/appium/options/android/common/signing/keystore_path_option.py index 3489efe5c..6085ce50e 100644 --- a/appium/options/android/common/signing/keystore_path_option.py +++ b/appium/options/android/common/signing/keystore_path_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class KeystorePathOption(SupportsCapabilities): @property - def keystore_path(self) -> Optional[str]: + def keystore_path(self) -> str | None: """ The path to keystore. """ diff --git a/appium/options/android/common/signing/no_sign_option.py b/appium/options/android/common/signing/no_sign_option.py index a5a52841b..8e0d59a8c 100644 --- a/appium/options/android/common/signing/no_sign_option.py +++ b/appium/options/android/common/signing/no_sign_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class NoSignOption(SupportsCapabilities): @property - def no_sign(self) -> Optional[bool]: + def no_sign(self) -> bool | None: """ Whether to skip application signing. """ diff --git a/appium/options/android/common/signing/use_keystore_option.py b/appium/options/android/common/signing/use_keystore_option.py index f8a947a5c..737d65658 100644 --- a/appium/options/android/common/signing/use_keystore_option.py +++ b/appium/options/android/common/signing/use_keystore_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UseKeystoreOption(SupportsCapabilities): @property - def use_keystore(self) -> Optional[bool]: + def use_keystore(self) -> bool | None: """ Whether to use custom keystore. """ diff --git a/appium/options/android/espresso/activity_options_option.py b/appium/options/android/espresso/activity_options_option.py index a15935feb..45d632dbc 100644 --- a/appium/options/android/espresso/activity_options_option.py +++ b/appium/options/android/espresso/activity_options_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict, Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +23,14 @@ class ActivityOptionsOption(SupportsCapabilities): @property - def activity_options(self) -> Optional[Dict]: + def activity_options(self) -> dict | None: """ Activity options. """ return self.get_capability(ACTIVITY_OPTIONS) @activity_options.setter - def activity_options(self, value: Dict) -> None: + def activity_options(self, value: dict) -> None: """ The mapping of custom options for the main app activity that is going to be started. Check diff --git a/appium/options/android/espresso/app_locale_option.py b/appium/options/android/espresso/app_locale_option.py index 01ae27545..478678067 100644 --- a/appium/options/android/espresso/app_locale_option.py +++ b/appium/options/android/espresso/app_locale_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict, Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +23,14 @@ class AppLocaleOption(SupportsCapabilities): @property - def app_locale(self) -> Optional[Dict[str, str]]: + def app_locale(self) -> dict[str, str] | None: """ Locale for the app under test. """ return self.get_capability(APP_LOCALE) @app_locale.setter - def app_locale(self, value: Dict[str, str]) -> None: + def app_locale(self, value: dict[str, str]) -> None: """ Sets the locale for the app under test. The main difference between this option and the above ones is that this option only changes the locale for the application diff --git a/appium/options/android/espresso/base.py b/appium/options/android/espresso/base.py index c725b63a7..4ceec1b38 100644 --- a/appium/options/android/espresso/base.py +++ b/appium/options/android/espresso/base.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict from appium.options.android.common.adb.adb_exec_timeout_option import AdbExecTimeoutOption from appium.options.android.common.adb.adb_port_option import AdbPortOption @@ -214,7 +213,7 @@ class EspressoOptions( AppLocaleOption, ): @property - def default_capabilities(self) -> Dict: + def default_capabilities(self) -> dict: return { AUTOMATION_NAME: 'Espresso', PLATFORM_NAME: 'Android', diff --git a/appium/options/android/espresso/espresso_build_config_option.py b/appium/options/android/espresso/espresso_build_config_option.py index 7a8694f31..7f46e21ce 100644 --- a/appium/options/android/espresso/espresso_build_config_option.py +++ b/appium/options/android/espresso/espresso_build_config_option.py @@ -16,7 +16,7 @@ # under the License. import json -from typing import Any, Dict, Optional, Union +from typing import Any from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +25,7 @@ class EspressoBuildConfigOption(SupportsCapabilities): @property - def espresso_build_config(self) -> Optional[Union[Dict[str, Any], str]]: + def espresso_build_config(self) -> dict[str, Any] | str | None: """ Espresso build config. """ @@ -36,7 +36,7 @@ def espresso_build_config(self) -> Optional[Union[Dict[str, Any], str]]: return value @espresso_build_config.setter - def espresso_build_config(self, value: Union[Dict[str, Any], str]) -> None: + def espresso_build_config(self, value: dict[str, Any] | str) -> None: """ This config allows to customize several important properties of Espresso server. Refer to diff --git a/appium/options/android/espresso/espresso_server_launch_timeout_option.py b/appium/options/android/espresso/espresso_server_launch_timeout_option.py index 9335358de..91d3cf19c 100644 --- a/appium/options/android/espresso/espresso_server_launch_timeout_option.py +++ b/appium/options/android/espresso/espresso_server_launch_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class EspressoServerLaunchTimeoutOption(SupportsCapabilities): @property - def espresso_server_launch_timeout(self) -> Optional[timedelta]: + def espresso_server_launch_timeout(self) -> timedelta | None: """ Maximum timeout to wait until Espresso server is listening on the device. """ @@ -33,7 +32,7 @@ def espresso_server_launch_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @espresso_server_launch_timeout.setter - def espresso_server_launch_timeout(self, value: Union[timedelta, int]) -> None: + def espresso_server_launch_timeout(self, value: timedelta | int) -> None: """ Set the maximum timeout to wait util Espresso is listening on the device. 45000 ms by default diff --git a/appium/options/android/espresso/force_espresso_rebuild_option.py b/appium/options/android/espresso/force_espresso_rebuild_option.py index 8971db795..cbdf67b06 100644 --- a/appium/options/android/espresso/force_espresso_rebuild_option.py +++ b/appium/options/android/espresso/force_espresso_rebuild_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ForceEspressoRebuildOption(SupportsCapabilities): @property - def force_espresso_rebuild(self) -> Optional[bool]: + def force_espresso_rebuild(self) -> bool | None: """ Whether to force Espresso server rebuild on a new session startup. """ diff --git a/appium/options/android/espresso/intent_options_option.py b/appium/options/android/espresso/intent_options_option.py index 59625bd91..7618cb690 100644 --- a/appium/options/android/espresso/intent_options_option.py +++ b/appium/options/android/espresso/intent_options_option.py @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -from typing import Any, Dict, Optional +from typing import Any from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +24,14 @@ class IntentOptionsOption(SupportsCapabilities): @property - def intent_options(self) -> Optional[Dict[str, Any]]: + def intent_options(self) -> dict[str, Any] | None: """ Intent options. """ return self.get_capability(INTENT_OPTIONS) @intent_options.setter - def intent_options(self, value: Dict[str, Any]) -> None: + def intent_options(self, value: dict[str, Any]) -> None: """ The mapping of custom options for the intent that is going to be passed to the main app activity. Check diff --git a/appium/options/android/espresso/show_gradle_log_option.py b/appium/options/android/espresso/show_gradle_log_option.py index 48d233dbf..9fdfff486 100644 --- a/appium/options/android/espresso/show_gradle_log_option.py +++ b/appium/options/android/espresso/show_gradle_log_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ShowGradleLogOption(SupportsCapabilities): @property - def show_gradle_log(self) -> Optional[bool]: + def show_gradle_log(self) -> bool | None: """ Whether to include Gradle log to the regular server log. """ diff --git a/appium/options/android/uiautomator2/base.py b/appium/options/android/uiautomator2/base.py index 7efcb9036..4b976ea97 100644 --- a/appium/options/android/uiautomator2/base.py +++ b/appium/options/android/uiautomator2/base.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict from appium.options.android.common.adb.adb_exec_timeout_option import AdbExecTimeoutOption from appium.options.android.common.adb.adb_port_option import AdbPortOption @@ -214,7 +213,7 @@ class UiAutomator2Options( UserProfileOption, ): @property - def default_capabilities(self) -> Dict: + def default_capabilities(self) -> dict: return { AUTOMATION_NAME: 'UIAutomator2', PLATFORM_NAME: 'Android', diff --git a/appium/options/android/uiautomator2/disable_window_animation_option.py b/appium/options/android/uiautomator2/disable_window_animation_option.py index 5ff614b49..65274a058 100644 --- a/appium/options/android/uiautomator2/disable_window_animation_option.py +++ b/appium/options/android/uiautomator2/disable_window_animation_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class DisableWindowAnimationOption(SupportsCapabilities): @property - def disable_window_animation(self) -> Optional[bool]: + def disable_window_animation(self) -> bool | None: """ Whether window animations when starting the instrumentation process are disabled. diff --git a/appium/options/android/uiautomator2/mjpeg_server_port_option.py b/appium/options/android/uiautomator2/mjpeg_server_port_option.py index 6c702646f..aebde7ce5 100644 --- a/appium/options/android/uiautomator2/mjpeg_server_port_option.py +++ b/appium/options/android/uiautomator2/mjpeg_server_port_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class MjpegServerPortOption(SupportsCapabilities): @property - def mjpeg_server_port(self) -> Optional[int]: + def mjpeg_server_port(self) -> int | None: """ Number of the port UiAutomator2 server starts the MJPEG server on. """ diff --git a/appium/options/android/uiautomator2/skip_device_initialization_option.py b/appium/options/android/uiautomator2/skip_device_initialization_option.py index eda37be30..6b4e8d1fb 100644 --- a/appium/options/android/uiautomator2/skip_device_initialization_option.py +++ b/appium/options/android/uiautomator2/skip_device_initialization_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SkipDeviceInitializationOption(SupportsCapabilities): @property - def skip_device_initialization(self) -> Optional[bool]: + def skip_device_initialization(self) -> bool | None: """ Whether initial device startup checks by the server are disabled. """ diff --git a/appium/options/android/uiautomator2/skip_server_installation_option.py b/appium/options/android/uiautomator2/skip_server_installation_option.py index c343f78f1..6ff5eba42 100644 --- a/appium/options/android/uiautomator2/skip_server_installation_option.py +++ b/appium/options/android/uiautomator2/skip_server_installation_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SkipServerInstallationOption(SupportsCapabilities): @property - def skip_server_installation(self) -> Optional[bool]: + def skip_server_installation(self) -> bool | None: """ Whether to skip the server components installation on the device under test and all the related checks. diff --git a/appium/options/android/uiautomator2/uiautomator2_server_install_timeout_option.py b/appium/options/android/uiautomator2/uiautomator2_server_install_timeout_option.py index 4b25638f8..2c48608e6 100644 --- a/appium/options/android/uiautomator2/uiautomator2_server_install_timeout_option.py +++ b/appium/options/android/uiautomator2/uiautomator2_server_install_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class Uiautomator2ServerInstallTimeoutOption(SupportsCapabilities): @property - def uiautomator2_server_install_timeout(self) -> Optional[timedelta]: + def uiautomator2_server_install_timeout(self) -> timedelta | None: """ Maximum timeout to wait until UiAutomator2 server is installed on the device. """ @@ -33,7 +32,7 @@ def uiautomator2_server_install_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @uiautomator2_server_install_timeout.setter - def uiautomator2_server_install_timeout(self, value: Union[timedelta, int]) -> None: + def uiautomator2_server_install_timeout(self, value: timedelta | int) -> None: """ Set the maximum timeout to wait util UiAutomator2 server is installed on the device. 20000 ms by default diff --git a/appium/options/android/uiautomator2/uiautomator2_server_launch_timeout_option.py b/appium/options/android/uiautomator2/uiautomator2_server_launch_timeout_option.py index ce74c4473..993087772 100644 --- a/appium/options/android/uiautomator2/uiautomator2_server_launch_timeout_option.py +++ b/appium/options/android/uiautomator2/uiautomator2_server_launch_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class Uiautomator2ServerLaunchTimeoutOption(SupportsCapabilities): @property - def uiautomator2_server_launch_timeout(self) -> Optional[timedelta]: + def uiautomator2_server_launch_timeout(self) -> timedelta | None: """ Maximum timeout to wait until UiAutomator2 server is listening on the device. """ @@ -33,7 +32,7 @@ def uiautomator2_server_launch_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @uiautomator2_server_launch_timeout.setter - def uiautomator2_server_launch_timeout(self, value: Union[timedelta, int]) -> None: + def uiautomator2_server_launch_timeout(self, value: timedelta | int) -> None: """ Set the maximum timeout to wait util UiAutomator2Server is listening on the device. 30000 ms by default diff --git a/appium/options/android/uiautomator2/uiautomator2_server_read_timeout_option.py b/appium/options/android/uiautomator2/uiautomator2_server_read_timeout_option.py index cb8a39c25..bd962fe0c 100644 --- a/appium/options/android/uiautomator2/uiautomator2_server_read_timeout_option.py +++ b/appium/options/android/uiautomator2/uiautomator2_server_read_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class Uiautomator2ServerReadTimeoutOption(SupportsCapabilities): @property - def uiautomator2_server_read_timeout(self) -> Optional[timedelta]: + def uiautomator2_server_read_timeout(self) -> timedelta | None: """ Maximum timeout to wait for an HTTP response from UiAutomator2Server. """ @@ -33,7 +32,7 @@ def uiautomator2_server_read_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @uiautomator2_server_read_timeout.setter - def uiautomator2_server_read_timeout(self, value: Union[timedelta, int]) -> None: + def uiautomator2_server_read_timeout(self, value: timedelta | int) -> None: """ Set the maximum timeout to wait for a HTTP response from UiAutomator2Server. Only values greater than zero are accepted. If the given value is too low diff --git a/appium/options/common/app_option.py b/appium/options/common/app_option.py index 4a8fff1b1..0ad52788a 100644 --- a/appium/options/common/app_option.py +++ b/appium/options/common/app_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppOption(SupportsCapabilities): @property - def app(self) -> Optional[str]: + def app(self) -> str | None: """ String representing app location. """ diff --git a/appium/options/common/auto_web_view_option.py b/appium/options/common/auto_web_view_option.py index 6983aef47..ced463773 100644 --- a/appium/options/common/auto_web_view_option.py +++ b/appium/options/common/auto_web_view_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AutoWebViewOption(SupportsCapabilities): @property - def auto_web_view(self) -> Optional[bool]: + def auto_web_view(self) -> bool | None: """ Whether the driver should try to automatically switch to a web view context after the session is started. diff --git a/appium/options/common/automation_name_option.py b/appium/options/common/automation_name_option.py index c18e0a15b..49fe5efb0 100644 --- a/appium/options/common/automation_name_option.py +++ b/appium/options/common/automation_name_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AutomationNameOption(SupportsCapabilities): @property - def automation_name(self) -> Optional[str]: + def automation_name(self) -> str | None: """ String representing the name of the automation engine name. """ diff --git a/appium/options/common/base.py b/appium/options/common/base.py index 5ac7b2e36..5bd4f1a94 100644 --- a/appium/options/common/base.py +++ b/appium/options/common/base.py @@ -16,7 +16,7 @@ # under the License. import copy -from typing import Any, Dict, TypeVar +from typing import Any, TypeVar from selenium.webdriver.common.options import BaseOptions @@ -43,7 +43,7 @@ class AppiumOptions( FullResetOption, NewCommandTimeoutOption, ): - _caps: Dict + _caps: dict W3C_CAPABILITY_NAMES = frozenset( [ 'acceptInsecureCerts', @@ -85,14 +85,14 @@ def get_capability(self, name: str) -> Any: """Fetches capability value or None if the capability is not set""" return self._caps[name] if name in self._caps else self._caps.get(f'{APPIUM_PREFIX}{name}') - def load_capabilities(self: T, caps: Dict[str, Any]) -> T: + def load_capabilities(self: T, caps: dict[str, Any]) -> T: """Sets multiple capabilities""" for name, value in caps.items(): self.set_capability(name, value) return self @staticmethod - def as_w3c(capabilities: Dict) -> Dict: + def as_w3c(capabilities: dict) -> dict: """ Formats given capabilities to a valid W3C session request object @@ -112,7 +112,7 @@ def process_key(k: str) -> str: processed_caps = {process_key(k): v for k, v in copy.deepcopy(capabilities).items()} return {'capabilities': {'firstMatch': [{}], 'alwaysMatch': processed_caps}} - def to_w3c(self) -> Dict: + def to_w3c(self) -> dict: """ Formats the instance to a valid W3C session request object @@ -120,9 +120,9 @@ def to_w3c(self) -> Dict: """ return self.as_w3c(self.to_capabilities()) - def to_capabilities(self) -> Dict: + def to_capabilities(self) -> dict: return copy.copy(self._caps) @property - def default_capabilities(self) -> Dict: + def default_capabilities(self) -> dict: return {} diff --git a/appium/options/common/browser_name_option.py b/appium/options/common/browser_name_option.py index 2b107972a..fc5fec4ea 100644 --- a/appium/options/common/browser_name_option.py +++ b/appium/options/common/browser_name_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class BrowserNameOption(SupportsCapabilities): @property - def browser_name(self) -> Optional[str]: + def browser_name(self) -> str | None: """ The name of the browser to run the test on. """ diff --git a/appium/options/common/bundle_id_option.py b/appium/options/common/bundle_id_option.py index 0546571a5..1a09ed939 100644 --- a/appium/options/common/bundle_id_option.py +++ b/appium/options/common/bundle_id_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class BundleIdOption(SupportsCapabilities): @property - def bundle_id(self) -> Optional[str]: + def bundle_id(self) -> str | None: """ The bundle identifier of the application to automate. """ diff --git a/appium/options/common/clear_system_files_option.py b/appium/options/common/clear_system_files_option.py index 208c4bb96..2614fb36f 100644 --- a/appium/options/common/clear_system_files_option.py +++ b/appium/options/common/clear_system_files_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ClearSystemFilesOption(SupportsCapabilities): @property - def clear_system_files(self) -> Optional[bool]: + def clear_system_files(self) -> bool | None: """ Whether the driver should delete generated files at the end of a session. """ diff --git a/appium/options/common/device_name_option.py b/appium/options/common/device_name_option.py index 8e33cce39..72b952957 100644 --- a/appium/options/common/device_name_option.py +++ b/appium/options/common/device_name_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class DeviceNameOption(SupportsCapabilities): @property - def device_name(self) -> Optional[str]: + def device_name(self) -> str | None: """ The name of the device. """ diff --git a/appium/options/common/enable_performance_logging_option.py b/appium/options/common/enable_performance_logging_option.py index 22a4bdb30..f95b249ec 100644 --- a/appium/options/common/enable_performance_logging_option.py +++ b/appium/options/common/enable_performance_logging_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class EnablePerformanceLoggingOption(SupportsCapabilities): @property - def enable_performance_logging(self) -> Optional[bool]: + def enable_performance_logging(self) -> bool | None: """ Whether to enable additional performance logging. """ diff --git a/appium/options/common/event_timings_option.py b/appium/options/common/event_timings_option.py index b9c0a1245..f2e09b48e 100644 --- a/appium/options/common/event_timings_option.py +++ b/appium/options/common/event_timings_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class EventTimingsOption(SupportsCapabilities): @property - def event_timings(self) -> Optional[bool]: + def event_timings(self) -> bool | None: """ Whether the driver should to report the timings for various Appium-internal events. diff --git a/appium/options/common/full_reset_option.py b/appium/options/common/full_reset_option.py index aee86d7db..2e8b73be6 100644 --- a/appium/options/common/full_reset_option.py +++ b/appium/options/common/full_reset_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class FullResetOption(SupportsCapabilities): @property - def full_reset(self) -> Optional[bool]: + def full_reset(self) -> bool | None: """ Whether the driver should perform a full reset. """ diff --git a/appium/options/common/is_headless_option.py b/appium/options/common/is_headless_option.py index bc0c2b110..19830ceb3 100644 --- a/appium/options/common/is_headless_option.py +++ b/appium/options/common/is_headless_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class IsHeadlessOption(SupportsCapabilities): @property - def is_headless(self) -> Optional[bool]: + def is_headless(self) -> bool | None: """ Whether the driver should start emulator/simulator in headless mode. """ diff --git a/appium/options/common/language_option.py b/appium/options/common/language_option.py index f82de63d0..b176218f6 100644 --- a/appium/options/common/language_option.py +++ b/appium/options/common/language_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class LanguageOption(SupportsCapabilities): @property - def language(self) -> Optional[str]: + def language(self) -> str | None: """ Language abbreviation to use in a test session. """ diff --git a/appium/options/common/locale_option.py b/appium/options/common/locale_option.py index 58503a890..571dad571 100644 --- a/appium/options/common/locale_option.py +++ b/appium/options/common/locale_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class LocaleOption(SupportsCapabilities): @property - def locale(self) -> Optional[str]: + def locale(self) -> str | None: """ Locale abbreviation to use in a test session. """ diff --git a/appium/options/common/new_command_timeout_option.py b/appium/options/common/new_command_timeout_option.py index 377ef7193..79c9d4b34 100644 --- a/appium/options/common/new_command_timeout_option.py +++ b/appium/options/common/new_command_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from .supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class NewCommandTimeoutOption(SupportsCapabilities): @property - def new_command_timeout(self) -> Optional[timedelta]: + def new_command_timeout(self) -> timedelta | None: """ The allowed time before seeing a new server command. """ @@ -33,7 +32,7 @@ def new_command_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(seconds=value) @new_command_timeout.setter - def new_command_timeout(self, value: Union[timedelta, int]) -> None: + def new_command_timeout(self, value: timedelta | int) -> None: """ Set the allowed time before seeing a new server command. The value could either be provided as timedelta instance or an integer number of seconds. diff --git a/appium/options/common/no_reset_option.py b/appium/options/common/no_reset_option.py index ee2dd9988..9b6f3e926 100644 --- a/appium/options/common/no_reset_option.py +++ b/appium/options/common/no_reset_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class NoResetOption(SupportsCapabilities): @property - def no_reset(self) -> Optional[bool]: + def no_reset(self) -> bool | None: """ Whether the driver should not perform a reset. """ diff --git a/appium/options/common/orientation_option.py b/appium/options/common/orientation_option.py index 4141a4d90..54c7e031d 100644 --- a/appium/options/common/orientation_option.py +++ b/appium/options/common/orientation_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class OrientationOption(SupportsCapabilities): @property - def orientation(self) -> Optional[str]: + def orientation(self) -> str | None: """ The orientation of the device's screen. Usually this is either 'PORTRAIT' or 'LANDSCAPE'. diff --git a/appium/options/common/other_apps_option.py b/appium/options/common/other_apps_option.py index 6efbbbc4e..b1569f193 100644 --- a/appium/options/common/other_apps_option.py +++ b/appium/options/common/other_apps_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class OtherAppsOption(SupportsCapabilities): @property - def other_apps(self) -> Optional[str]: + def other_apps(self) -> str | None: """ Locations of apps to install before running a test. """ diff --git a/appium/options/common/platform_version_option.py b/appium/options/common/platform_version_option.py index d237cc280..4baf6b66c 100644 --- a/appium/options/common/platform_version_option.py +++ b/appium/options/common/platform_version_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class PlatformVersionOption(SupportsCapabilities): @property - def platform_version(self) -> Optional[str]: + def platform_version(self) -> str | None: """ The platform version of an emulator or a real device. This capability is used for device autodetection if udid is not provided. diff --git a/appium/options/common/postrun_option.py b/appium/options/common/postrun_option.py index f940cd6b6..5a965d8f8 100644 --- a/appium/options/common/postrun_option.py +++ b/appium/options/common/postrun_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict, Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class PostrunOption(SupportsCapabilities): @property - def postrun(self) -> Optional[Dict[str, str]]: + def postrun(self) -> dict[str, str] | None: """ System script which is supposed to be executed upon driver session quit. @@ -32,7 +31,7 @@ def postrun(self) -> Optional[Dict[str, str]]: return self.get_capability(POSTRUN) @postrun.setter - def postrun(self, value: Dict[str, str]) -> None: + def postrun(self, value: dict[str, str]) -> None: """ Set a system script to execute upon driver session quit. """ diff --git a/appium/options/common/prerun_option.py b/appium/options/common/prerun_option.py index 139874c76..a718d6740 100644 --- a/appium/options/common/prerun_option.py +++ b/appium/options/common/prerun_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict, Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class PrerunOption(SupportsCapabilities): @property - def prerun(self) -> Optional[Dict[str, str]]: + def prerun(self) -> dict[str, str] | None: """ System script which is supposed to be executed before a driver session is initialised. @@ -32,7 +31,7 @@ def prerun(self) -> Optional[Dict[str, str]]: return self.get_capability(PRERUN) @prerun.setter - def prerun(self, value: Dict[str, str]) -> None: + def prerun(self, value: dict[str, str]) -> None: """ Set a system script which is supposed to be executed before a driver session is initialised. diff --git a/appium/options/common/print_page_source_on_find_failure_option.py b/appium/options/common/print_page_source_on_find_failure_option.py index b93f07cf5..b97fbc8a1 100644 --- a/appium/options/common/print_page_source_on_find_failure_option.py +++ b/appium/options/common/print_page_source_on_find_failure_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class PrintPageSourceOnFindFailureOption(SupportsCapabilities): @property - def print_page_source_on_find_failure(self) -> Optional[bool]: + def print_page_source_on_find_failure(self) -> bool | None: """ Whether the driver should print the page source to the log if a find failure occurs. diff --git a/appium/options/common/skip_log_capture_option.py b/appium/options/common/skip_log_capture_option.py index 668704e13..522bc1079 100644 --- a/appium/options/common/skip_log_capture_option.py +++ b/appium/options/common/skip_log_capture_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SkipLogCaptureOption(SupportsCapabilities): @property - def skip_log_capture(self) -> Optional[bool]: + def skip_log_capture(self) -> bool | None: """ Whether the driver should not record device logs. """ diff --git a/appium/options/common/system_host_option.py b/appium/options/common/system_host_option.py index 0544de5ca..57d502b75 100644 --- a/appium/options/common/system_host_option.py +++ b/appium/options/common/system_host_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SystemHostOption(SupportsCapabilities): @property - def system_host(self) -> Optional[str]: + def system_host(self) -> str | None: """ The name of the host for the internal server to listen on. """ diff --git a/appium/options/common/system_port_option.py b/appium/options/common/system_port_option.py index e11f3b59d..fef871e38 100644 --- a/appium/options/common/system_port_option.py +++ b/appium/options/common/system_port_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SystemPortOption(SupportsCapabilities): @property - def system_port(self) -> Optional[int]: + def system_port(self) -> int | None: """ The number of the port for the internal server to listen on. """ diff --git a/appium/options/common/udid_option.py b/appium/options/common/udid_option.py index f760a1d21..97f703c96 100644 --- a/appium/options/common/udid_option.py +++ b/appium/options/common/udid_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from .supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UdidOption(SupportsCapabilities): @property - def udid(self) -> Optional[str]: + def udid(self) -> str | None: """ The unique identifier of the device under test. """ diff --git a/appium/options/flutter_integration/base.py b/appium/options/flutter_integration/base.py index f67b9a93c..6854197af 100644 --- a/appium/options/flutter_integration/base.py +++ b/appium/options/flutter_integration/base.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict from appium.options.common.automation_name_option import AUTOMATION_NAME from appium.options.common.base import AppiumOptions @@ -33,7 +32,7 @@ class FlutterOptions( FlutterSystemPortOption, ): @property - def default_capabilities(self) -> Dict: + def default_capabilities(self) -> dict: return { AUTOMATION_NAME: 'FlutterIntegration', } diff --git a/appium/options/flutter_integration/flutter_element_wait_timeout_option.py b/appium/options/flutter_integration/flutter_element_wait_timeout_option.py index bd4279774..d367be1cd 100644 --- a/appium/options/flutter_integration/flutter_element_wait_timeout_option.py +++ b/appium/options/flutter_integration/flutter_element_wait_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class FlutterElementWaitTimeOutOption(SupportsCapabilities): @property - def flutter_element_wait_timeout(self) -> Optional[timedelta]: + def flutter_element_wait_timeout(self) -> timedelta | None: """ Maximum timeout to wait for element for Flutter integration test @@ -35,7 +34,7 @@ def flutter_element_wait_timeout(self) -> Optional[timedelta]: return self.get_capability(FLUTTER_ELEMENT_WAIT_TIMEOUT) @flutter_element_wait_timeout.setter - def flutter_element_wait_timeout(self, value: Union[timedelta, int]) -> None: + def flutter_element_wait_timeout(self, value: timedelta | int) -> None: """ Sets the maximum timeout to wait for a Flutter element in an integration test. Default timeout is 5000ms diff --git a/appium/options/flutter_integration/flutter_server_launch_timeout_option.py b/appium/options/flutter_integration/flutter_server_launch_timeout_option.py index 32cea2f94..d387c3c14 100644 --- a/appium/options/flutter_integration/flutter_server_launch_timeout_option.py +++ b/appium/options/flutter_integration/flutter_server_launch_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class FlutterServerLaunchTimeOutOption(SupportsCapabilities): @property - def flutter_server_launch_timeout(self) -> Optional[timedelta]: + def flutter_server_launch_timeout(self) -> timedelta | None: """ Gets the current timeout for launching the Flutter server in a Flutter application. @@ -36,7 +35,7 @@ def flutter_server_launch_timeout(self) -> Optional[timedelta]: return self.get_capability(FLUTTER_SERVER_LAUNCH_TIMEOUT) @flutter_server_launch_timeout.setter - def flutter_server_launch_timeout(self, value: Union[timedelta, int]) -> None: + def flutter_server_launch_timeout(self, value: timedelta | int) -> None: """ Sets the timeout for launching the Flutter server in Flutter application. Default timeout is 5000ms diff --git a/appium/options/flutter_integration/flutter_system_port_option.py b/appium/options/flutter_integration/flutter_system_port_option.py index db7ab7f54..b71a28a7c 100644 --- a/appium/options/flutter_integration/flutter_system_port_option.py +++ b/appium/options/flutter_integration/flutter_system_port_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class FlutterSystemPortOption(SupportsCapabilities): @property - def flutter_system_port(self) -> Optional[int]: + def flutter_system_port(self) -> int | None: """ Get flutter system port for Flutter integration tests. diff --git a/appium/options/gecko/android_storage_option.py b/appium/options/gecko/android_storage_option.py index 1209ac501..9827ce25a 100644 --- a/appium/options/gecko/android_storage_option.py +++ b/appium/options/gecko/android_storage_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AndroidStorageOption(SupportsCapabilities): @property - def android_storage(self) -> Optional[str]: + def android_storage(self) -> str | None: """ The currently set storage type. """ diff --git a/appium/options/gecko/base.py b/appium/options/gecko/base.py index 873e5646a..dc4723e2e 100644 --- a/appium/options/gecko/base.py +++ b/appium/options/gecko/base.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict from appium.options.common.automation_name_option import AUTOMATION_NAME from appium.options.common.base import AppiumOptions @@ -45,7 +44,7 @@ def system_port(self, value: int) -> None: SystemPortOption.system_port.fset(self, value) # type: ignore @property - def default_capabilities(self) -> Dict: + def default_capabilities(self) -> dict: return { AUTOMATION_NAME: 'Gecko', } diff --git a/appium/options/gecko/firefox_options_option.py b/appium/options/gecko/firefox_options_option.py index 87906b4bb..da3206cff 100644 --- a/appium/options/gecko/firefox_options_option.py +++ b/appium/options/gecko/firefox_options_option.py @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -from typing import Any, Dict, Optional +from typing import Any from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +24,14 @@ class FirefoxOptionsOption(SupportsCapabilities): @property - def firefox_options(self) -> Optional[Dict[str, Any]]: + def firefox_options(self) -> dict[str, Any] | None: """ Firefox options mapping. """ return self.get_capability(FIREFOX_OPTIONS) @firefox_options.setter - def firefox_options(self, value: Dict[str, Any]) -> None: + def firefox_options(self, value: dict[str, Any]) -> None: """ See https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions """ diff --git a/appium/options/gecko/marionette_port_option.py b/appium/options/gecko/marionette_port_option.py index 24846fd76..ac9e4071a 100644 --- a/appium/options/gecko/marionette_port_option.py +++ b/appium/options/gecko/marionette_port_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class MarionettePortOption(SupportsCapabilities): @property - def marionette_port(self) -> Optional[int]: + def marionette_port(self) -> int | None: """ The number of the port for the Marionette server to listen on. """ diff --git a/appium/options/gecko/verbosity_option.py b/appium/options/gecko/verbosity_option.py index 9888ddf2d..4b6b6548f 100644 --- a/appium/options/gecko/verbosity_option.py +++ b/appium/options/gecko/verbosity_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class VerbosityOption(SupportsCapabilities): @property - def verbosity(self) -> Optional[str]: + def verbosity(self) -> str | None: """ The verbosity level of driver logging. """ diff --git a/appium/options/ios/safari/automatic_inspection_option.py b/appium/options/ios/safari/automatic_inspection_option.py index 3ab38e82d..a92039fa0 100644 --- a/appium/options/ios/safari/automatic_inspection_option.py +++ b/appium/options/ios/safari/automatic_inspection_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AutomaticInspectionOption(SupportsCapabilities): @property - def automatic_inspection(self) -> Optional[bool]: + def automatic_inspection(self) -> bool | None: """ Whether to use automatic inspection. """ diff --git a/appium/options/ios/safari/automatic_profiling_option.py b/appium/options/ios/safari/automatic_profiling_option.py index 76eae6206..67a81a9b1 100644 --- a/appium/options/ios/safari/automatic_profiling_option.py +++ b/appium/options/ios/safari/automatic_profiling_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AutomaticProfilingOption(SupportsCapabilities): @property - def automatic_profiling(self) -> Optional[bool]: + def automatic_profiling(self) -> bool | None: """ Whether to use automatic profiling. """ diff --git a/appium/options/ios/safari/base.py b/appium/options/ios/safari/base.py index 8c6cfa685..f46bc9f59 100644 --- a/appium/options/ios/safari/base.py +++ b/appium/options/ios/safari/base.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict from appium.options.common.automation_name_option import AUTOMATION_NAME from appium.options.common.base import PLATFORM_NAME, AppiumOptions @@ -44,7 +43,7 @@ class SafariOptions( WebkitWebrtcOption, ): @property - def default_capabilities(self) -> Dict: + def default_capabilities(self) -> dict: return { PLATFORM_NAME: 'iOS', AUTOMATION_NAME: 'Safari', diff --git a/appium/options/ios/safari/device_name_option.py b/appium/options/ios/safari/device_name_option.py index ebc949ad8..28deafef3 100644 --- a/appium/options/ios/safari/device_name_option.py +++ b/appium/options/ios/safari/device_name_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class DeviceNameOption(SupportsCapabilities): @property - def device_name(self) -> Optional[str]: + def device_name(self) -> str | None: """ String representing the name of the device. """ diff --git a/appium/options/ios/safari/device_type_option.py b/appium/options/ios/safari/device_type_option.py index 329974e34..9071c6af4 100644 --- a/appium/options/ios/safari/device_type_option.py +++ b/appium/options/ios/safari/device_type_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class DeviceTypeOption(SupportsCapabilities): @property - def device_type(self) -> Optional[str]: + def device_type(self) -> str | None: """ String representing the type of the device. """ diff --git a/appium/options/ios/safari/device_udid_option.py b/appium/options/ios/safari/device_udid_option.py index 12850acfc..aec15d20a 100644 --- a/appium/options/ios/safari/device_udid_option.py +++ b/appium/options/ios/safari/device_udid_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class DeviceUdidOption(SupportsCapabilities): @property - def device_udid(self) -> Optional[str]: + def device_udid(self) -> str | None: """ String representing the UDID of the device. """ diff --git a/appium/options/ios/safari/platform_build_version_option.py b/appium/options/ios/safari/platform_build_version_option.py index f411ec22e..7454664a6 100644 --- a/appium/options/ios/safari/platform_build_version_option.py +++ b/appium/options/ios/safari/platform_build_version_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class PlatformBuildVersionOption(SupportsCapabilities): @property - def platform_build_version(self) -> Optional[str]: + def platform_build_version(self) -> str | None: """ String representing the platform build version. """ diff --git a/appium/options/ios/safari/platform_version_option.py b/appium/options/ios/safari/platform_version_option.py index fd3d4b60b..e53ef140f 100644 --- a/appium/options/ios/safari/platform_version_option.py +++ b/appium/options/ios/safari/platform_version_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class PlatformVersionOption(SupportsCapabilities): @property - def platform_version(self) -> Optional[str]: + def platform_version(self) -> str | None: """ String representing the platform version. """ diff --git a/appium/options/ios/safari/use_simulator_option.py b/appium/options/ios/safari/use_simulator_option.py index 25a09a6b0..91b9eb391 100644 --- a/appium/options/ios/safari/use_simulator_option.py +++ b/appium/options/ios/safari/use_simulator_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UseSimulatorOption(SupportsCapabilities): @property - def use_simulator(self) -> Optional[bool]: + def use_simulator(self) -> bool | None: """ Whether to use iOS Simulator. """ diff --git a/appium/options/ios/safari/webkit_webrtc_option.py b/appium/options/ios/safari/webkit_webrtc_option.py index 7980df7ab..ac0d4c976 100644 --- a/appium/options/ios/safari/webkit_webrtc_option.py +++ b/appium/options/ios/safari/webkit_webrtc_option.py @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -from typing import Any, Dict, Optional +from typing import Any from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +24,14 @@ class WebkitWebrtcOption(SupportsCapabilities): @property - def webkit_webrtc(self) -> Optional[Dict[str, Any]]: + def webkit_webrtc(self) -> dict[str, Any] | None: """ WebRTC policies. """ return self.get_capability(WEBKIT_WEBRTC) @webkit_webrtc.setter - def webkit_webrtc(self, value: Dict[str, Any]) -> None: + def webkit_webrtc(self, value: dict[str, Any]) -> None: """ This option allows a test to temporarily change Safari's policies for WebRTC and Media Capture. diff --git a/appium/options/ios/xcuitest/app/app_install_strategy_option.py b/appium/options/ios/xcuitest/app/app_install_strategy_option.py index ff812fe86..3ce9f8554 100644 --- a/appium/options/ios/xcuitest/app/app_install_strategy_option.py +++ b/appium/options/ios/xcuitest/app/app_install_strategy_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppInstallStrategyOption(SupportsCapabilities): @property - def app_install_strategy(self) -> Optional[str]: + def app_install_strategy(self) -> str | None: """ App install strategy. """ diff --git a/appium/options/ios/xcuitest/app/app_push_timeout_option.py b/appium/options/ios/xcuitest/app/app_push_timeout_option.py index 3f49bde96..a135b853b 100644 --- a/appium/options/ios/xcuitest/app/app_push_timeout_option.py +++ b/appium/options/ios/xcuitest/app/app_push_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class AppPushTimeoutOption(SupportsCapabilities): @property - def app_push_timeout(self) -> Optional[timedelta]: + def app_push_timeout(self) -> timedelta | None: """ Maximum timeout for application upload. """ @@ -33,7 +32,7 @@ def app_push_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @app_push_timeout.setter - def app_push_timeout(self, value: Union[timedelta, int]) -> None: + def app_push_timeout(self, value: timedelta | int) -> None: """ The timeout for application upload. Works for real devices only. diff --git a/appium/options/ios/xcuitest/app/localizable_strings_dir_option.py b/appium/options/ios/xcuitest/app/localizable_strings_dir_option.py index e78155a6c..21c985e49 100644 --- a/appium/options/ios/xcuitest/app/localizable_strings_dir_option.py +++ b/appium/options/ios/xcuitest/app/localizable_strings_dir_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class LocalizableStringsDirOption(SupportsCapabilities): @property - def localizable_strings_dir(self) -> Optional[str]: + def localizable_strings_dir(self) -> str | None: """ Resource folder name where the main locale strings are stored. """ diff --git a/appium/options/ios/xcuitest/base.py b/appium/options/ios/xcuitest/base.py index 0d349934c..75ad7aab4 100644 --- a/appium/options/ios/xcuitest/base.py +++ b/appium/options/ios/xcuitest/base.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict from appium.options.common.app_option import AppOption from appium.options.common.auto_web_view_option import AutoWebViewOption @@ -220,7 +219,7 @@ class XCUITestOptions( WebviewConnectTimeoutOption, ): @property - def default_capabilities(self) -> Dict: + def default_capabilities(self) -> dict: return { AUTOMATION_NAME: 'XCUITest', PLATFORM_NAME: 'iOS', diff --git a/appium/options/ios/xcuitest/general/include_device_caps_to_session_info_option.py b/appium/options/ios/xcuitest/general/include_device_caps_to_session_info_option.py index b5df6d286..388f90ccd 100644 --- a/appium/options/ios/xcuitest/general/include_device_caps_to_session_info_option.py +++ b/appium/options/ios/xcuitest/general/include_device_caps_to_session_info_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class IncludeDeviceCapsToSessionInfoOption(SupportsCapabilities): @property - def include_device_caps_to_session_info(self) -> Optional[bool]: + def include_device_caps_to_session_info(self) -> bool | None: """ Whether to include screen information as the result of Get Session Capabilities. """ diff --git a/appium/options/ios/xcuitest/general/reset_location_service_option.py b/appium/options/ios/xcuitest/general/reset_location_service_option.py index c9e242cc5..0c70dee46 100644 --- a/appium/options/ios/xcuitest/general/reset_location_service_option.py +++ b/appium/options/ios/xcuitest/general/reset_location_service_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ResetLocationServiceOption(SupportsCapabilities): @property - def reset_location_service(self) -> Optional[bool]: + def reset_location_service(self) -> bool | None: """ Whether to reset the location service in the session deletion on real devices. """ diff --git a/appium/options/ios/xcuitest/other/command_timeouts_option.py b/appium/options/ios/xcuitest/other/command_timeouts_option.py index 420b35039..f48c52de2 100644 --- a/appium/options/ios/xcuitest/other/command_timeouts_option.py +++ b/appium/options/ios/xcuitest/other/command_timeouts_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Dict, Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class CommandTimeoutsOption(SupportsCapabilities): @property - def command_timeouts(self) -> Optional[Union[Dict[str, timedelta], timedelta]]: + def command_timeouts(self) -> dict[str, timedelta] | timedelta | None: """ Custom timeout(s) for WDA backend commands execution. """ @@ -37,7 +36,7 @@ def command_timeouts(self) -> Optional[Union[Dict[str, timedelta], timedelta]]: return timedelta(milliseconds=int(value)) @command_timeouts.setter - def command_timeouts(self, value: Union[Dict[str, timedelta], timedelta, int]) -> None: + def command_timeouts(self, value: dict[str, timedelta] | timedelta | int) -> None: """ Custom timeout for all WDA backend commands execution. This might be useful if WDA backend freezes unexpectedly or requires too diff --git a/appium/options/ios/xcuitest/other/launch_with_idb_option.py b/appium/options/ios/xcuitest/other/launch_with_idb_option.py index c8701c620..9a2a99d8b 100644 --- a/appium/options/ios/xcuitest/other/launch_with_idb_option.py +++ b/appium/options/ios/xcuitest/other/launch_with_idb_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class LaunchWithIdbOption(SupportsCapabilities): @property - def launch_with_idb(self) -> Optional[bool]: + def launch_with_idb(self) -> bool | None: """ Whether to launch WebDriverAgentRunner with idb instead of xcodebuild. """ diff --git a/appium/options/ios/xcuitest/other/show_ios_log_option.py b/appium/options/ios/xcuitest/other/show_ios_log_option.py index b4bf75d3a..fba71a83a 100644 --- a/appium/options/ios/xcuitest/other/show_ios_log_option.py +++ b/appium/options/ios/xcuitest/other/show_ios_log_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ShowIosLogOption(SupportsCapabilities): @property - def show_ios_log(self) -> Optional[bool]: + def show_ios_log(self) -> bool | None: """ Whether to show any logs captured from a device in the appium logs. """ diff --git a/appium/options/ios/xcuitest/other/use_json_source_option.py b/appium/options/ios/xcuitest/other/use_json_source_option.py index 1eac50bb8..48b8d20a5 100644 --- a/appium/options/ios/xcuitest/other/use_json_source_option.py +++ b/appium/options/ios/xcuitest/other/use_json_source_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UseJsonSourceOption(SupportsCapabilities): @property - def use_json_source(self) -> Optional[bool]: + def use_json_source(self) -> bool | None: """ Whether to get JSON source from WDA and transform it to XML on the driver side. """ diff --git a/appium/options/ios/xcuitest/simulator/calendar_access_authorized_option.py b/appium/options/ios/xcuitest/simulator/calendar_access_authorized_option.py index a0e1afe9b..a9a4e08a1 100644 --- a/appium/options/ios/xcuitest/simulator/calendar_access_authorized_option.py +++ b/appium/options/ios/xcuitest/simulator/calendar_access_authorized_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class CalendarAccessAuthorizedOption(SupportsCapabilities): @property - def calendar_access_authorized(self) -> Optional[bool]: + def calendar_access_authorized(self) -> bool | None: """ Whether to enable calendar access on IOS Simulator. """ diff --git a/appium/options/ios/xcuitest/simulator/calendar_format_option.py b/appium/options/ios/xcuitest/simulator/calendar_format_option.py index 4e7565987..2d5c96519 100644 --- a/appium/options/ios/xcuitest/simulator/calendar_format_option.py +++ b/appium/options/ios/xcuitest/simulator/calendar_format_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class CalendarFormatOption(SupportsCapabilities): @property - def calendar_format(self) -> Optional[str]: + def calendar_format(self) -> str | None: """ Calendar format for the iOS Simulator. """ diff --git a/appium/options/ios/xcuitest/simulator/connect_hardware_keyboard_option.py b/appium/options/ios/xcuitest/simulator/connect_hardware_keyboard_option.py index f7118d6de..944a22627 100644 --- a/appium/options/ios/xcuitest/simulator/connect_hardware_keyboard_option.py +++ b/appium/options/ios/xcuitest/simulator/connect_hardware_keyboard_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ConnectHardwareKeyboardOption(SupportsCapabilities): @property - def connect_hardware_keyboard(self) -> Optional[bool]: + def connect_hardware_keyboard(self) -> bool | None: """ Whether to connect hardware keyboard to Simulator. """ diff --git a/appium/options/ios/xcuitest/simulator/custom_ssl_cert_option.py b/appium/options/ios/xcuitest/simulator/custom_ssl_cert_option.py index a3914b939..131e04283 100644 --- a/appium/options/ios/xcuitest/simulator/custom_ssl_cert_option.py +++ b/appium/options/ios/xcuitest/simulator/custom_ssl_cert_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class CustomSslCertOption(SupportsCapabilities): @property - def custom_ssl_cert(self) -> Optional[str]: + def custom_ssl_cert(self) -> str | None: """ SSL certificate content. """ diff --git a/appium/options/ios/xcuitest/simulator/enforce_fresh_simulator_creation_option.py b/appium/options/ios/xcuitest/simulator/enforce_fresh_simulator_creation_option.py index cea87eb05..ceb44d376 100644 --- a/appium/options/ios/xcuitest/simulator/enforce_fresh_simulator_creation_option.py +++ b/appium/options/ios/xcuitest/simulator/enforce_fresh_simulator_creation_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class EnforceFreshSimulatorCreationOption(SupportsCapabilities): @property - def enforce_fresh_simulator_creation(self) -> Optional[bool]: + def enforce_fresh_simulator_creation(self) -> bool | None: """ Whether to create a new simulator for each new test session. """ diff --git a/appium/options/ios/xcuitest/simulator/force_simulator_software_keyboard_presence_option.py b/appium/options/ios/xcuitest/simulator/force_simulator_software_keyboard_presence_option.py index 1e1a697aa..62915e91b 100644 --- a/appium/options/ios/xcuitest/simulator/force_simulator_software_keyboard_presence_option.py +++ b/appium/options/ios/xcuitest/simulator/force_simulator_software_keyboard_presence_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ForceSimulatorSoftwareKeyboardPresenceOption(SupportsCapabilities): @property - def force_simulator_software_keyboard_presence(self) -> Optional[bool]: + def force_simulator_software_keyboard_presence(self) -> bool | None: """ Whether to enforce software keyboard presence. """ diff --git a/appium/options/ios/xcuitest/simulator/ios_simulator_logs_predicate_option.py b/appium/options/ios/xcuitest/simulator/ios_simulator_logs_predicate_option.py index c7d486477..6e67354aa 100644 --- a/appium/options/ios/xcuitest/simulator/ios_simulator_logs_predicate_option.py +++ b/appium/options/ios/xcuitest/simulator/ios_simulator_logs_predicate_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class IosSimulatorLogsPredicateOption(SupportsCapabilities): @property - def ios_simulator_logs_predicate(self) -> Optional[bool]: + def ios_simulator_logs_predicate(self) -> bool | None: """ Get Simulator log filtering predicate. """ diff --git a/appium/options/ios/xcuitest/simulator/keep_key_chains_option.py b/appium/options/ios/xcuitest/simulator/keep_key_chains_option.py index a304c935e..9395b30b1 100644 --- a/appium/options/ios/xcuitest/simulator/keep_key_chains_option.py +++ b/appium/options/ios/xcuitest/simulator/keep_key_chains_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class KeepKeyChainsOption(SupportsCapabilities): @property - def keep_key_chains(self) -> Optional[bool]: + def keep_key_chains(self) -> bool | None: """ Whether to preserve Simulator keychains after full reset. """ diff --git a/appium/options/ios/xcuitest/simulator/keychains_exclude_patterns_option.py b/appium/options/ios/xcuitest/simulator/keychains_exclude_patterns_option.py index d971f5c5c..ddfba4223 100644 --- a/appium/options/ios/xcuitest/simulator/keychains_exclude_patterns_option.py +++ b/appium/options/ios/xcuitest/simulator/keychains_exclude_patterns_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class KeychainsExcludePatternsOption(SupportsCapabilities): @property - def keychains_exclude_patterns(self) -> Optional[str]: + def keychains_exclude_patterns(self) -> str | None: """ Keychains exclude patterns. """ diff --git a/appium/options/ios/xcuitest/simulator/permissions_option.py b/appium/options/ios/xcuitest/simulator/permissions_option.py index 6146e382b..1957273d6 100644 --- a/appium/options/ios/xcuitest/simulator/permissions_option.py +++ b/appium/options/ios/xcuitest/simulator/permissions_option.py @@ -16,7 +16,6 @@ # under the License. import json -from typing import Dict, Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class PermissionsOption(SupportsCapabilities): @property - def permissions(self) -> Optional[Dict[str, Dict[str, str]]]: + def permissions(self) -> dict[str, dict[str, str]] | None: """ Get Simulator permissions. """ @@ -33,7 +32,7 @@ def permissions(self) -> Optional[Dict[str, Dict[str, str]]]: return None if value is None else json.loads(value) @permissions.setter - def permissions(self, value: Dict[str, Dict[str, str]]) -> None: + def permissions(self, value: dict[str, dict[str, str]]) -> None: """ Allows setting of permissions for the specified application bundle on Simulator only. diff --git a/appium/options/ios/xcuitest/simulator/reduce_motion_option.py b/appium/options/ios/xcuitest/simulator/reduce_motion_option.py index 89dbe8779..29d0defb0 100644 --- a/appium/options/ios/xcuitest/simulator/reduce_motion_option.py +++ b/appium/options/ios/xcuitest/simulator/reduce_motion_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ReduceMotionOption(SupportsCapabilities): @property - def reduce_motion(self) -> Optional[bool]: + def reduce_motion(self) -> bool | None: """ Whether to reduce motion accessibility preference. """ diff --git a/appium/options/ios/xcuitest/simulator/reset_on_session_start_only_option.py b/appium/options/ios/xcuitest/simulator/reset_on_session_start_only_option.py index 294a72117..ce6b4d82f 100644 --- a/appium/options/ios/xcuitest/simulator/reset_on_session_start_only_option.py +++ b/appium/options/ios/xcuitest/simulator/reset_on_session_start_only_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ResetOnSessionStartOnlyOption(SupportsCapabilities): @property - def reset_on_session_start_only(self) -> Optional[bool]: + def reset_on_session_start_only(self) -> bool | None: """ Whether to perform Simulator reset on test session finish (false) or not (true). """ diff --git a/appium/options/ios/xcuitest/simulator/scale_factor_option.py b/appium/options/ios/xcuitest/simulator/scale_factor_option.py index 8b7e6e037..2d6b528b7 100644 --- a/appium/options/ios/xcuitest/simulator/scale_factor_option.py +++ b/appium/options/ios/xcuitest/simulator/scale_factor_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ScaleFactorOption(SupportsCapabilities): @property - def scale_factor(self) -> Optional[str]: + def scale_factor(self) -> str | None: """ Simulator scale factor. """ diff --git a/appium/options/ios/xcuitest/simulator/shutdown_other_simulators_option.py b/appium/options/ios/xcuitest/simulator/shutdown_other_simulators_option.py index a7c5edc51..60497919d 100644 --- a/appium/options/ios/xcuitest/simulator/shutdown_other_simulators_option.py +++ b/appium/options/ios/xcuitest/simulator/shutdown_other_simulators_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ShutdownOtherSimulatorsOption(SupportsCapabilities): @property - def shutdown_other_simulators(self) -> Optional[bool]: + def shutdown_other_simulators(self) -> bool | None: """ Whether to shut down of other booted simulators except of the current one. """ diff --git a/appium/options/ios/xcuitest/simulator/simulator_devices_set_path_option.py b/appium/options/ios/xcuitest/simulator/simulator_devices_set_path_option.py index 845575355..2ac9253e7 100644 --- a/appium/options/ios/xcuitest/simulator/simulator_devices_set_path_option.py +++ b/appium/options/ios/xcuitest/simulator/simulator_devices_set_path_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SimulatorDevicesSetPathOption(SupportsCapabilities): @property - def simulator_devices_set_path(self) -> Optional[str]: + def simulator_devices_set_path(self) -> str | None: """ Alternative path to the simulator devices set. """ diff --git a/appium/options/ios/xcuitest/simulator/simulator_pasteboard_automatic_sync_option.py b/appium/options/ios/xcuitest/simulator/simulator_pasteboard_automatic_sync_option.py index a1258df4e..435ea5aa8 100644 --- a/appium/options/ios/xcuitest/simulator/simulator_pasteboard_automatic_sync_option.py +++ b/appium/options/ios/xcuitest/simulator/simulator_pasteboard_automatic_sync_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SimulatorPasteboardAutomaticSyncOption(SupportsCapabilities): @property - def simulator_pasteboard_automatic_sync(self) -> Optional[bool]: + def simulator_pasteboard_automatic_sync(self) -> bool | None: """ Pasteboard automation sync state. """ diff --git a/appium/options/ios/xcuitest/simulator/simulator_startup_timeout_option.py b/appium/options/ios/xcuitest/simulator/simulator_startup_timeout_option.py index 29353498d..e282e229f 100644 --- a/appium/options/ios/xcuitest/simulator/simulator_startup_timeout_option.py +++ b/appium/options/ios/xcuitest/simulator/simulator_startup_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class SimulatorStartupTimeoutOption(SupportsCapabilities): @property - def simulator_startup_timeout(self) -> Optional[timedelta]: + def simulator_startup_timeout(self) -> timedelta | None: """ Simulator startup timeout. """ @@ -33,7 +32,7 @@ def simulator_startup_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @simulator_startup_timeout.setter - def simulator_startup_timeout(self, value: Union[timedelta, int]) -> None: + def simulator_startup_timeout(self, value: timedelta | int) -> None: """ Allows to change the default timeout for Simulator startup. By default, this value is set to 120000ms (2 minutes), diff --git a/appium/options/ios/xcuitest/simulator/simulator_trace_pointer_option.py b/appium/options/ios/xcuitest/simulator/simulator_trace_pointer_option.py index d5f5d1fd8..508cad64f 100644 --- a/appium/options/ios/xcuitest/simulator/simulator_trace_pointer_option.py +++ b/appium/options/ios/xcuitest/simulator/simulator_trace_pointer_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SimulatorTracePointerOption(SupportsCapabilities): @property - def simulator_trace_pointer(self) -> Optional[bool]: + def simulator_trace_pointer(self) -> bool | None: """ Whether to highlight pointer moves in the Simulator window. """ diff --git a/appium/options/ios/xcuitest/simulator/simulator_window_center_option.py b/appium/options/ios/xcuitest/simulator/simulator_window_center_option.py index 1f8b2d8b8..85c06c9a1 100644 --- a/appium/options/ios/xcuitest/simulator/simulator_window_center_option.py +++ b/appium/options/ios/xcuitest/simulator/simulator_window_center_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SimulatorWindowCenterOption(SupportsCapabilities): @property - def simulator_window_center(self) -> Optional[str]: + def simulator_window_center(self) -> str | None: """ Simulator window center coordinates. """ diff --git a/appium/options/ios/xcuitest/wda/allow_provisioning_device_regitration_option.py b/appium/options/ios/xcuitest/wda/allow_provisioning_device_regitration_option.py index c88124b4c..504cebf30 100644 --- a/appium/options/ios/xcuitest/wda/allow_provisioning_device_regitration_option.py +++ b/appium/options/ios/xcuitest/wda/allow_provisioning_device_regitration_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AllowProvisioningDeviceRegistrationOption(SupportsCapabilities): @property - def allow_provisioning_device_registration(self) -> Optional[bool]: + def allow_provisioning_device_registration(self) -> bool | None: """ Whether to allow xcodebuild to register your destination device on the developer portal. """ diff --git a/appium/options/ios/xcuitest/wda/auto_accept_alerts_option.py b/appium/options/ios/xcuitest/wda/auto_accept_alerts_option.py index 05c55943e..59378a857 100644 --- a/appium/options/ios/xcuitest/wda/auto_accept_alerts_option.py +++ b/appium/options/ios/xcuitest/wda/auto_accept_alerts_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AutoAcceptAlertsOption(SupportsCapabilities): @property - def auto_accept_alerts(self) -> Optional[bool]: + def auto_accept_alerts(self) -> bool | None: """ Whether to accept all alerts automatically. """ diff --git a/appium/options/ios/xcuitest/wda/auto_disimiss_alerts_option.py b/appium/options/ios/xcuitest/wda/auto_disimiss_alerts_option.py index 61a28414c..1900274c7 100644 --- a/appium/options/ios/xcuitest/wda/auto_disimiss_alerts_option.py +++ b/appium/options/ios/xcuitest/wda/auto_disimiss_alerts_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AutoDismissAlertsOption(SupportsCapabilities): @property - def auto_dismiss_alerts(self) -> Optional[bool]: + def auto_dismiss_alerts(self) -> bool | None: """ Whether to dismiss all alerts automatically. """ diff --git a/appium/options/ios/xcuitest/wda/derived_data_path_option.py b/appium/options/ios/xcuitest/wda/derived_data_path_option.py index ffa40a682..063df5489 100644 --- a/appium/options/ios/xcuitest/wda/derived_data_path_option.py +++ b/appium/options/ios/xcuitest/wda/derived_data_path_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class DerivedDataPathOption(SupportsCapabilities): @property - def derived_data_path(self) -> Optional[str]: + def derived_data_path(self) -> str | None: """ Path to the derived data WDA folder. """ diff --git a/appium/options/ios/xcuitest/wda/disable_automatic_screenshots_option.py b/appium/options/ios/xcuitest/wda/disable_automatic_screenshots_option.py index ac76af330..ef17b5d63 100644 --- a/appium/options/ios/xcuitest/wda/disable_automatic_screenshots_option.py +++ b/appium/options/ios/xcuitest/wda/disable_automatic_screenshots_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class DisableAutomaticScreenshotsOption(SupportsCapabilities): @property - def disable_automatic_screenshots(self) -> Optional[bool]: + def disable_automatic_screenshots(self) -> bool | None: """ Whether to disable automatic XCTest screenshots. """ diff --git a/appium/options/ios/xcuitest/wda/force_app_launch_option.py b/appium/options/ios/xcuitest/wda/force_app_launch_option.py index 364133d03..ba2f5d04c 100644 --- a/appium/options/ios/xcuitest/wda/force_app_launch_option.py +++ b/appium/options/ios/xcuitest/wda/force_app_launch_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ForceAppLaunchOption(SupportsCapabilities): @property - def force_app_launch(self) -> Optional[bool]: + def force_app_launch(self) -> bool | None: """ Whether to enforce app restart on session startup. """ diff --git a/appium/options/ios/xcuitest/wda/keychain_password_option.py b/appium/options/ios/xcuitest/wda/keychain_password_option.py index 5514519f0..e0a2a0914 100644 --- a/appium/options/ios/xcuitest/wda/keychain_password_option.py +++ b/appium/options/ios/xcuitest/wda/keychain_password_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class KeychainPasswordOption(SupportsCapabilities): @property - def keychain_password(self) -> Optional[str]: + def keychain_password(self) -> str | None: """ Custom keychain password. """ diff --git a/appium/options/ios/xcuitest/wda/keychain_path_option.py b/appium/options/ios/xcuitest/wda/keychain_path_option.py index 5cf397426..a3b111d8d 100644 --- a/appium/options/ios/xcuitest/wda/keychain_path_option.py +++ b/appium/options/ios/xcuitest/wda/keychain_path_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class KeychainPathOption(SupportsCapabilities): @property - def keychain_path(self) -> Optional[str]: + def keychain_path(self) -> str | None: """ Path to a custom keychain. """ diff --git a/appium/options/ios/xcuitest/wda/max_typing_frequency_option.py b/appium/options/ios/xcuitest/wda/max_typing_frequency_option.py index d5ea8dea1..0a778c603 100644 --- a/appium/options/ios/xcuitest/wda/max_typing_frequency_option.py +++ b/appium/options/ios/xcuitest/wda/max_typing_frequency_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class MaxTypingFrequencyOption(SupportsCapabilities): @property - def max_typing_frequency(self) -> Optional[int]: + def max_typing_frequency(self) -> int | None: """ The number of keystrokes per minute. """ diff --git a/appium/options/ios/xcuitest/wda/mjpeg_server_port_option.py b/appium/options/ios/xcuitest/wda/mjpeg_server_port_option.py index 679c1af4a..dedd43ee0 100644 --- a/appium/options/ios/xcuitest/wda/mjpeg_server_port_option.py +++ b/appium/options/ios/xcuitest/wda/mjpeg_server_port_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class MjpegServerPortOption(SupportsCapabilities): @property - def mjpeg_server_port(self) -> Optional[int]: + def mjpeg_server_port(self) -> int | None: """ Port number on which WDA broadcasts screenshots stream encoded into MJPEG format from the device under test. diff --git a/appium/options/ios/xcuitest/wda/prebuilt_wda_path_option.py b/appium/options/ios/xcuitest/wda/prebuilt_wda_path_option.py index f26d12f0a..649b5cf69 100644 --- a/appium/options/ios/xcuitest/wda/prebuilt_wda_path_option.py +++ b/appium/options/ios/xcuitest/wda/prebuilt_wda_path_option.py @@ -15,7 +15,6 @@ # language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class PrebuiltWdaPathOption(SupportsCapabilities): @property - def prebuilt_wda_path(self) -> Optional[str]: + def prebuilt_wda_path(self) -> str | None: """ The path to the prebuilt WebDriverAgent. """ diff --git a/appium/options/ios/xcuitest/wda/process_arguments_option.py b/appium/options/ios/xcuitest/wda/process_arguments_option.py index 5b169a945..07f7ef126 100644 --- a/appium/options/ios/xcuitest/wda/process_arguments_option.py +++ b/appium/options/ios/xcuitest/wda/process_arguments_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict, List, Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +23,14 @@ class ProcessArgumentsOption(SupportsCapabilities): @property - def process_arguments(self) -> Optional[Dict[str, Union[List[str], Dict[str, str]]]]: + def process_arguments(self) -> dict[str, list[str] | dict[str, str]] | None: """ Command line arguments and/or environment variables of the application under test. """ return self.get_capability(PROCESS_ARGUMENTS) @process_arguments.setter - def process_arguments(self, value: Dict[str, Union[List[str], Dict[str, str]]]) -> None: + def process_arguments(self, value: dict[str, list[str] | dict[str, str]]) -> None: """ Provides process arguments and environment which will be sent to the WebDriverAgent server. Acceptable dictionary keys are 'env' diff --git a/appium/options/ios/xcuitest/wda/result_bundle_path_option.py b/appium/options/ios/xcuitest/wda/result_bundle_path_option.py index 5cf7ec098..f3e470acc 100644 --- a/appium/options/ios/xcuitest/wda/result_bundle_path_option.py +++ b/appium/options/ios/xcuitest/wda/result_bundle_path_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ResultBundlePathOption(SupportsCapabilities): @property - def result_bundle_path(self) -> Optional[str]: + def result_bundle_path(self) -> str | None: """ Path where the resulting XCTest bundle should be stored. """ diff --git a/appium/options/ios/xcuitest/wda/screenshot_quality_option.py b/appium/options/ios/xcuitest/wda/screenshot_quality_option.py index d808db9d6..bbe052fa2 100644 --- a/appium/options/ios/xcuitest/wda/screenshot_quality_option.py +++ b/appium/options/ios/xcuitest/wda/screenshot_quality_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ScreenshotQualityOption(SupportsCapabilities): @property - def screenshot_quality(self) -> Optional[int]: + def screenshot_quality(self) -> int | None: """ Screenshot quality value. """ diff --git a/appium/options/ios/xcuitest/wda/should_terminate_app_option.py b/appium/options/ios/xcuitest/wda/should_terminate_app_option.py index 8550627cf..3d9fc07ad 100644 --- a/appium/options/ios/xcuitest/wda/should_terminate_app_option.py +++ b/appium/options/ios/xcuitest/wda/should_terminate_app_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ShouldTerminateAppOption(SupportsCapabilities): @property - def should_terminate_app(self) -> Optional[bool]: + def should_terminate_app(self) -> bool | None: """ Whether to enforce app termination on session quit. """ diff --git a/appium/options/ios/xcuitest/wda/should_use_singleton_test_manager_option.py b/appium/options/ios/xcuitest/wda/should_use_singleton_test_manager_option.py index 569236810..6fbf4e893 100644 --- a/appium/options/ios/xcuitest/wda/should_use_singleton_test_manager_option.py +++ b/appium/options/ios/xcuitest/wda/should_use_singleton_test_manager_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ShouldUseSingletonTestManagerOption(SupportsCapabilities): @property - def should_use_singleton_test_manager(self) -> Optional[bool]: + def should_use_singleton_test_manager(self) -> bool | None: """ Whether to use the default proxy for test management within WebDriverAgent. """ diff --git a/appium/options/ios/xcuitest/wda/show_xcode_log_option.py b/appium/options/ios/xcuitest/wda/show_xcode_log_option.py index 0e435b71d..26cd52f9e 100644 --- a/appium/options/ios/xcuitest/wda/show_xcode_log_option.py +++ b/appium/options/ios/xcuitest/wda/show_xcode_log_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ShowXcodeLogOption(SupportsCapabilities): @property - def show_xcode_log(self) -> Optional[bool]: + def show_xcode_log(self) -> bool | None: """ Whether to display the output of the Xcode command used to run the tests. """ diff --git a/appium/options/ios/xcuitest/wda/simple_is_visible_check_option.py b/appium/options/ios/xcuitest/wda/simple_is_visible_check_option.py index 694ed5743..1f596b0af 100644 --- a/appium/options/ios/xcuitest/wda/simple_is_visible_check_option.py +++ b/appium/options/ios/xcuitest/wda/simple_is_visible_check_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SimpleIsVisibleCheckOption(SupportsCapabilities): @property - def simple_is_visible_check(self) -> Optional[bool]: + def simple_is_visible_check(self) -> bool | None: """ Whether to use native methods for determining visibility of elements. """ diff --git a/appium/options/ios/xcuitest/wda/updated_wda_bundle_id_option.py b/appium/options/ios/xcuitest/wda/updated_wda_bundle_id_option.py index b799c949b..a6f2a8eef 100644 --- a/appium/options/ios/xcuitest/wda/updated_wda_bundle_id_option.py +++ b/appium/options/ios/xcuitest/wda/updated_wda_bundle_id_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UpdatedWdaBundleIdOption(SupportsCapabilities): @property - def updated_wda_bundle_id(self) -> Optional[str]: + def updated_wda_bundle_id(self) -> str | None: """ WDA bundle identifier. """ diff --git a/appium/options/ios/xcuitest/wda/use_native_caching_strategy_option.py b/appium/options/ios/xcuitest/wda/use_native_caching_strategy_option.py index a3e30de17..f59bf6067 100644 --- a/appium/options/ios/xcuitest/wda/use_native_caching_strategy_option.py +++ b/appium/options/ios/xcuitest/wda/use_native_caching_strategy_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UseNativeCachingStrategyOption(SupportsCapabilities): @property - def use_native_caching_strategy(self) -> Optional[bool]: + def use_native_caching_strategy(self) -> bool | None: """ Whether to use the native caching strategy. """ diff --git a/appium/options/ios/xcuitest/wda/use_new_wda_option.py b/appium/options/ios/xcuitest/wda/use_new_wda_option.py index f52684a65..fddfec6b1 100644 --- a/appium/options/ios/xcuitest/wda/use_new_wda_option.py +++ b/appium/options/ios/xcuitest/wda/use_new_wda_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UseNewWdaOption(SupportsCapabilities): @property - def use_new_wda(self) -> Optional[bool]: + def use_new_wda(self) -> bool | None: """ Whether whether to uninstall of any existing WebDriverAgent app on the device under test. diff --git a/appium/options/ios/xcuitest/wda/use_prebuilt_wda_option.py b/appium/options/ios/xcuitest/wda/use_prebuilt_wda_option.py index 76fd5163e..4d1c8d1bf 100644 --- a/appium/options/ios/xcuitest/wda/use_prebuilt_wda_option.py +++ b/appium/options/ios/xcuitest/wda/use_prebuilt_wda_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UsePrebuiltWdaOption(SupportsCapabilities): @property - def use_prebuilt_wda(self) -> Optional[bool]: + def use_prebuilt_wda(self) -> bool | None: """ Whether to skip the build phase of running the WDA app. """ diff --git a/appium/options/ios/xcuitest/wda/use_preinstalled_wda_option.py b/appium/options/ios/xcuitest/wda/use_preinstalled_wda_option.py index 547d87f90..0ea313a91 100644 --- a/appium/options/ios/xcuitest/wda/use_preinstalled_wda_option.py +++ b/appium/options/ios/xcuitest/wda/use_preinstalled_wda_option.py @@ -15,7 +15,6 @@ # language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UsePreinstalledWdaOption(SupportsCapabilities): @property - def use_preinstalled_wda(self) -> Optional[bool]: + def use_preinstalled_wda(self) -> bool | None: """ Whether to use a preinstalled WebDriverAgent. """ diff --git a/appium/options/ios/xcuitest/wda/use_simple_build_test_option.py b/appium/options/ios/xcuitest/wda/use_simple_build_test_option.py index 516e08cbe..86cba52a5 100644 --- a/appium/options/ios/xcuitest/wda/use_simple_build_test_option.py +++ b/appium/options/ios/xcuitest/wda/use_simple_build_test_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UseSimpleBuildTestOption(SupportsCapabilities): @property - def use_simple_build_test(self) -> Optional[bool]: + def use_simple_build_test(self) -> bool | None: """ Whether to enforce app termination on session quit. """ diff --git a/appium/options/ios/xcuitest/wda/use_xctestrun_file_option.py b/appium/options/ios/xcuitest/wda/use_xctestrun_file_option.py index 0d1a3c64b..cb74886fc 100644 --- a/appium/options/ios/xcuitest/wda/use_xctestrun_file_option.py +++ b/appium/options/ios/xcuitest/wda/use_xctestrun_file_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class UseXctestrunFileOption(SupportsCapabilities): @property - def use_xctestrun_file(self) -> Optional[bool]: + def use_xctestrun_file(self) -> bool | None: """ Whether to use of .xctestrun file to launch WDA. """ diff --git a/appium/options/ios/xcuitest/wda/wait_for_idle_timeout_option.py b/appium/options/ios/xcuitest/wda/wait_for_idle_timeout_option.py index ff994d43e..06a0420a4 100644 --- a/appium/options/ios/xcuitest/wda/wait_for_idle_timeout_option.py +++ b/appium/options/ios/xcuitest/wda/wait_for_idle_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class WaitForIdleTimeoutOption(SupportsCapabilities): @property - def wait_for_idle_timeout(self) -> Optional[timedelta]: + def wait_for_idle_timeout(self) -> timedelta | None: """ Maximum timeout to wait until WDA responds to HTTP requests. """ @@ -33,7 +32,7 @@ def wait_for_idle_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(seconds=value) @wait_for_idle_timeout.setter - def wait_for_idle_timeout(self, value: Union[timedelta, float]) -> None: + def wait_for_idle_timeout(self, value: timedelta | float) -> None: """ The time to wait until the application under test is idling. XCTest requires the app's main thread to be idling in order to execute any action on it, diff --git a/appium/options/ios/xcuitest/wda/wait_for_quiescence_option.py b/appium/options/ios/xcuitest/wda/wait_for_quiescence_option.py index b8be7f322..d4e108940 100644 --- a/appium/options/ios/xcuitest/wda/wait_for_quiescence_option.py +++ b/appium/options/ios/xcuitest/wda/wait_for_quiescence_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,14 +24,14 @@ class WaitForQuiescenceOption(SupportsCapabilities): @property - def wait_for_quiescence(self) -> Optional[bool]: + def wait_for_quiescence(self) -> bool | None: """ Whether to wait for application quiescence. """ return self.get_capability(WAIT_FOR_QUIESCENCE) @wait_for_quiescence.setter - def wait_for_quiescence(self, value: Union[timedelta, float]) -> None: + def wait_for_quiescence(self, value: timedelta | float) -> None: """ It allows to turn on/off waiting for application quiescence in WebDriverAgent, while performing queries. The default value is true. You can avoid this kind diff --git a/appium/options/ios/xcuitest/wda/wda_base_url_option.py b/appium/options/ios/xcuitest/wda/wda_base_url_option.py index c2ca5cd81..f777aa510 100644 --- a/appium/options/ios/xcuitest/wda/wda_base_url_option.py +++ b/appium/options/ios/xcuitest/wda/wda_base_url_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class WdaBaseUrlOption(SupportsCapabilities): @property - def wda_base_url(self) -> Optional[str]: + def wda_base_url(self) -> str | None: """ Prefix to build a custom WebDriverAgent URL. """ diff --git a/appium/options/ios/xcuitest/wda/wda_connection_timeout_option.py b/appium/options/ios/xcuitest/wda/wda_connection_timeout_option.py index e21bb1834..10711810f 100644 --- a/appium/options/ios/xcuitest/wda/wda_connection_timeout_option.py +++ b/appium/options/ios/xcuitest/wda/wda_connection_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class WdaConnectionTimeoutOption(SupportsCapabilities): @property - def wda_connection_timeout(self) -> Optional[timedelta]: + def wda_connection_timeout(self) -> timedelta | None: """ Maximum timeout to wait until WDA responds to HTTP requests. """ @@ -33,7 +32,7 @@ def wda_connection_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @wda_connection_timeout.setter - def wda_connection_timeout(self, value: Union[timedelta, int]) -> None: + def wda_connection_timeout(self, value: timedelta | int) -> None: """ Connection timeout to wait for a response from WebDriverAgent. Defaults to 240000ms. diff --git a/appium/options/ios/xcuitest/wda/wda_eventloop_idle_delay_option.py b/appium/options/ios/xcuitest/wda/wda_eventloop_idle_delay_option.py index e957f2690..f6661da88 100644 --- a/appium/options/ios/xcuitest/wda/wda_eventloop_idle_delay_option.py +++ b/appium/options/ios/xcuitest/wda/wda_eventloop_idle_delay_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class WdaEventloopIdleDelayOption(SupportsCapabilities): @property - def wda_eventloop_idle_delay(self) -> Optional[timedelta]: + def wda_eventloop_idle_delay(self) -> timedelta | None: """ Event loop idle delay. """ @@ -33,7 +32,7 @@ def wda_eventloop_idle_delay(self) -> Optional[timedelta]: return None if value is None else timedelta(seconds=value) @wda_eventloop_idle_delay.setter - def wda_eventloop_idle_delay(self, value: Union[timedelta, float]) -> None: + def wda_eventloop_idle_delay(self, value: timedelta | float) -> None: """ Delays the invocation of -[XCUIApplicationProcess setEventLoopHasIdled:] by the duration specified with this capability. This can help quiescence apps diff --git a/appium/options/ios/xcuitest/wda/wda_launch_timeout_option.py b/appium/options/ios/xcuitest/wda/wda_launch_timeout_option.py index 325b7e40e..cbc911c4b 100644 --- a/appium/options/ios/xcuitest/wda/wda_launch_timeout_option.py +++ b/appium/options/ios/xcuitest/wda/wda_launch_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class WdaLaunchTimeoutOption(SupportsCapabilities): @property - def wda_launch_timeout(self) -> Optional[timedelta]: + def wda_launch_timeout(self) -> timedelta | None: """ Maximum timeout to wait until WDA is listening. """ @@ -33,7 +32,7 @@ def wda_launch_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @wda_launch_timeout.setter - def wda_launch_timeout(self, value: Union[timedelta, int]) -> None: + def wda_launch_timeout(self, value: timedelta | int) -> None: """ Timeout to wait for WebDriverAgent to be pingable, after its building is finished. Defaults to 60000ms. diff --git a/appium/options/ios/xcuitest/wda/wda_local_port_option.py b/appium/options/ios/xcuitest/wda/wda_local_port_option.py index 1af241a35..b0ca7031e 100644 --- a/appium/options/ios/xcuitest/wda/wda_local_port_option.py +++ b/appium/options/ios/xcuitest/wda/wda_local_port_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class WdaLocalPortOption(SupportsCapabilities): @property - def wda_local_port(self) -> Optional[int]: + def wda_local_port(self) -> int | None: """ Local port number where the WDA traffic is being forwarded. """ diff --git a/appium/options/ios/xcuitest/wda/wda_startup_retries_option.py b/appium/options/ios/xcuitest/wda/wda_startup_retries_option.py index a70999621..00de25d4c 100644 --- a/appium/options/ios/xcuitest/wda/wda_startup_retries_option.py +++ b/appium/options/ios/xcuitest/wda/wda_startup_retries_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class WdaStartupRetriesOption(SupportsCapabilities): @property - def wda_startup_retries(self) -> Optional[int]: + def wda_startup_retries(self) -> int | None: """ Number of retries before to fail WDA deployment. """ diff --git a/appium/options/ios/xcuitest/wda/wda_startup_retry_interval_option.py b/appium/options/ios/xcuitest/wda/wda_startup_retry_interval_option.py index 99d89daa6..53313e895 100644 --- a/appium/options/ios/xcuitest/wda/wda_startup_retry_interval_option.py +++ b/appium/options/ios/xcuitest/wda/wda_startup_retry_interval_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class WdaStartupRetryIntervalOption(SupportsCapabilities): @property - def wda_startup_retry_interval(self) -> Optional[timedelta]: + def wda_startup_retry_interval(self) -> timedelta | None: """ Interval to wait between tries to build and launch WebDriverAgent. """ @@ -33,7 +32,7 @@ def wda_startup_retry_interval(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @wda_startup_retry_interval.setter - def wda_startup_retry_interval(self, value: Union[timedelta, int]) -> None: + def wda_startup_retry_interval(self, value: timedelta | int) -> None: """ Time interval to wait between tries to build and launch WebDriverAgent. Defaults to 10000ms. diff --git a/appium/options/ios/xcuitest/wda/web_driver_agent_url_option.py b/appium/options/ios/xcuitest/wda/web_driver_agent_url_option.py index 5dd89f2c6..b453bee38 100644 --- a/appium/options/ios/xcuitest/wda/web_driver_agent_url_option.py +++ b/appium/options/ios/xcuitest/wda/web_driver_agent_url_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class WebDriverAgentUrlOption(SupportsCapabilities): @property - def web_driver_agent_url(self) -> Optional[str]: + def web_driver_agent_url(self) -> str | None: """ WedDriverAgent URL. """ diff --git a/appium/options/ios/xcuitest/wda/xcode_org_id_option.py b/appium/options/ios/xcuitest/wda/xcode_org_id_option.py index d5c517935..1ddb3f1c7 100644 --- a/appium/options/ios/xcuitest/wda/xcode_org_id_option.py +++ b/appium/options/ios/xcuitest/wda/xcode_org_id_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class XcodeOrgIdOption(SupportsCapabilities): @property - def xcode_org_id(self) -> Optional[str]: + def xcode_org_id(self) -> str | None: """ Signing certificate organization id for WebDriverAgent compilation. """ diff --git a/appium/options/ios/xcuitest/wda/xcode_signing_id_option.py b/appium/options/ios/xcuitest/wda/xcode_signing_id_option.py index 08ba1855e..ce1877cb6 100644 --- a/appium/options/ios/xcuitest/wda/xcode_signing_id_option.py +++ b/appium/options/ios/xcuitest/wda/xcode_signing_id_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class XcodeSigningIdOption(SupportsCapabilities): @property - def xcode_signing_id(self) -> Optional[str]: + def xcode_signing_id(self) -> str | None: """ Signing certificate for WebDriverAgent compilation. """ diff --git a/appium/options/ios/xcuitest/webview/absolute_web_locations_option.py b/appium/options/ios/xcuitest/webview/absolute_web_locations_option.py index 114c737dc..50ffdc67d 100644 --- a/appium/options/ios/xcuitest/webview/absolute_web_locations_option.py +++ b/appium/options/ios/xcuitest/webview/absolute_web_locations_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AbsoluteWebLocationsOption(SupportsCapabilities): @property - def absolute_web_locations(self) -> Optional[bool]: + def absolute_web_locations(self) -> bool | None: """ Whether Get Element Location returns coordinates relative to the page origin for web view elements. diff --git a/appium/options/ios/xcuitest/webview/additional_webview_bundle_ids_option.py b/appium/options/ios/xcuitest/webview/additional_webview_bundle_ids_option.py index 6546c548f..1e75499da 100644 --- a/appium/options/ios/xcuitest/webview/additional_webview_bundle_ids_option.py +++ b/appium/options/ios/xcuitest/webview/additional_webview_bundle_ids_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import List, Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +23,14 @@ class AdditionalWebviewBundleIdsOption(SupportsCapabilities): @property - def additional_webview_bundle_ids(self) -> Optional[List[str]]: + def additional_webview_bundle_ids(self) -> list[str] | None: """ Array of possible bundle identifiers for webviews. """ return self.get_capability(ADDITIONAL_WEBVIEW_BUNDLE_IDS) @additional_webview_bundle_ids.setter - def additional_webview_bundle_ids(self, value: List[str]) -> None: + def additional_webview_bundle_ids(self, value: list[str]) -> None: """ Array of possible bundle identifiers for webviews. This is sometimes necessary if the Web Inspector is found to be returning a modified diff --git a/appium/options/ios/xcuitest/webview/enable_async_execute_from_https_option.py b/appium/options/ios/xcuitest/webview/enable_async_execute_from_https_option.py index ae2a3dcc1..d76d24544 100644 --- a/appium/options/ios/xcuitest/webview/enable_async_execute_from_https_option.py +++ b/appium/options/ios/xcuitest/webview/enable_async_execute_from_https_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class EnableAsyncExecuteFromHttpsOption(SupportsCapabilities): @property - def enable_async_execute_from_https(self) -> Optional[bool]: + def enable_async_execute_from_https(self) -> bool | None: """ Whether to allow simulators to execute async JavaScript on pages using HTTPS. """ diff --git a/appium/options/ios/xcuitest/webview/full_context_list_option.py b/appium/options/ios/xcuitest/webview/full_context_list_option.py index 7bdd3102d..c58e73e1f 100644 --- a/appium/options/ios/xcuitest/webview/full_context_list_option.py +++ b/appium/options/ios/xcuitest/webview/full_context_list_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class FullContextListOption(SupportsCapabilities): @property - def full_context_list(self) -> Optional[bool]: + def full_context_list(self) -> bool | None: """ Whether to return the detailed information on contexts for the get available context command. diff --git a/appium/options/ios/xcuitest/webview/include_safari_in_webviews_option.py b/appium/options/ios/xcuitest/webview/include_safari_in_webviews_option.py index c21cb141c..ff13eb423 100644 --- a/appium/options/ios/xcuitest/webview/include_safari_in_webviews_option.py +++ b/appium/options/ios/xcuitest/webview/include_safari_in_webviews_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class IncludeSafariInWebviewsOption(SupportsCapabilities): @property - def include_safari_in_webviews(self) -> Optional[bool]: + def include_safari_in_webviews(self) -> bool | None: """ Whether to add Safari web views to the list of contexts available during a native/webview app test. diff --git a/appium/options/ios/xcuitest/webview/native_web_tap_option.py b/appium/options/ios/xcuitest/webview/native_web_tap_option.py index 02a40b98e..3ca218eb9 100644 --- a/appium/options/ios/xcuitest/webview/native_web_tap_option.py +++ b/appium/options/ios/xcuitest/webview/native_web_tap_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class NativeWebTapOption(SupportsCapabilities): @property - def native_web_tap(self) -> Optional[bool]: + def native_web_tap(self) -> bool | None: """ Whether to enable native taps in web view mode. """ diff --git a/appium/options/ios/xcuitest/webview/safari_garbage_collect_option.py b/appium/options/ios/xcuitest/webview/safari_garbage_collect_option.py index 63aefc4c4..696a19137 100644 --- a/appium/options/ios/xcuitest/webview/safari_garbage_collect_option.py +++ b/appium/options/ios/xcuitest/webview/safari_garbage_collect_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SafariGarbageCollectOption(SupportsCapabilities): @property - def safari_garbage_collect(self) -> Optional[bool]: + def safari_garbage_collect(self) -> bool | None: """ Whether to turn on garbage collection when executing scripts on Safari. """ diff --git a/appium/options/ios/xcuitest/webview/safari_ignore_fraud_warning_option.py b/appium/options/ios/xcuitest/webview/safari_ignore_fraud_warning_option.py index c600285d0..38f6cc2bb 100644 --- a/appium/options/ios/xcuitest/webview/safari_ignore_fraud_warning_option.py +++ b/appium/options/ios/xcuitest/webview/safari_ignore_fraud_warning_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SafariIgnoreFraudWarningOption(SupportsCapabilities): @property - def safari_ignore_fraud_warning(self) -> Optional[bool]: + def safari_ignore_fraud_warning(self) -> bool | None: """ Whether to prevent Safari from showing a fraudulent website warning. """ diff --git a/appium/options/ios/xcuitest/webview/safari_ignore_web_hostnames_option.py b/appium/options/ios/xcuitest/webview/safari_ignore_web_hostnames_option.py index 9f48f8cf3..e8f9052f3 100644 --- a/appium/options/ios/xcuitest/webview/safari_ignore_web_hostnames_option.py +++ b/appium/options/ios/xcuitest/webview/safari_ignore_web_hostnames_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SafariIgnoreWebHostnamesOption(SupportsCapabilities): @property - def safari_ignore_web_hostnames(self) -> Optional[str]: + def safari_ignore_web_hostnames(self) -> str | None: """ Comma-separated list of host names to be ignored. """ diff --git a/appium/options/ios/xcuitest/webview/safari_initial_url_option.py b/appium/options/ios/xcuitest/webview/safari_initial_url_option.py index 79dc14fe3..5787cd2da 100644 --- a/appium/options/ios/xcuitest/webview/safari_initial_url_option.py +++ b/appium/options/ios/xcuitest/webview/safari_initial_url_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SafariInitialUrlOption(SupportsCapabilities): @property - def safari_initial_url(self) -> Optional[str]: + def safari_initial_url(self) -> str | None: """ The initial safari url. """ diff --git a/appium/options/ios/xcuitest/webview/safari_log_all_communication_hex_dump_option.py b/appium/options/ios/xcuitest/webview/safari_log_all_communication_hex_dump_option.py index 03b2e28cc..ef7d15af7 100644 --- a/appium/options/ios/xcuitest/webview/safari_log_all_communication_hex_dump_option.py +++ b/appium/options/ios/xcuitest/webview/safari_log_all_communication_hex_dump_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SafariLogAllCommunicationHexDumpOption(SupportsCapabilities): @property - def safari_log_all_communication_hex_dump(self) -> Optional[bool]: + def safari_log_all_communication_hex_dump(self) -> bool | None: """ Whether to log of plists sent to and received from the Web Inspector in hex dump format. diff --git a/appium/options/ios/xcuitest/webview/safari_log_all_communication_option.py b/appium/options/ios/xcuitest/webview/safari_log_all_communication_option.py index b022dba3d..36ff3f1f7 100644 --- a/appium/options/ios/xcuitest/webview/safari_log_all_communication_option.py +++ b/appium/options/ios/xcuitest/webview/safari_log_all_communication_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SafariLogAllCommunicationOption(SupportsCapabilities): @property - def safari_log_all_communication(self) -> Optional[bool]: + def safari_log_all_communication(self) -> bool | None: """ Whether to log of plists sent to and received from the Web Inspector. """ diff --git a/appium/options/ios/xcuitest/webview/safari_open_links_in_background_option.py b/appium/options/ios/xcuitest/webview/safari_open_links_in_background_option.py index 2ebb48011..4fe804d77 100644 --- a/appium/options/ios/xcuitest/webview/safari_open_links_in_background_option.py +++ b/appium/options/ios/xcuitest/webview/safari_open_links_in_background_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SafariOpenLinksInBackgroundOption(SupportsCapabilities): @property - def safari_open_links_in_background(self) -> Optional[bool]: + def safari_open_links_in_background(self) -> bool | None: """ Whether Safari should allow links to open in new windows. """ diff --git a/appium/options/ios/xcuitest/webview/safari_socket_chunk_size_option.py b/appium/options/ios/xcuitest/webview/safari_socket_chunk_size_option.py index c33ea61d2..c5fb4bff6 100644 --- a/appium/options/ios/xcuitest/webview/safari_socket_chunk_size_option.py +++ b/appium/options/ios/xcuitest/webview/safari_socket_chunk_size_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SafariSocketChunkSizeOption(SupportsCapabilities): @property - def safari_socket_chunk_size(self) -> Optional[int]: + def safari_socket_chunk_size(self) -> int | None: """ Get the size of a single remote debugger socket chunk. """ diff --git a/appium/options/ios/xcuitest/webview/safari_web_inspector_max_frame_length_option.py b/appium/options/ios/xcuitest/webview/safari_web_inspector_max_frame_length_option.py index d92fb2d4a..6732dfef2 100644 --- a/appium/options/ios/xcuitest/webview/safari_web_inspector_max_frame_length_option.py +++ b/appium/options/ios/xcuitest/webview/safari_web_inspector_max_frame_length_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SafariWebInspectorMaxFrameLengthOption(SupportsCapabilities): @property - def safari_web_inspector_max_frame_length(self) -> Optional[int]: + def safari_web_inspector_max_frame_length(self) -> int | None: """ Maximum size in bytes of a single data frame for the Web Inspector. """ diff --git a/appium/options/ios/xcuitest/webview/webkit_response_timeout_option.py b/appium/options/ios/xcuitest/webview/webkit_response_timeout_option.py index 1e274bf01..25d0f8d76 100644 --- a/appium/options/ios/xcuitest/webview/webkit_response_timeout_option.py +++ b/appium/options/ios/xcuitest/webview/webkit_response_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class WebkitResponseTimeoutOption(SupportsCapabilities): @property - def webkit_response_timeout(self) -> Optional[timedelta]: + def webkit_response_timeout(self) -> timedelta | None: """ Time to wait for a response from WebKit in a Safari session. """ @@ -33,7 +32,7 @@ def webkit_response_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @webkit_response_timeout.setter - def webkit_response_timeout(self, value: Union[timedelta, int]) -> None: + def webkit_response_timeout(self, value: timedelta | int) -> None: """ (Real device only) Set the time to wait for a response from WebKit in a Safari session. Defaults to 5000ms. diff --git a/appium/options/ios/xcuitest/webview/webview_connect_retries_option.py b/appium/options/ios/xcuitest/webview/webview_connect_retries_option.py index 7792f15b0..e8dd86b36 100644 --- a/appium/options/ios/xcuitest/webview/webview_connect_retries_option.py +++ b/appium/options/ios/xcuitest/webview/webview_connect_retries_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class WebviewConnectRetriesOption(SupportsCapabilities): @property - def webview_connect_retries(self) -> Optional[int]: + def webview_connect_retries(self) -> int | None: """ Number of retries to send connection message to remote debugger, to get a webview. diff --git a/appium/options/ios/xcuitest/webview/webview_connect_timeout_option.py b/appium/options/ios/xcuitest/webview/webview_connect_timeout_option.py index 9fa742020..b011e6a47 100644 --- a/appium/options/ios/xcuitest/webview/webview_connect_timeout_option.py +++ b/appium/options/ios/xcuitest/webview/webview_connect_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class WebviewConnectTimeoutOption(SupportsCapabilities): @property - def webview_connect_timeout(self) -> Optional[timedelta]: + def webview_connect_timeout(self) -> timedelta | None: """ Timeout to wait for the initial presence of webviews. """ @@ -33,7 +32,7 @@ def webview_connect_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @webview_connect_timeout.setter - def webview_connect_timeout(self, value: Union[timedelta, int]) -> None: + def webview_connect_timeout(self, value: timedelta | int) -> None: """ The time to wait for the initial presence of webviews in MobileSafari or hybrid apps. Defaults to 0ms. diff --git a/appium/options/mac/mac2/app_path_option.py b/appium/options/mac/mac2/app_path_option.py index 71506fd45..bf12ea633 100644 --- a/appium/options/mac/mac2/app_path_option.py +++ b/appium/options/mac/mac2/app_path_option.py @@ -16,7 +16,6 @@ # under the License. from os import PathLike, fspath -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,14 +24,14 @@ class AppPathOption(SupportsCapabilities): @property - def app_path(self) -> Optional[str]: + def app_path(self) -> str | None: """ The path of the application to automate. """ return self.get_capability(APP_PATH) @app_path.setter - def app_path(self, value: Union[str, PathLike]) -> None: + def app_path(self, value: str | PathLike) -> None: """ Set the path of the application to automate. """ diff --git a/appium/options/mac/mac2/arguments_option.py b/appium/options/mac/mac2/arguments_option.py index 3c9a5a70e..063ebe94f 100644 --- a/appium/options/mac/mac2/arguments_option.py +++ b/appium/options/mac/mac2/arguments_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import List, Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +23,14 @@ class ArgumentsOption(SupportsCapabilities): @property - def arguments(self) -> Optional[List[str]]: + def arguments(self) -> list[str] | None: """ Array of application command line arguments. """ return self.get_capability(ARGUMENTS) @arguments.setter - def arguments(self, value: List[str]) -> None: + def arguments(self, value: list[str]) -> None: """ Set the array of application command line arguments. This capability is only going to be applied if the application is not running on session startup. diff --git a/appium/options/mac/mac2/base.py b/appium/options/mac/mac2/base.py index d635f2b38..511a096f4 100644 --- a/appium/options/mac/mac2/base.py +++ b/appium/options/mac/mac2/base.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict from appium.options.common.automation_name_option import AUTOMATION_NAME from appium.options.common.base import PLATFORM_NAME, AppiumOptions @@ -52,7 +51,7 @@ class Mac2Options( WebDriverAgentMacUrlOption, ): @PrerunOption.prerun.setter # type: ignore - def prerun(self, value: Dict[str, str]) -> None: + def prerun(self, value: dict[str, str]) -> None: """ A mapping containing either 'script' or 'command' key. The value of each key must be a valid AppleScript script or command to be @@ -63,7 +62,7 @@ def prerun(self, value: Dict[str, str]) -> None: PrerunOption.prerun.fset(self, value) # type: ignore @PostrunOption.postrun.setter # type: ignore - def postrun(self, value: Dict[str, str]) -> None: + def postrun(self, value: dict[str, str]) -> None: """ A mapping containing either 'script' or 'command' key. The value of each key must be a valid AppleScript script or command to be @@ -106,7 +105,7 @@ def bundle_id(self, value: str) -> None: BundleIdOption.bundle_id.fset(self, value) # type: ignore @property - def default_capabilities(self) -> Dict: + def default_capabilities(self) -> dict: return { AUTOMATION_NAME: 'Mac2', PLATFORM_NAME: 'Mac', diff --git a/appium/options/mac/mac2/bootstrap_root_option.py b/appium/options/mac/mac2/bootstrap_root_option.py index 25c53d1ba..dc68a6bbe 100644 --- a/appium/options/mac/mac2/bootstrap_root_option.py +++ b/appium/options/mac/mac2/bootstrap_root_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class BootstrapRootOption(SupportsCapabilities): @property - def bootstrap_root(self) -> Optional[str]: + def bootstrap_root(self) -> str | None: """ The full path to WebDriverAgentMac root folder where Xcode project of the server sources lives. diff --git a/appium/options/mac/mac2/environment_option.py b/appium/options/mac/mac2/environment_option.py index b5d72a9fc..40818ebea 100644 --- a/appium/options/mac/mac2/environment_option.py +++ b/appium/options/mac/mac2/environment_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict, Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,14 +23,14 @@ class EnvironmentOption(SupportsCapabilities): @property - def environment(self) -> Optional[Dict[str, str]]: + def environment(self) -> dict[str, str] | None: """ Application environment variables mapping. """ return self.get_capability(ENVIRONMENT) @environment.setter - def environment(self, value: Dict[str, str]) -> None: + def environment(self, value: dict[str, str]) -> None: """ Set the dictionary of environment variables (name->value) that are going to be passed to the application under test on top of environment variables inherited from diff --git a/appium/options/mac/mac2/server_startup_timeout_option.py b/appium/options/mac/mac2/server_startup_timeout_option.py index 32e13f79a..7bfb4af28 100644 --- a/appium/options/mac/mac2/server_startup_timeout_option.py +++ b/appium/options/mac/mac2/server_startup_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class ServerStartupTimeoutOption(SupportsCapabilities): @property - def server_startup_timeout(self) -> Optional[timedelta]: + def server_startup_timeout(self) -> timedelta | None: """ Get the timeout to wait util the WebDriverAgentMac project is built and started. @@ -34,7 +33,7 @@ def server_startup_timeout(self) -> Optional[timedelta]: return None if value_ms is None else timedelta(milliseconds=value_ms) @server_startup_timeout.setter - def server_startup_timeout(self, value: Union[int, timedelta]) -> None: + def server_startup_timeout(self, value: int | timedelta) -> None: """ Set the timeout to wait util the WebDriverAgentMac project is built and started. diff --git a/appium/options/mac/mac2/show_server_logs_option.py b/appium/options/mac/mac2/show_server_logs_option.py index 635304925..ad380f50b 100644 --- a/appium/options/mac/mac2/show_server_logs_option.py +++ b/appium/options/mac/mac2/show_server_logs_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ShowServerLogsOption(SupportsCapabilities): @property - def show_server_logs(self) -> Optional[bool]: + def show_server_logs(self) -> bool | None: """ Whether to show WDA server logs in the Appium log. """ diff --git a/appium/options/mac/mac2/skip_app_kill_option.py b/appium/options/mac/mac2/skip_app_kill_option.py index adfcd19a3..41fdc3942 100644 --- a/appium/options/mac/mac2/skip_app_kill_option.py +++ b/appium/options/mac/mac2/skip_app_kill_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class SkipAppKillOption(SupportsCapabilities): @property - def skip_app_kill(self) -> Optional[bool]: + def skip_app_kill(self) -> bool | None: """ Whether to skip the termination of the application under test. """ diff --git a/appium/options/mac/mac2/web_driver_agent_mac_url_option.py b/appium/options/mac/mac2/web_driver_agent_mac_url_option.py index 8ffab4391..b8bb4d90e 100644 --- a/appium/options/mac/mac2/web_driver_agent_mac_url_option.py +++ b/appium/options/mac/mac2/web_driver_agent_mac_url_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class WebDriverAgentMacUrlOption(SupportsCapabilities): @property - def web_driver_agent_mac_url(self) -> Optional[str]: + def web_driver_agent_mac_url(self) -> str | None: """ The URL Appium will connect to an existing WebDriverAgentMac instance. """ diff --git a/appium/options/windows/windows/app_arguments_option.py b/appium/options/windows/windows/app_arguments_option.py index 665977d37..9ea8bd47c 100644 --- a/appium/options/windows/windows/app_arguments_option.py +++ b/appium/options/windows/windows/app_arguments_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppArgumentsOption(SupportsCapabilities): @property - def app_arguments(self) -> Optional[str]: + def app_arguments(self) -> str | None: """ Application arguments string, for example `/?`. """ diff --git a/appium/options/windows/windows/app_top_level_window_option.py b/appium/options/windows/windows/app_top_level_window_option.py index f573fb48e..d568816c2 100644 --- a/appium/options/windows/windows/app_top_level_window_option.py +++ b/appium/options/windows/windows/app_top_level_window_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppTopLevelWindowOption(SupportsCapabilities): @property - def app_top_level_window(self) -> Optional[str]: + def app_top_level_window(self) -> str | None: """ Hexadecimal handle of an existing application top level window to attach to. """ diff --git a/appium/options/windows/windows/app_working_dir_option.py b/appium/options/windows/windows/app_working_dir_option.py index 0160f89aa..8539542ec 100644 --- a/appium/options/windows/windows/app_working_dir_option.py +++ b/appium/options/windows/windows/app_working_dir_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class AppWorkingDirOption(SupportsCapabilities): @property - def app_working_dir(self) -> Optional[str]: + def app_working_dir(self) -> str | None: """ Full path to the folder, which is going to be set as the working dir for the application under test. diff --git a/appium/options/windows/windows/base.py b/appium/options/windows/windows/base.py index 52de731e6..070e8f353 100644 --- a/appium/options/windows/windows/base.py +++ b/appium/options/windows/windows/base.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Dict from appium.options.common.app_option import AppOption from appium.options.common.automation_name_option import AUTOMATION_NAME @@ -58,7 +57,7 @@ def app(self, value: str) -> None: AppOption.app.fset(self, value) # type: ignore @PrerunOption.prerun.setter # type: ignore - def prerun(self, value: Dict[str, str]) -> None: + def prerun(self, value: dict[str, str]) -> None: """ A mapping containing either 'script' or 'command' key. The value of each key must be a valid PowerShell script or command to be @@ -69,7 +68,7 @@ def prerun(self, value: Dict[str, str]) -> None: PrerunOption.prerun.fset(self, value) # type: ignore @PostrunOption.postrun.setter # type: ignore - def postrun(self, value: Dict[str, str]) -> None: + def postrun(self, value: dict[str, str]) -> None: """ A mapping containing either 'script' or 'command' key. The value of each key must be a valid PowerShell script or command to be @@ -90,7 +89,7 @@ def system_port(self, value: int) -> None: SystemPortOption.system_port.fset(self, value) # type: ignore @property - def default_capabilities(self) -> Dict: + def default_capabilities(self) -> dict: return { AUTOMATION_NAME: 'Windows', PLATFORM_NAME: 'Windows', diff --git a/appium/options/windows/windows/create_session_timeout_option.py b/appium/options/windows/windows/create_session_timeout_option.py index acf1289a8..17654f2bb 100644 --- a/appium/options/windows/windows/create_session_timeout_option.py +++ b/appium/options/windows/windows/create_session_timeout_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class CreateSessionTimeoutOption(SupportsCapabilities): @property - def create_session_timeout(self) -> Optional[timedelta]: + def create_session_timeout(self) -> timedelta | None: """ Timeout used to retry Appium Windows Driver session startup. """ @@ -33,7 +32,7 @@ def create_session_timeout(self) -> Optional[timedelta]: return None if value is None else timedelta(milliseconds=value) @create_session_timeout.setter - def create_session_timeout(self, value: Union[timedelta, int]) -> None: + def create_session_timeout(self, value: timedelta | int) -> None: """ Set the timeout used to retry Appium Windows Driver session startup. This capability could be used as a workaround for the long startup times diff --git a/appium/options/windows/windows/expreimental_web_driver_option.py b/appium/options/windows/windows/expreimental_web_driver_option.py index ae065d717..af45aa4c2 100644 --- a/appium/options/windows/windows/expreimental_web_driver_option.py +++ b/appium/options/windows/windows/expreimental_web_driver_option.py @@ -15,7 +15,6 @@ # specific language governing permissions and limitations # under the License. -from typing import Optional from appium.options.common.supports_capabilities import SupportsCapabilities @@ -24,7 +23,7 @@ class ExperimentalWebDriverOption(SupportsCapabilities): @property - def experimental_webdriver(self) -> Optional[bool]: + def experimental_webdriver(self) -> bool | None: """ Whether to enable experimental features and optimizations. """ diff --git a/appium/options/windows/windows/wait_for_app_launch_option.py b/appium/options/windows/windows/wait_for_app_launch_option.py index 9631b9231..68c0f1f2d 100644 --- a/appium/options/windows/windows/wait_for_app_launch_option.py +++ b/appium/options/windows/windows/wait_for_app_launch_option.py @@ -16,7 +16,6 @@ # under the License. from datetime import timedelta -from typing import Optional, Union from appium.options.common.supports_capabilities import SupportsCapabilities @@ -25,7 +24,7 @@ class WaitForAppLaunchOption(SupportsCapabilities): @property - def wait_for_app_launch(self) -> Optional[timedelta]: + def wait_for_app_launch(self) -> timedelta | None: """ Timeout used to retry Appium Windows Driver session startup. """ @@ -33,7 +32,7 @@ def wait_for_app_launch(self) -> Optional[timedelta]: return None if value is None else timedelta(seconds=value) @wait_for_app_launch.setter - def wait_for_app_launch(self, value: Union[timedelta, int]) -> None: + def wait_for_app_launch(self, value: timedelta | int) -> None: """ Similar to createSessionTimeout, but is applied on the server side. Enables Appium Windows Driver to wait for diff --git a/appium/protocols/webdriver/can_execute_commands.py b/appium/protocols/webdriver/can_execute_commands.py index de4f1b4ad..0ec39cf78 100644 --- a/appium/protocols/webdriver/can_execute_commands.py +++ b/appium/protocols/webdriver/can_execute_commands.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict, Protocol, Union +from typing import Protocol from selenium.webdriver.remote.remote_connection import RemoteConnection @@ -20,4 +20,4 @@ class CanExecuteCommands(Protocol): command_executor: RemoteConnection - def execute(self, driver_command: str, params: Union[Dict, None] = None) -> Dict: ... + def execute(self, driver_command: str, params: dict | None = None) -> dict: ... diff --git a/appium/protocols/webdriver/can_execute_scripts.py b/appium/protocols/webdriver/can_execute_scripts.py index 1d04f6cae..3b6e9facf 100644 --- a/appium/protocols/webdriver/can_execute_scripts.py +++ b/appium/protocols/webdriver/can_execute_scripts.py @@ -12,15 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, List, Optional, Protocol +from typing import Any, Protocol class CanExecuteScripts(Protocol): - def pin_script(self, script: str, script_key: Optional[Any] = None) -> Any: ... + def pin_script(self, script: str, script_key: Any | None = None) -> Any: ... def unpin(self, script_key: Any) -> None: ... - def get_pinned_scripts(self) -> List[str]: ... + def get_pinned_scripts(self) -> list[str]: ... def execute_script(self, script: str, *args: Any) -> Any: ... diff --git a/appium/protocols/webdriver/can_find_elements.py b/appium/protocols/webdriver/can_find_elements.py index 07b0b8279..01cbe5b4d 100644 --- a/appium/protocols/webdriver/can_find_elements.py +++ b/appium/protocols/webdriver/can_find_elements.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import TYPE_CHECKING, Dict, List, Protocol, Union, runtime_checkable +from typing import TYPE_CHECKING, Protocol, runtime_checkable if TYPE_CHECKING: from appium.webdriver.webelement import WebElement @@ -27,6 +27,6 @@ class CanFindElements(Protocol): - find_elements(by, value): Find multiple elements """ - def find_element(self, by: str, value: Union[str, Dict, None] = None) -> 'WebElement': ... + def find_element(self, by: str, value: str | dict | None = None) -> 'WebElement': ... - def find_elements(self, by: str, value: Union[str, Dict, None] = None) -> List['WebElement']: ... + def find_elements(self, by: str, value: str | dict | None = None) -> list['WebElement']: ... diff --git a/appium/webdriver/appium_connection.py b/appium/webdriver/appium_connection.py index 9ca311824..559a695c0 100644 --- a/appium/webdriver/appium_connection.py +++ b/appium/webdriver/appium_connection.py @@ -13,7 +13,7 @@ # limitations under the License. import uuid -from typing import TYPE_CHECKING, Any, Dict +from typing import TYPE_CHECKING, Any from selenium.webdriver.remote.remote_connection import RemoteConnection @@ -28,7 +28,7 @@ HEADER_IDEMOTENCY_KEY = 'X-Idempotency-Key' -def _get_new_headers(key: str, headers: Dict[str, str]) -> Dict[str, str]: +def _get_new_headers(key: str, headers: dict[str, str]) -> dict[str, str]: """Return a new dictionary of heafers without the given key. The key match is case-insensitive.""" lower_key = key.lower() @@ -51,7 +51,7 @@ class AppiumConnection(RemoteConnection): extra_headers = {} @classmethod - def get_remote_connection_headers(cls, parsed_url: 'ParseResult', keep_alive: bool = True) -> Dict[str, Any]: + def get_remote_connection_headers(cls, parsed_url: 'ParseResult', keep_alive: bool = True) -> dict[str, Any]: """Override get_remote_connection_headers in RemoteConnection to control the extra headers. This method will be used in sending a request method in this class. """ diff --git a/appium/webdriver/appium_service.py b/appium/webdriver/appium_service.py index 46f5f55b9..15ed1f771 100644 --- a/appium/webdriver/appium_service.py +++ b/appium/webdriver/appium_service.py @@ -17,7 +17,8 @@ import subprocess as sp import sys import time -from typing import Any, Callable, List, Optional, Set +from collections.abc import Callable +from typing import Any from selenium.webdriver.remote.remote_connection import urllib3 @@ -41,8 +42,8 @@ class AppiumStartupError(RuntimeError): class AppiumService: def __init__(self) -> None: - self._process: Optional[sp.Popen] = None - self._cmd: Optional[List[str]] = None + self._process: sp.Popen | None = None + self._cmd: list[str] | None = None def start(self, **kwargs: Any) -> sp.Popen: """Starts Appium service with given arguments. @@ -91,12 +92,12 @@ def start(self, **kwargs: Any) -> sp.Popen: stdout = kwargs.get('stdout', default_std) stderr = kwargs.get('stderr', default_std) timeout_ms = int(kwargs['timeout_ms']) if 'timeout_ms' in kwargs else STARTUP_TIMEOUT_MS - args: List[str] = [node, main_script] + args: list[str] = [node, main_script] if 'args' in kwargs: args.extend(kwargs['args']) self._cmd = args self._process = sp.Popen(args=args, stdout=stdout, stderr=stderr, env=env) - error_msg: Optional[str] = None + error_msg: str | None = None startup_failure_msg = ( 'Appium server process is unable to start. Make sure proper values have been ' f"provided to 'node' ({node}), 'npm' ({npm}) and 'main_script' ({main_script}) " @@ -194,7 +195,7 @@ def _assert_is_running(self) -> None: raise AppiumStartupError() -def is_service_listening(url: str, timeout: float = 5, custom_validator: Optional[Callable[[], None]] = None) -> bool: +def is_service_listening(url: str, timeout: float = 5, custom_validator: Callable[[], None] | None = None) -> bool: """ Check if the service is running @@ -222,7 +223,7 @@ def is_service_listening(url: str, timeout: float = 5, custom_validator: Optiona return False -def find_executable(executable: str) -> Optional[str]: +def find_executable(executable: str) -> str | None: path = os.environ['PATH'] paths = path.split(os.pathsep) _, ext = os.path.splitext(executable) @@ -256,8 +257,8 @@ def get_npm() -> str: return result -def get_main_script(node: Optional[str], npm: Optional[str]) -> str: - result: Optional[str] = None +def get_main_script(node: str | None, npm: str | None) -> str: + result: str | None = None npm_path = npm or get_npm() for args in [['root', '-g'], ['root']]: try: @@ -281,26 +282,26 @@ def get_main_script(node: Optional[str], npm: Optional[str]) -> str: return result -def _parse_arg_value(args: List[str], arg_names: Set[str], default: str) -> str: +def _parse_arg_value(args: list[str], arg_names: set[str], default: str) -> str: for idx, arg in enumerate(args): if arg in arg_names and idx < len(args) - 1: return args[idx + 1] return default -def _parse_port(args: List[str]) -> int: +def _parse_port(args: list[str]) -> int: return int(_parse_arg_value(args, {'--port', '-p'}, str(DEFAULT_PORT))) -def _parse_base_path(args: List[str]) -> str: +def _parse_base_path(args: list[str]) -> str: return _parse_arg_value(args, {'--base-path', '-pa'}, DEFAULT_BASE_PATH) -def _parse_host(args: List[str]) -> str: +def _parse_host(args: list[str]) -> str: return _parse_arg_value(args, {'--address', '-a'}, DEFAULT_HOST) -def _parse_protocol(args: List[str]) -> str: +def _parse_protocol(args: list[str]) -> str: return ( 'https' if _parse_arg_value(args, {'--ssl-cert-path'}, '') and _parse_arg_value(args, {'--ssl-key-path'}, '') @@ -308,12 +309,12 @@ def _parse_protocol(args: List[str]) -> str: ) -def _make_status_path(args: List[str]) -> str: +def _make_status_path(args: list[str]) -> str: base_path = _parse_base_path(args) return STATUS_URL if base_path == DEFAULT_BASE_PATH else f'{re.sub(r"/+$", "", base_path)}{STATUS_URL}' -def _make_server_url(args: List[str]) -> str: +def _make_server_url(args: list[str]) -> str: return f'{_parse_protocol(args)}://{_parse_host(args)}:{_parse_port(args)}{_make_status_path(args)}' diff --git a/appium/webdriver/errorhandler.py b/appium/webdriver/errorhandler.py index b2a5cab91..d074b01a8 100644 --- a/appium/webdriver/errorhandler.py +++ b/appium/webdriver/errorhandler.py @@ -13,14 +13,15 @@ # limitations under the License. import json -from typing import Any, Dict, List, Sequence, Type, Union +from collections.abc import Sequence +from typing import Any import selenium.common.exceptions as sel_exceptions from selenium.webdriver.remote import errorhandler import appium.common.exceptions as appium_exceptions -ERROR_TO_EXC_MAPPING: Dict[str, Type[sel_exceptions.WebDriverException]] = { +ERROR_TO_EXC_MAPPING: dict[str, type[sel_exceptions.WebDriverException]] = { 'element click intercepted': sel_exceptions.ElementClickInterceptedException, 'element not interactable': sel_exceptions.ElementNotInteractableException, 'insecure certificate': sel_exceptions.InsecureCertificateException, @@ -55,13 +56,13 @@ } -def format_stacktrace(original: Union[None, str, Sequence]) -> List[str]: +def format_stacktrace(original: None | str | Sequence) -> list[str]: if not original: return [] if isinstance(original, str): return original.split('\n') - result: List[str] = [] + result: list[str] = [] try: for frame in original: if not isinstance(frame, dict): @@ -81,7 +82,7 @@ def format_stacktrace(original: Union[None, str, Sequence]) -> List[str]: class MobileErrorHandler(errorhandler.ErrorHandler): - def check_response(self, response: Dict[str, Any]) -> None: + def check_response(self, response: dict[str, Any]) -> None: """ https://www.w3.org/TR/webdriver/#errors """ @@ -107,7 +108,7 @@ def check_response(self, response: Dict[str, Any]) -> None: # In theory, we should also be checking HTTP status codes. # Java client, for example, prints a warning if the actual `error` # value does not match to the response's HTTP status code. - exception_class: Type[sel_exceptions.WebDriverException] = ERROR_TO_EXC_MAPPING.get( + exception_class: type[sel_exceptions.WebDriverException] = ERROR_TO_EXC_MAPPING.get( error, sel_exceptions.WebDriverException ) if exception_class is sel_exceptions.WebDriverException and message: diff --git a/appium/webdriver/extensions/action_helpers.py b/appium/webdriver/extensions/action_helpers.py index 0bb740ec0..be32ca9f1 100644 --- a/appium/webdriver/extensions/action_helpers.py +++ b/appium/webdriver/extensions/action_helpers.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import TYPE_CHECKING, List, Optional, Tuple, cast +from typing import TYPE_CHECKING, cast from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.actions import interaction @@ -29,7 +29,7 @@ class ActionHelpers: - def scroll(self, origin_el: WebElement, destination_el: WebElement, duration: Optional[int] = None) -> Self: + def scroll(self, origin_el: WebElement, destination_el: WebElement, duration: int | None = None) -> Self: """Scrolls from one element to another Args: @@ -63,7 +63,7 @@ def scroll(self, origin_el: WebElement, destination_el: WebElement, duration: Op actions.perform() return self - def drag_and_drop(self, origin_el: WebElement, destination_el: WebElement, pause: Optional[float] = None) -> Self: + def drag_and_drop(self, origin_el: WebElement, destination_el: WebElement, pause: float | None = None) -> Self: """Drag the origin element to the destination element Args: @@ -84,7 +84,7 @@ def drag_and_drop(self, origin_el: WebElement, destination_el: WebElement, pause actions.perform() return self - def tap(self, positions: List[Tuple[int, int]], duration: Optional[int] = None) -> Self: + def tap(self, positions: list[tuple[int, int]], duration: int | None = None) -> Self: """Taps on an particular place with up to five fingers, holding for a certain time diff --git a/appium/webdriver/extensions/android/performance.py b/appium/webdriver/extensions/android/performance.py index 97acddcd3..4994eca38 100644 --- a/appium/webdriver/extensions/android/performance.py +++ b/appium/webdriver/extensions/android/performance.py @@ -12,16 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict, List, Union from appium.protocols.webdriver.can_execute_commands import CanExecuteCommands from appium.protocols.webdriver.can_execute_scripts import CanExecuteScripts class Performance(CanExecuteCommands, CanExecuteScripts): - def get_performance_data( - self, package_name: str, data_type: str, data_read_timeout: Union[int, None] = None - ) -> List[List[str]]: + def get_performance_data(self, package_name: str, data_type: str, data_read_timeout: int | None = None) -> list[list[str]]: """Returns the information of the system state which is supported to read as like cpu, memory, network traffic, and battery. @@ -44,10 +41,10 @@ def get_performance_data( The data along to `data_type` """ ext_name = 'mobile: getPerformanceData' - args: Dict[str, Union[str, int]] = {'packageName': package_name, 'dataType': data_type} + args: dict[str, str | int] = {'packageName': package_name, 'dataType': data_type} return self.execute_script(ext_name, args) - def get_performance_data_types(self) -> List[str]: + def get_performance_data_types(self) -> list[str]: """Returns the information types of the system state which is supported to read as like cpu, memory, network traffic, and battery. Android only. diff --git a/appium/webdriver/extensions/android/system_bars.py b/appium/webdriver/extensions/android/system_bars.py index 30cb9cd2b..80ea273e2 100644 --- a/appium/webdriver/extensions/android/system_bars.py +++ b/appium/webdriver/extensions/android/system_bars.py @@ -12,14 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict, Union from appium.protocols.webdriver.can_execute_commands import CanExecuteCommands from appium.protocols.webdriver.can_execute_scripts import CanExecuteScripts class SystemBars(CanExecuteCommands, CanExecuteScripts): - def get_system_bars(self) -> Dict[str, Dict[str, Union[int, bool]]]: + def get_system_bars(self) -> dict[str, dict[str, int | bool]]: """Retrieve visibility and bounds information of the status and navigation bars. Android only. diff --git a/appium/webdriver/extensions/applications.py b/appium/webdriver/extensions/applications.py index dc729f409..583e8ba5e 100644 --- a/appium/webdriver/extensions/applications.py +++ b/appium/webdriver/extensions/applications.py @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, Dict, Union +from typing import Any from typing_extensions import Self @@ -172,7 +172,7 @@ class for more details. }, ) - def app_strings(self, language: Union[str, None] = None, string_file: Union[str, None] = None) -> Dict[str, str]: + def app_strings(self, language: str | None = None, string_file: str | None = None) -> dict[str, str]: """Returns the application strings from the device for the specified language. diff --git a/appium/webdriver/extensions/clipboard.py b/appium/webdriver/extensions/clipboard.py index c5a6e5445..9afe0923c 100644 --- a/appium/webdriver/extensions/clipboard.py +++ b/appium/webdriver/extensions/clipboard.py @@ -13,7 +13,6 @@ # limitations under the License. import base64 -from typing import Optional from typing_extensions import Self @@ -24,7 +23,7 @@ class Clipboard(CanExecuteCommands, CanExecuteScripts): def set_clipboard( - self, content: bytes, content_type: str = ClipboardContentType.PLAINTEXT, label: Optional[str] = None + self, content: bytes, content_type: str = ClipboardContentType.PLAINTEXT, label: str | None = None ) -> Self: """Set the content of the system clipboard @@ -49,7 +48,7 @@ def set_clipboard( self.execute_script(ext_name, options) return self - def set_clipboard_text(self, text: str, label: Optional[str] = None) -> Self: + def set_clipboard_text(self, text: str, label: str | None = None) -> Self: """Copies the given text to the system clipboard Requires the Appium driver to support the `mobile: setClipboard` execute method. diff --git a/appium/webdriver/extensions/context.py b/appium/webdriver/extensions/context.py index 628432e11..fff3ecc30 100644 --- a/appium/webdriver/extensions/context.py +++ b/appium/webdriver/extensions/context.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import List from appium.protocols.webdriver.can_execute_commands import CanExecuteCommands @@ -21,7 +20,7 @@ class Context(CanExecuteCommands): @property - def contexts(self) -> List[str]: + def contexts(self) -> list[str]: """Returns the contexts within the current session. Usage: diff --git a/appium/webdriver/extensions/device_time.py b/appium/webdriver/extensions/device_time.py index ad79e49c9..3eef3dda9 100644 --- a/appium/webdriver/extensions/device_time.py +++ b/appium/webdriver/extensions/device_time.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Optional from appium.protocols.webdriver.can_execute_commands import CanExecuteCommands from appium.protocols.webdriver.can_execute_scripts import CanExecuteScripts @@ -31,7 +30,7 @@ def device_time(self) -> str: ext_name = 'mobile: getDeviceTime' return self.execute_script(ext_name) - def get_device_time(self, format: Optional[str] = None) -> str: + def get_device_time(self, format: str | None = None) -> str: """Returns the date and time from the device. Requires the Appium driver to support the `mobile: getDeviceTime` execute method. diff --git a/appium/webdriver/extensions/execute_driver.py b/appium/webdriver/extensions/execute_driver.py index 698c0218b..aa479ed8a 100644 --- a/appium/webdriver/extensions/execute_driver.py +++ b/appium/webdriver/extensions/execute_driver.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, Dict, Optional, Union +from typing import Any from appium.protocols.webdriver.can_execute_commands import CanExecuteCommands @@ -21,7 +21,7 @@ class ExecuteDriver(CanExecuteCommands): # TODO Inner class case - def execute_driver(self, script: str, script_type: str = 'webdriverio', timeout_ms: Optional[int] = None) -> Any: + def execute_driver(self, script: str, script_type: str = 'webdriverio', timeout_ms: int | None = None) -> Any: """Run a set of script against the current session, allowing execution of many commands in one Appium request. Please read http://appium.io/docs/en/commands/session/execute-driver for more details about the acceptable scripts and the output format. @@ -45,11 +45,11 @@ def execute_driver(self, script: str, script_type: str = 'webdriverio', timeout_ """ class Result: - def __init__(self, res: Dict): + def __init__(self, res: dict): self.result = res['result'] self.logs = res['logs'] - option: Dict[str, Union[str, int]] = {'script': script, 'type': script_type} + option: dict[str, str | int] = {'script': script, 'type': script_type} if timeout_ms is not None: option['timeout'] = timeout_ms diff --git a/appium/webdriver/extensions/execute_mobile_command.py b/appium/webdriver/extensions/execute_mobile_command.py index 8d78d418b..2cc8c172a 100644 --- a/appium/webdriver/extensions/execute_mobile_command.py +++ b/appium/webdriver/extensions/execute_mobile_command.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, Dict +from typing import Any from typing_extensions import Self @@ -39,7 +39,7 @@ def press_button(self, button_name: str) -> Self: return self @property - def battery_info(self) -> Dict[str, Any]: + def battery_info(self) -> dict[str, Any]: """Retrieves battery information for the device under test. Returns: diff --git a/appium/webdriver/extensions/flutter_integration/flutter_commands.py b/appium/webdriver/extensions/flutter_integration/flutter_commands.py index 3f43ef29b..365ee29f4 100644 --- a/appium/webdriver/extensions/flutter_integration/flutter_commands.py +++ b/appium/webdriver/extensions/flutter_integration/flutter_commands.py @@ -13,7 +13,7 @@ # limitations under the License. import os -from typing import Any, Dict, List, Optional, Tuple, Union +from typing import Any, Union from appium.common.helper import encode_file_to_base64 from appium.webdriver.extensions.flutter_integration.flutter_finder import FlutterFinder @@ -30,8 +30,8 @@ def __init__(self, driver: WebDriver) -> None: def wait_for_visible( self, - locator: Union[WebElement, FlutterFinder], - timeout: Optional[float] = None, + locator: WebElement | FlutterFinder, + timeout: float | None = None, ) -> None: """ Waits for a element to become visible. @@ -43,7 +43,7 @@ def wait_for_visible( Returns: None """ - opts: Dict[str, Any] = self.__get_locator_options(locator) + opts: dict[str, Any] = self.__get_locator_options(locator) if timeout is not None: opts['timeout'] = timeout @@ -51,8 +51,8 @@ def wait_for_visible( def wait_for_invisible( self, - locator: Union[WebElement, FlutterFinder], - timeout: Optional[float] = None, + locator: WebElement | FlutterFinder, + timeout: float | None = None, ) -> None: """ Waits for a element to become invisible. @@ -64,7 +64,7 @@ def wait_for_invisible( Returns: None: """ - opts: Dict[str, Any] = self.__get_locator_options(locator) + opts: dict[str, Any] = self.__get_locator_options(locator) if timeout is not None: opts['timeout'] = timeout @@ -72,7 +72,7 @@ def wait_for_invisible( # flutter action commands - def perform_double_click(self, element: WebElement, offset: Optional[Tuple[int, int]] = None) -> None: + def perform_double_click(self, element: WebElement, offset: tuple[int, int] | None = None) -> None: """ Performs a double-click on the given element, with an optional offset. @@ -83,12 +83,12 @@ def perform_double_click(self, element: WebElement, offset: Optional[Tuple[int, Returns: None: """ - opts: Dict[str, Union[WebElement, Dict[str, int]]] = {'origin': element} + opts: dict[str, WebElement | dict[str, int]] = {'origin': element} if offset is not None: opts['offset'] = {'x': offset[0], 'y': offset[1]} self.execute_flutter_command('doubleClick', opts) - def perform_long_press(self, element: WebElement, offset: Optional[Tuple[int, int]] = None) -> None: + def perform_long_press(self, element: WebElement, offset: tuple[int, int] | None = None) -> None: """ Performs a long press on the given element, with an optional offset. @@ -99,7 +99,7 @@ def perform_long_press(self, element: WebElement, offset: Optional[Tuple[int, in Returns: None: """ - opts: Dict[str, Union[WebElement, Dict[str, int]]] = {'origin': element} + opts: dict[str, WebElement | dict[str, int]] = {'origin': element} if offset is not None: opts['offset'] = {'x': offset[0], 'y': offset[1]} self.execute_flutter_command('longPress', opts) @@ -171,10 +171,10 @@ def activate_injected_image(self, image_id: str) -> None: def get_render_tree( self, - widget_type: Optional[str] = None, - key: Optional[str] = None, - text: Optional[str] = None, - ) -> List[Optional[Dict]]: + widget_type: str | None = None, + key: str | None = None, + text: str | None = None, + ) -> list[dict | None]: """ Returns the render tree of the root widget. @@ -287,7 +287,7 @@ def execute_flutter_command(self, scriptName: str, params: dict) -> Any: """ return self.driver.execute_script(f'flutter: {scriptName}', params) - def __get_locator_options(self, locator: Union[WebElement, 'FlutterFinder']) -> Dict[str, Union[dict, WebElement]]: + def __get_locator_options(self, locator: Union[WebElement, 'FlutterFinder']) -> dict[str, dict | WebElement]: if isinstance(locator, WebElement): return {'element': locator} return {'locator': locator.to_dict()} diff --git a/appium/webdriver/extensions/flutter_integration/flutter_finder.py b/appium/webdriver/extensions/flutter_integration/flutter_finder.py index 0aed46a9a..a92425f27 100644 --- a/appium/webdriver/extensions/flutter_integration/flutter_finder.py +++ b/appium/webdriver/extensions/flutter_integration/flutter_finder.py @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -from typing import Tuple, Union, cast +from typing import cast from selenium.webdriver.common.by import ByType as SeleniumByType @@ -24,7 +24,7 @@ class FlutterFinder: - def __init__(self, using: Union[SeleniumByType, AppiumByType], value: str) -> None: + def __init__(self, using: SeleniumByType | AppiumByType, value: str) -> None: self.using = using self.value = value @@ -51,5 +51,5 @@ def by_text_containing(value: str) -> 'FlutterFinder': def to_dict(self) -> dict: return {'using': self.using, 'value': self.value} - def as_args(self) -> Tuple[str, str]: + def as_args(self) -> tuple[str, str]: return self.using, self.value diff --git a/appium/webdriver/extensions/hw_actions.py b/appium/webdriver/extensions/hw_actions.py index 4f80bcab5..c3bc5527c 100644 --- a/appium/webdriver/extensions/hw_actions.py +++ b/appium/webdriver/extensions/hw_actions.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Optional from typing_extensions import Self @@ -21,7 +20,7 @@ class HardwareActions(CanExecuteCommands, CanExecuteScripts): - def lock(self, seconds: Optional[int] = None) -> Self: + def lock(self, seconds: int | None = None) -> Self: """Lock the device. No changes are made if the device is already locked. Requires the Appium driver to support the `mobile: lock` execute method. diff --git a/appium/webdriver/extensions/images_comparison.py b/appium/webdriver/extensions/images_comparison.py index 04b8f1147..98ae3ecf5 100644 --- a/appium/webdriver/extensions/images_comparison.py +++ b/appium/webdriver/extensions/images_comparison.py @@ -12,17 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, Dict, Union +from typing import Any from appium.protocols.webdriver.can_execute_commands import CanExecuteCommands from ..mobilecommand import MobileCommand as Command -Base64Payload = Union[str, bytes] +Base64Payload = str | bytes class ImagesComparison(CanExecuteCommands): - def match_images_features(self, base64_image1: Base64Payload, base64_image2: Base64Payload, **opts: Any) -> Dict[str, Any]: + def match_images_features(self, base64_image1: Base64Payload, base64_image2: Base64Payload, **opts: Any) -> dict[str, Any]: """Performs images matching by features. Read @@ -78,7 +78,7 @@ def match_images_features(self, base64_image1: Base64Payload, base64_image2: Bas def find_image_occurrence( self, base64_full_image: Base64Payload, base64_partial_image: Base64Payload, **opts: Any - ) -> Dict[str, Union[bytes, Dict]]: + ) -> dict[str, bytes | dict]: """Performs images matching by template to find possible occurrence of the partial image in the full image. @@ -112,7 +112,7 @@ def find_image_occurrence( def get_images_similarity( self, base64_image1: Base64Payload, base64_image2: Base64Payload, **opts: Any - ) -> Dict[str, Union[bytes, Dict]]: + ) -> dict[str, bytes | dict]: """Performs images matching to calculate the similarity score between them. The flow there is similar to the one used in diff --git a/appium/webdriver/extensions/keyboard.py b/appium/webdriver/extensions/keyboard.py index cae8ee813..725efafd0 100644 --- a/appium/webdriver/extensions/keyboard.py +++ b/appium/webdriver/extensions/keyboard.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Optional from typing_extensions import Self @@ -21,7 +20,7 @@ class Keyboard(CanExecuteCommands, CanExecuteScripts): - def hide_keyboard(self, key_name: Optional[str] = None, key: Optional[str] = None, strategy: Optional[str] = None) -> Self: + def hide_keyboard(self, key_name: str | None = None, key: str | None = None, strategy: str | None = None) -> Self: """Hides the software keyboard on the device. On iOS, use `key_name` or `key` to provide a keyboard key name. @@ -52,7 +51,7 @@ def is_keyboard_shown(self) -> bool: ext_name = 'mobile: isKeyboardShown' return self.execute_script(ext_name) - def keyevent(self, keycode: int, metastate: Optional[int] = None) -> Self: + def keyevent(self, keycode: int, metastate: int | None = None) -> Self: """Sends a keycode to the device. Android only. @@ -69,7 +68,7 @@ def keyevent(self, keycode: int, metastate: Optional[int] = None) -> Self: """ return self.press_keycode(keycode=keycode, metastate=metastate) - def press_keycode(self, keycode: int, metastate: Optional[int] = None, flags: Optional[int] = None) -> Self: + def press_keycode(self, keycode: int, metastate: int | None = None, flags: int | None = None) -> Self: """Sends a keycode to the device. Android only. Possible keycodes can be found @@ -94,7 +93,7 @@ def press_keycode(self, keycode: int, metastate: Optional[int] = None, flags: Op self.execute_script(ext_name, args) return self - def long_press_keycode(self, keycode: int, metastate: Optional[int] = None, flags: Optional[int] = None) -> Self: + def long_press_keycode(self, keycode: int, metastate: int | None = None, flags: int | None = None) -> Self: """Sends a long press of keycode to the device. Android only. Possible keycodes can be found in diff --git a/appium/webdriver/extensions/location.py b/appium/webdriver/extensions/location.py index fc1fcae28..9dfd759a5 100644 --- a/appium/webdriver/extensions/location.py +++ b/appium/webdriver/extensions/location.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict, Union from typing_extensions import Self @@ -37,11 +36,11 @@ def toggle_location_services(self) -> Self: def set_location( self, - latitude: Union[float, str], - longitude: Union[float, str], - altitude: Union[float, str, None] = None, - speed: Union[float, str, None] = None, - satellites: Union[float, str, None] = None, + latitude: float | str, + longitude: float | str, + altitude: float | str | None = None, + speed: float | str | None = None, + satellites: float | str | None = None, ) -> Self: """Set the location of the device @@ -71,7 +70,7 @@ def set_location( return self @property - def location(self) -> Dict[str, float]: + def location(self) -> dict[str, float]: """Retrieves the current location Returns: diff --git a/appium/webdriver/extensions/log_event.py b/appium/webdriver/extensions/log_event.py index 4ca53b3fe..549dd0555 100644 --- a/appium/webdriver/extensions/log_event.py +++ b/appium/webdriver/extensions/log_event.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict, List, Union from typing_extensions import Self @@ -22,7 +21,7 @@ class LogEvent(CanExecuteCommands): - def get_events(self, type: Union[List[str], None] = None) -> Dict[str, Union[str, int]]: + def get_events(self, type: list[str] | None = None) -> dict[str, str | int]: """Retrieves events information from the current session (Since Appium 1.16.0) diff --git a/appium/webdriver/extensions/logs.py b/appium/webdriver/extensions/logs.py index 53e165944..1913b79c5 100644 --- a/appium/webdriver/extensions/logs.py +++ b/appium/webdriver/extensions/logs.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, Dict, List +from typing import Any from appium.protocols.webdriver.can_execute_commands import CanExecuteCommands @@ -21,7 +21,7 @@ class Logs(CanExecuteCommands): @property - def log_types(self) -> List[str]: + def log_types(self) -> list[str]: """Gets a list of the available log types. This only works with w3c compliant browsers. @@ -32,7 +32,7 @@ def log_types(self) -> List[str]: """ return self.execute(Command.GET_AVAILABLE_LOG_TYPES)['value'] - def get_log(self, log_type: str) -> List[Dict[str, Any]]: + def get_log(self, log_type: str) -> list[dict[str, Any]]: """Gets the log for a given log type. Args: diff --git a/appium/webdriver/extensions/remote_fs.py b/appium/webdriver/extensions/remote_fs.py index 9139cd4c3..83d5716e3 100644 --- a/appium/webdriver/extensions/remote_fs.py +++ b/appium/webdriver/extensions/remote_fs.py @@ -13,7 +13,6 @@ # limitations under the License. import base64 -from typing import Optional from selenium.common.exceptions import InvalidArgumentException from typing_extensions import Self @@ -51,7 +50,7 @@ def pull_folder(self, path: str) -> str: ext_name = 'mobile: pullFolder' return self.execute_script(ext_name, {'remotePath': path}) - def push_file(self, destination_path: str, base64data: Optional[str] = None, source_path: Optional[str] = None) -> Self: + def push_file(self, destination_path: str, base64data: str | None = None, source_path: str | None = None) -> Self: """Puts the data from the file at `source_path`, encoded as Base64, at `destination_path`. Specify either `base64data` or `source_path`. If both are provided, `source_path` takes precedence. @@ -74,7 +73,7 @@ def push_file(self, destination_path: str, base64data: Optional[str] = None, sou try: with open(source_path, 'rb') as f: file_data = f.read() - except IOError as e: + except OSError as e: message = f'source_path "{source_path}" could not be found. Are you sure the file exists?' raise InvalidArgumentException(message) from e base64data = base64.b64encode(file_data).decode('utf-8') diff --git a/appium/webdriver/extensions/screen_record.py b/appium/webdriver/extensions/screen_record.py index 07c9b2bae..9ca1c9868 100644 --- a/appium/webdriver/extensions/screen_record.py +++ b/appium/webdriver/extensions/screen_record.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, Union +from typing import Any from appium.protocols.webdriver.can_execute_commands import CanExecuteCommands @@ -20,7 +20,7 @@ class ScreenRecord(CanExecuteCommands): - def start_recording_screen(self, **options: Any) -> Union[bytes, str]: + def start_recording_screen(self, **options: Any) -> bytes | str: """Start asynchronous screen recording process. +--------------+-----+---------+-----+-------+ diff --git a/appium/webdriver/extensions/session.py b/appium/webdriver/extensions/session.py index e0bcd8b60..3fb15699b 100644 --- a/appium/webdriver/extensions/session.py +++ b/appium/webdriver/extensions/session.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict from appium.common.logger import logger from appium.protocols.webdriver.can_execute_commands import CanExecuteCommands @@ -22,7 +21,7 @@ class Session(CanExecuteCommands): @property - def events(self) -> Dict: + def events(self) -> dict: """Retrieves events information from the current session Usage: diff --git a/appium/webdriver/extensions/settings.py b/appium/webdriver/extensions/settings.py index d9a55111e..541da5dcc 100644 --- a/appium/webdriver/extensions/settings.py +++ b/appium/webdriver/extensions/settings.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, Dict +from typing import Any from typing_extensions import Self @@ -22,7 +22,7 @@ class Settings(CanExecuteCommands): - def get_settings(self) -> Dict[str, Any]: + def get_settings(self) -> dict[str, Any]: """Returns the appium server Settings for the current session. Do not get Settings confused with Desired Capabilities, they are @@ -33,7 +33,7 @@ def get_settings(self) -> Dict[str, Any]: """ return self.execute(Command.GET_SETTINGS, {})['value'] - def update_settings(self, settings: Dict[str, Any]) -> Self: + def update_settings(self, settings: dict[str, Any]) -> Self: """Set settings for the current session. For more on settings, see: https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/settings.md diff --git a/appium/webdriver/locator_converter.py b/appium/webdriver/locator_converter.py index 4c6416c67..004b5b0b5 100644 --- a/appium/webdriver/locator_converter.py +++ b/appium/webdriver/locator_converter.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Tuple from selenium.webdriver.remote.locator_converter import LocatorConverter @@ -25,5 +24,5 @@ class AppiumLocatorConverter(LocatorConverter): to the Appium server as-is. """ - def convert(self, by: str, value: str) -> Tuple[str, str]: + def convert(self, by: str, value: str) -> tuple[str, str]: return (by, value) diff --git a/appium/webdriver/switch_to.py b/appium/webdriver/switch_to.py index ed9db7c76..f61425247 100644 --- a/appium/webdriver/switch_to.py +++ b/appium/webdriver/switch_to.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Optional from selenium.webdriver.remote.switch_to import SwitchTo from typing_extensions import Self @@ -21,7 +20,7 @@ class MobileSwitchTo(SwitchTo): - def context(self, context_name: Optional[str]) -> Self: + def context(self, context_name: str | None) -> Self: """Sets the context for the current session. Passing `None` is equal to switching to native context. diff --git a/appium/webdriver/webdriver.py b/appium/webdriver/webdriver.py index 326dd50f4..4584824bc 100644 --- a/appium/webdriver/webdriver.py +++ b/appium/webdriver/webdriver.py @@ -12,7 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Set, Tuple, Type, Union +from collections.abc import Callable +from typing import TYPE_CHECKING, Any from selenium.common.exceptions import ( InvalidArgumentException, @@ -160,10 +161,10 @@ def add_command(self): """ - def __init__(self, execute: Callable[[str, Dict], Dict[str, Any]]): + def __init__(self, execute: Callable[[str, dict], dict[str, Any]]): self._execute = execute - def execute(self, parameters: Union[Dict[str, Any], None] = None) -> Any: + def execute(self, parameters: dict[str, Any] | None = None) -> Any: param = {} if parameters: param = parameters @@ -179,7 +180,7 @@ def method_name(self) -> str: """ raise NotImplementedError() - def add_command(self) -> Tuple[str, str]: + def add_command(self) -> tuple[str, str]: """ Expected to define the pair of HTTP method and its URL. """ @@ -187,8 +188,8 @@ def add_command(self) -> Tuple[str, str]: def _get_remote_connection_and_client_config( - command_executor: Union[str, AppiumConnection], client_config: Optional[AppiumClientConfig] = None -) -> tuple[AppiumConnection, Optional[AppiumClientConfig]]: + command_executor: str | AppiumConnection, client_config: AppiumClientConfig | None = None +) -> tuple[AppiumConnection, AppiumClientConfig | None]: """Return the pair of command executor and client config. If the given command executor is a custom one, returned client config will be None since the custom command executor has its own client config already. @@ -238,10 +239,10 @@ class WebDriver( ): def __init__( self, - command_executor: Union[str, AppiumConnection] = 'http://127.0.0.1:4723', - extensions: Optional[List[Type['ExtensionBase']]] = None, - options: Union[AppiumOptions, List[AppiumOptions], None] = None, - client_config: Optional[AppiumClientConfig] = None, + command_executor: str | AppiumConnection = 'http://127.0.0.1:4723', + extensions: list[type['ExtensionBase']] | None = None, + options: AppiumOptions | list[AppiumOptions] | None = None, + client_config: AppiumClientConfig | None = None, ): command_executor, client_config = _get_remote_connection_and_client_config( command_executor=command_executor, client_config=client_config @@ -264,7 +265,7 @@ def __init__( if client_config and client_config.direct_connection: self._update_command_executor(keep_alive=client_config.keep_alive) - self._absent_extensions: Set[str] = set() + self._absent_extensions: set[str] = set() self._extensions = extensions or [] for extension in self._extensions: @@ -280,10 +281,10 @@ def __init__( if TYPE_CHECKING: - def find_element(self, by: str, value: Union[str, Dict, None] = None) -> 'MobileWebElement': # type: ignore[override] + def find_element(self, by: str, value: str | dict | None = None) -> 'MobileWebElement': # type: ignore[override] ... - def find_elements(self, by: str, value: Union[str, Dict, None] = None) -> List['MobileWebElement']: # type: ignore[override] + def find_elements(self, by: str, value: str | dict | None = None) -> list['MobileWebElement']: # type: ignore[override] ... def delete_extensions(self) -> None: @@ -326,7 +327,7 @@ def _update_command_executor(self, keep_alive: bool) -> None: # https://github.com/SeleniumHQ/selenium/blob/06fdf2966df6bca47c0ae45e8201cd30db9b9a49/py/selenium/webdriver/remote/webdriver.py#L277 # noinspection PyAttributeOutsideInit - def start_session(self, capabilities: Union[Dict, AppiumOptions], browser_profile: Optional[str] = None) -> None: + def start_session(self, capabilities: dict | AppiumOptions, browser_profile: str | None = None) -> None: """Creates a new session with the desired capabilities. Override for Appium @@ -349,7 +350,7 @@ def start_session(self, capabilities: Union[Dict, AppiumOptions], browser_profil # Due to a W3C spec parsing misconception some servers # pack the createSession response stuff into 'value' dictionary and # some other put it to the top level of the response JSON nesting hierarchy - get_response_value: Callable[[str], Optional[Any]] = lambda key: ( + get_response_value: Callable[[str], Any | None] = lambda key: ( response.get(key) or (response['value'].get(key) if isinstance(response.get('value'), dict) else None) ) session_id = get_response_value('sessionId') @@ -360,7 +361,7 @@ def start_session(self, capabilities: Union[Dict, AppiumOptions], browser_profil self.session_id = session_id self.caps = get_response_value('capabilities') or {} - def get_status(self) -> Dict: + def get_status(self) -> dict: """ Get the Appium server status @@ -373,7 +374,7 @@ def get_status(self) -> Dict: """ return self.execute(Command.GET_STATUS)['value'] - def create_web_element(self, element_id: Union[int, str]) -> MobileWebElement: + def create_web_element(self, element_id: int | str) -> MobileWebElement: """Creates a web element with the specified element_id. Overrides method in Selenium WebDriver in order to always give them diff --git a/appium/webdriver/webelement.py b/appium/webdriver/webelement.py index 61076ca37..8494af13f 100644 --- a/appium/webdriver/webelement.py +++ b/appium/webdriver/webelement.py @@ -12,7 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import TYPE_CHECKING, Callable, Dict, List, Optional, Union +from collections.abc import Callable +from typing import TYPE_CHECKING from selenium.webdriver.common.utils import keys_to_typing from selenium.webdriver.remote.command import Command as RemoteCommand @@ -28,13 +29,13 @@ class WebElement(SeleniumWebElement): if TYPE_CHECKING: - def find_element(self, by: str, value: Union[str, Dict, None] = None) -> Self: # type: ignore[override] + def find_element(self, by: str, value: str | dict | None = None) -> Self: # type: ignore[override] ... - def find_elements(self, by: str, value: Union[str, Dict, None] = None) -> List[Self]: # type: ignore[override] + def find_elements(self, by: str, value: str | dict | None = None) -> list[Self]: # type: ignore[override] ... - def get_attribute(self, name: str) -> Optional[Union[str, Dict]]: # type: ignore[override] + def get_attribute(self, name: str) -> str | dict | None: # type: ignore[override] """Gets the given attribute or property of the element. Override for Appium @@ -102,7 +103,7 @@ def clear(self) -> Self: # type: ignore[override] return self @property - def location_in_view(self) -> Dict[str, int]: + def location_in_view(self) -> dict[str, int]: """Gets the location of an element relative to the view. Usage: diff --git a/pyproject.toml b/pyproject.toml index 9958ffd34..fd689685e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" license-files = ["LICENSE"] authors = [ {name = "Kazuaki Matsuo", email = "kazucocoa1117@gmail.com"}, - {name = "Isaac Murchie"}, + {name = "Isaac Murchie"}, ] maintainers = [ {name = "Kazuaki Matsuo"}, diff --git a/test/functional/android/appium_service_tests.py b/test/functional/android/appium_service_tests.py index 409b80989..e35e5e381 100644 --- a/test/functional/android/appium_service_tests.py +++ b/test/functional/android/appium_service_tests.py @@ -1,5 +1,4 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Generator +from collections.abc import Generator import pytest diff --git a/test/functional/android/bidi_tests.py b/test/functional/android/bidi_tests.py index 146f29a55..1e8b463f4 100644 --- a/test/functional/android/bidi_tests.py +++ b/test/functional/android/bidi_tests.py @@ -12,7 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import TYPE_CHECKING, Generator +from collections.abc import Generator +from typing import TYPE_CHECKING import pytest from selenium.webdriver.common.bidi.common import command_builder diff --git a/test/functional/android/chrome_tests.py b/test/functional/android/chrome_tests.py index 52f994392..8db22e197 100644 --- a/test/functional/android/chrome_tests.py +++ b/test/functional/android/chrome_tests.py @@ -12,7 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import TYPE_CHECKING, Generator +from collections.abc import Generator +from typing import TYPE_CHECKING import pytest diff --git a/test/functional/android/options.py b/test/functional/android/options.py index 9c8103a75..c9d3afda9 100644 --- a/test/functional/android/options.py +++ b/test/functional/android/options.py @@ -13,13 +13,12 @@ # limitations under the License. import os -from typing import Optional from appium.options.android import UiAutomator2Options from test.functional.test_helper import get_worker_info -def make_options(app: Optional[str] = None) -> UiAutomator2Options: +def make_options(app: str | None = None) -> UiAutomator2Options: """Get UiAutomator2 options configured for Android testing with parallel execution support.""" options = UiAutomator2Options() diff --git a/test/functional/flutter_integration/conftest.py b/test/functional/flutter_integration/conftest.py index 128312e83..011338bb5 100644 --- a/test/functional/flutter_integration/conftest.py +++ b/test/functional/flutter_integration/conftest.py @@ -12,7 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import TYPE_CHECKING, Generator +from collections.abc import Generator +from typing import TYPE_CHECKING import pytest diff --git a/test/functional/flutter_integration/helper/options.py b/test/functional/flutter_integration/helper/options.py index 8b2e29639..5cad7de31 100644 --- a/test/functional/flutter_integration/helper/options.py +++ b/test/functional/flutter_integration/helper/options.py @@ -13,7 +13,7 @@ # limitations under the License. import os -from typing import Any, Dict +from typing import Any from appium.options.flutter_integration.base import FlutterOptions from test.functional.test_helper import get_wda_port, get_worker_info @@ -43,7 +43,7 @@ def make_options() -> FlutterOptions: options.flutter_element_wait_timeout = 10000 options.flutter_server_launch_timeout = 120000 - caps: Dict[str, Any] = ( + caps: dict[str, Any] = ( { 'platformName': 'Android', 'deviceName': device_name(), diff --git a/test/functional/ios/helper/options.py b/test/functional/ios/helper/options.py index a189b741f..c2d2fc3f9 100644 --- a/test/functional/ios/helper/options.py +++ b/test/functional/ios/helper/options.py @@ -13,13 +13,12 @@ # limitations under the License. import os -from typing import Optional from appium.options.ios import XCUITestOptions from test.functional.test_helper import get_wda_port, get_worker_info -def make_options(app: Optional[str] = None) -> XCUITestOptions: +def make_options(app: str | None = None) -> XCUITestOptions: """Get XCUITest options configured for iOS testing with parallel execution support.""" options = XCUITestOptions() diff --git a/test/functional/ios/safari_tests.py b/test/functional/ios/safari_tests.py index 1093879e6..211995879 100644 --- a/test/functional/ios/safari_tests.py +++ b/test/functional/ios/safari_tests.py @@ -13,7 +13,8 @@ # limitations under the License. import time -from typing import TYPE_CHECKING, Generator +from collections.abc import Generator +from typing import TYPE_CHECKING import pytest diff --git a/test/functional/mac/helper/desired_capabilities.py b/test/functional/mac/helper/desired_capabilities.py index 648420efb..6b3947cf9 100644 --- a/test/functional/mac/helper/desired_capabilities.py +++ b/test/functional/mac/helper/desired_capabilities.py @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Any, Dict +from typing import Any -def get_desired_capabilities() -> Dict[str, Any]: - desired_caps: Dict[str, Any] = {'platformName': 'mac', 'automationName': 'Mac2', 'bundleId': 'com.apple.TextEdit'} +def get_desired_capabilities() -> dict[str, Any]: + desired_caps: dict[str, Any] = {'platformName': 'mac', 'automationName': 'Mac2', 'bundleId': 'com.apple.TextEdit'} return desired_caps diff --git a/test/functional/test_helper.py b/test/functional/test_helper.py index 90500ea0a..550c26e4a 100644 --- a/test/functional/test_helper.py +++ b/test/functional/test_helper.py @@ -1,9 +1,10 @@ import os import socket import time +from collections.abc import Callable from dataclasses import dataclass from time import sleep -from typing import TYPE_CHECKING, Any, Callable, Optional +from typing import TYPE_CHECKING, Any from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait @@ -102,8 +103,8 @@ def wait_for_element(driver: 'WebDriver', locator: str, value: str, timeout_sec: class WorkerInfo: """Information about the current test worker in parallel execution.""" - worker_number: Optional[int] - total_workers: Optional[int] + worker_number: int | None + total_workers: int | None @property def is_parallel(self) -> bool: diff --git a/test/unit/helper/test_helper.py b/test/unit/helper/test_helper.py index 58e358176..b31d5457a 100644 --- a/test/unit/helper/test_helper.py +++ b/test/unit/helper/test_helper.py @@ -13,7 +13,7 @@ # limitations under the License. import json -from typing import TYPE_CHECKING, Any, Dict +from typing import TYPE_CHECKING, Any import httpretty @@ -199,6 +199,6 @@ def flutter_w3c_driver() -> 'WebDriver': return driver -def get_httpretty_request_body(request: 'HTTPrettyRequestEmpty') -> Dict[str, Any]: +def get_httpretty_request_body(request: 'HTTPrettyRequestEmpty') -> dict[str, Any]: """Returns utf-8 decoded request body""" return json.loads(request.body.decode('utf-8')) diff --git a/test/unit/webdriver/device/clipboard_test.py b/test/unit/webdriver/device/clipboard_test.py index d5a33a2ce..4f313b2fe 100644 --- a/test/unit/webdriver/device/clipboard_test.py +++ b/test/unit/webdriver/device/clipboard_test.py @@ -27,7 +27,7 @@ def test_set_clipboard_with_url(self): appium_command('/session/1234567890/execute/sync'), body='{"value": ""}', ) - driver.set_clipboard(bytes(str('http://appium.io/'), 'UTF-8'), ClipboardContentType.URL, 'label for android') + driver.set_clipboard(bytes('http://appium.io/', 'UTF-8'), ClipboardContentType.URL, 'label for android') d = get_httpretty_request_body(httpretty.last_request()) assert d['args'][0]['content'] == 'aHR0cDovL2FwcGl1bS5pby8=' diff --git a/test/unit/webdriver/device/keyboard_test.py b/test/unit/webdriver/device/keyboard_test.py index ebffc8e0a..68f77bdbf 100644 --- a/test/unit/webdriver/device/keyboard_test.py +++ b/test/unit/webdriver/device/keyboard_test.py @@ -31,7 +31,7 @@ def test_press_keycode(self): driver = android_w3c_driver() httpretty.register_uri(httpretty.POST, appium_command('/session/1234567890/execute/sync'), body='{"value": "86"}') driver.press_keycode(86) - d = get_httpretty_request_body((httpretty.last_request())) + d = get_httpretty_request_body(httpretty.last_request()) assert d['script'] == 'mobile: pressKey' assert d['args'][0]['keycode'] == 86 @@ -40,7 +40,7 @@ def test_long_press_keycode(self): driver = android_w3c_driver() httpretty.register_uri(httpretty.POST, appium_command('/session/1234567890/execute/sync'), body='{"value": "86"}') driver.long_press_keycode(86) - d = get_httpretty_request_body((httpretty.last_request())) + d = get_httpretty_request_body(httpretty.last_request()) assert d['script'] == 'mobile: pressKey' assert d['args'][0]['keycode'] == 86 assert d['args'][0]['isLongPress'] is True diff --git a/test/unit/webdriver/webdriver_test.py b/test/unit/webdriver/webdriver_test.py index 6515c5239..36102735a 100644 --- a/test/unit/webdriver/webdriver_test.py +++ b/test/unit/webdriver/webdriver_test.py @@ -13,10 +13,10 @@ # limitations under the License. import json +from unittest.mock import patch import httpretty import urllib3 -from mock import patch from appium import webdriver from appium.options.android import UiAutomator2Options