diff --git a/.github/workflows/functional-test.yml b/.github/workflows/functional-test.yml index 2f9a5f334..6227a2900 100644 --- a/.github/workflows/functional-test.yml +++ b/.github/workflows/functional-test.yml @@ -29,13 +29,12 @@ jobs: XCODE_VERSION: 15.3 IOS_VERSION: 17.4 IPHONE_MODEL: iPhone 15 Plus - GLOBAL_DEFAULT_TIMEOUT: 600 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 'lts/*' @@ -99,15 +98,15 @@ jobs: ARCH: x86 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' - name: Install Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 'lts/*' @@ -146,7 +145,7 @@ jobs: script: echo "Generated AVD snapshot for caching." - name: Set up Python 3.12 - uses: actions/setup-python@v3 + uses: actions/setup-python@v5 with: python-version: 3.12 @@ -221,7 +220,7 @@ jobs: sudo udevadm trigger --name-match=kvm - name: Set up Python 3.12 - uses: actions/setup-python@v3 + uses: actions/setup-python@v5 with: python-version: 3.12 diff --git a/README.md b/README.md index e28ed7eaa..21653cda1 100644 --- a/README.md +++ b/README.md @@ -426,10 +426,11 @@ Appium Python Client has `120` seconds read timeout on each HTTP request since t the corresponding selenium binding version. You have two methods to extend the read timeout. -1. Set `GLOBAL_DEFAULT_TIMEOUT` environment variable -2. Configure timeout via `selenium.webdriver.remote.client_config.ClientConfig` +1. **Recommend** Configure timeout via `appium.webdriver.client_config.AppiumClientConfig` or `selenium.webdriver.remote.client_config.ClientConfig` - `timeout` argument, or - `init_args_for_pool_manager` argument for `urllib3.PoolManager` +2. Set `GLOBAL_DEFAULT_TIMEOUT` environment variable + - This env var will be removed from the selenium binding ([issue](https://github.com/SeleniumHQ/selenium/issues/15604)) ## Documentation diff --git a/test/functional/android/chrome_tests.py b/test/functional/android/chrome_tests.py index ecf0e76b3..000bc5dc3 100644 --- a/test/functional/android/chrome_tests.py +++ b/test/functional/android/chrome_tests.py @@ -14,6 +14,7 @@ from appium import webdriver from appium.options.common import AppiumOptions +from appium.webdriver.client_config import AppiumClientConfig from appium.webdriver.common.appiumby import AppiumBy from test.helpers.constants import SERVER_URL_BASE @@ -22,9 +23,13 @@ class TestChrome(object): def setup_method(self) -> None: + client_config = AppiumClientConfig(remote_server_addr=SERVER_URL_BASE) + client_config.timeout = 600 caps = get_desired_capabilities() caps['browserName'] = 'Chrome' - self.driver = webdriver.Remote(SERVER_URL_BASE, options=AppiumOptions().load_capabilities(caps)) + self.driver = webdriver.Remote( + SERVER_URL_BASE, options=AppiumOptions().load_capabilities(caps), client_config=client_config + ) def teardown_method(self) -> None: self.driver.quit() diff --git a/test/functional/android/helper/test_helper.py b/test/functional/android/helper/test_helper.py index cb22e6353..7f113f210 100644 --- a/test/functional/android/helper/test_helper.py +++ b/test/functional/android/helper/test_helper.py @@ -18,6 +18,7 @@ from appium import webdriver from appium.options.android import UiAutomator2Options +from appium.webdriver.client_config import AppiumClientConfig from test.functional.test_helper import is_ci from test.helpers.constants import SERVER_URL_BASE @@ -33,7 +34,9 @@ class BaseTestCase: def setup_method(self, method) -> None: # type: ignore caps = desired_capabilities.get_desired_capabilities('ApiDemos-debug.apk.zip') - self.driver = webdriver.Remote(SERVER_URL_BASE, options=UiAutomator2Options().load_capabilities(caps)) + client_config = AppiumClientConfig(remote_server_addr=SERVER_URL_BASE) + client_config.timeout = 600 + self.driver = webdriver.Remote(options=UiAutomator2Options().load_capabilities(caps), client_config=client_config) if is_ci(): self.driver.start_recording_screen() diff --git a/test/functional/flutter_integration/helper/test_helper.py b/test/functional/flutter_integration/helper/test_helper.py index 7521fb768..19c669754 100644 --- a/test/functional/flutter_integration/helper/test_helper.py +++ b/test/functional/flutter_integration/helper/test_helper.py @@ -16,6 +16,7 @@ from appium import webdriver from appium.options.flutter_integration.base import FlutterOptions +from appium.webdriver.client_config import AppiumClientConfig from appium.webdriver.extensions.flutter_integration.flutter_commands import FlutterCommand from test.helpers.constants import SERVER_URL_BASE @@ -34,7 +35,11 @@ def setup_method(self) -> None: flutterOptions.flutter_server_launch_timeout = 120000 desired_caps = desired_capabilities.get_desired_capabilities(platform_name) - self.driver = webdriver.Remote(SERVER_URL_BASE, options=flutterOptions.load_capabilities(desired_caps)) + + client_config = AppiumClientConfig(remote_server_addr=SERVER_URL_BASE) + client_config.timeout = 600 + + self.driver = webdriver.Remote(options=flutterOptions.load_capabilities(desired_caps), client_config=client_config) self.flutter_command = FlutterCommand(self.driver) def teardown_method(self) -> None: # type: ignore diff --git a/test/functional/ios/helper/test_helper.py b/test/functional/ios/helper/test_helper.py index 0a30de0a4..435ca4b45 100644 --- a/test/functional/ios/helper/test_helper.py +++ b/test/functional/ios/helper/test_helper.py @@ -17,6 +17,7 @@ from appium import webdriver from appium.options.ios import XCUITestOptions +from appium.webdriver.client_config import AppiumClientConfig from test.functional.test_helper import is_ci from test.helpers.constants import SERVER_URL_BASE @@ -28,7 +29,9 @@ class BaseTestCase(object): def setup_method(self) -> None: desired_caps = desired_capabilities.get_desired_capabilities('UICatalog.app.zip') - self.driver = webdriver.Remote(SERVER_URL_BASE, options=XCUITestOptions().load_capabilities(desired_caps)) + client_config = AppiumClientConfig(remote_server_addr=SERVER_URL_BASE) + client_config.timeout = 600 + self.driver = webdriver.Remote(options=XCUITestOptions().load_capabilities(desired_caps), client_config=client_config) if is_ci(): self.driver.start_recording_screen() diff --git a/test/functional/ios/safari_tests.py b/test/functional/ios/safari_tests.py index 47df9b1da..c7bd997c1 100644 --- a/test/functional/ios/safari_tests.py +++ b/test/functional/ios/safari_tests.py @@ -16,6 +16,7 @@ from appium import webdriver from appium.options.common import AppiumOptions +from appium.webdriver.client_config import AppiumClientConfig from test.helpers.constants import SERVER_URL_BASE from .helper.desired_capabilities import get_desired_capabilities @@ -32,7 +33,9 @@ def setup_method(self) -> None: 'webviewConnectTimeout': 100000, } ) - self.driver = webdriver.Remote(SERVER_URL_BASE, options=AppiumOptions().load_capabilities(caps)) + client_config = AppiumClientConfig(remote_server_addr=SERVER_URL_BASE) + client_config.timeout = 600 + self.driver = webdriver.Remote(options=AppiumOptions().load_capabilities(caps), client_config=client_config) # Fresh iOS 17.4 simulator may not show up the webview context with "safari" # after a fresh simlator instance creation. diff --git a/test/functional/mac/helper/test_helper.py b/test/functional/mac/helper/test_helper.py index b76409415..0b7463dac 100644 --- a/test/functional/mac/helper/test_helper.py +++ b/test/functional/mac/helper/test_helper.py @@ -14,6 +14,7 @@ from appium import webdriver from appium.options.mac import Mac2Options +from appium.webdriver.client_config import AppiumClientConfig from test.helpers.constants import SERVER_URL_BASE from .desired_capabilities import get_desired_capabilities @@ -21,7 +22,11 @@ class BaseTestCase(object): def setup_method(self) -> None: - self.driver = webdriver.Remote(SERVER_URL_BASE, options=Mac2Options().load_capabilities(get_desired_capabilities())) + client_config = AppiumClientConfig(remote_server_addr=SERVER_URL_BASE) + client_config.timeout = 600 + self.driver = webdriver.Remote( + SERVER_URL_BASE, options=Mac2Options().load_capabilities(get_desired_capabilities()), client_config=client_config + ) def teardown_method(self, method) -> None: # type: ignore if not hasattr(self, 'driver'):