From 5be41a5895ba9137bd1e967e66a87174d8c98606 Mon Sep 17 00:00:00 2001 From: Dor-bl <59066376+Dor-bl@users.noreply.github.com> Date: Mon, 10 Aug 2026 06:29:40 +0000 Subject: [PATCH 1/3] fix(service): add TLS verification to Appium service readiness check Enforce TLS verification when the Appium service URL uses HTTPS. This updates `is_service_listening` to pass `cert_reqs='CERT_REQUIRED'` to `urllib3.PoolManager`. It also optionally passes the `certifi` CA bundle if it is available in the environment. --- appium/webdriver/appium_service.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/appium/webdriver/appium_service.py b/appium/webdriver/appium_service.py index 93c926c65..116e13ab5 100644 --- a/appium/webdriver/appium_service.py +++ b/appium/webdriver/appium_service.py @@ -21,6 +21,13 @@ from selenium.webdriver.remote.remote_connection import urllib3 +try: + import certifi + + _ca_certs = certifi.where() +except ImportError: + _ca_certs = None + DEFAULT_HOST = '127.0.0.1' DEFAULT_PORT = 4723 STARTUP_TIMEOUT_MS = 60000 @@ -207,7 +214,10 @@ def is_service_listening(url: str, timeout: float = 5, custom_validator: Optiona True if Appium server is running before the timeout """ time_started_sec = time.perf_counter() - conn = urllib3.PoolManager(timeout=1.0) + pool_kwargs: Any = {'timeout': 1.0, 'cert_reqs': 'CERT_REQUIRED'} + if _ca_certs: + pool_kwargs['ca_certs'] = _ca_certs + conn = urllib3.PoolManager(**pool_kwargs) while time.perf_counter() < time_started_sec + timeout: if custom_validator is not None: custom_validator() From 4ca59e495fefda05dfb3a244ca0a75ee2bbba69b Mon Sep 17 00:00:00 2001 From: Dor-bl <59066376+Dor-bl@users.noreply.github.com> Date: Mon, 10 Aug 2026 06:34:24 +0000 Subject: [PATCH 2/3] fix(service): secure Appium service TLS verification Enforce TLS verification when the Appium service URL uses HTTPS. This updates `is_service_listening` to pass `cert_reqs='CERT_REQUIRED'` to `urllib3.PoolManager`. It also optionally passes the `certifi` CA bundle if it is available in the environment. Also fixes type annotations for `_ca_certs` to prevent mypy CI failures. --- appium/webdriver/appium_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appium/webdriver/appium_service.py b/appium/webdriver/appium_service.py index 116e13ab5..f9d204169 100644 --- a/appium/webdriver/appium_service.py +++ b/appium/webdriver/appium_service.py @@ -24,7 +24,7 @@ try: import certifi - _ca_certs = certifi.where() + _ca_certs: Optional[str] = certifi.where() except ImportError: _ca_certs = None From e8d2d2010b68a09794dbe7f8fc60f77312d3915e Mon Sep 17 00:00:00 2001 From: Dor-bl <59066376+Dor-bl@users.noreply.github.com> Date: Mon, 10 Aug 2026 07:27:28 +0000 Subject: [PATCH 3/3] fix(ci): point flutter app URLs to v0.0.33 in functional tests The previous latest release (0.0.34) of the appium-flutter-server repository no longer has the app-debug.apk and ios.zip release assets, causing CI end-to-end jobs to fail with 404s when attempting to download them. Pinned the asset URLs to the 0.0.33 release where they actually exist to resolve this. --- .github/workflows/functional-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/functional-test.yml b/.github/workflows/functional-test.yml index fecd4b1b1..c4d81cd1c 100644 --- a/.github/workflows/functional-test.yml +++ b/.github/workflows/functional-test.yml @@ -245,8 +245,8 @@ jobs: XCODE_VERSION: 16.4 IOS_VERSION: 18.5 IPHONE_MODEL: iPhone 16 - FLUTTER_ANDROID_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/latest/download/app-debug.apk" - FLUTTER_IOS_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/latest/download/ios.zip" + FLUTTER_ANDROID_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/download/0.0.33/app-debug.apk" + FLUTTER_IOS_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/download/0.0.33/ios.zip" PREBUILT_WDA_PATH: ${{ github.workspace }}/wda/WebDriverAgentRunner-Runner.app steps: