fix(utils): skip desktop browser download when androidPackage is set#15204
Conversation
`binary` and `androidPackage` are mutually exclusive in geckodriver and chromedriver. Guard setupPuppeteerBrowser calls in startWebDriver and setupBrowser to skip download and binary injection for Android. Closes #15199
…o fix/firefox-android-skip-desktop-browser-download
create-wdio
eslint-plugin-wdio
@wdio/allure-reporter
@wdio/appium-service
@wdio/browser-runner
@wdio/browserstack-service
@wdio/cli
@wdio/concise-reporter
@wdio/config
@wdio/cucumber-framework
@wdio/dot-reporter
@wdio/firefox-profile-service
@wdio/globals
@wdio/jasmine-framework
@wdio/json-reporter
@wdio/junit-reporter
@wdio/lighthouse-service
@wdio/local-runner
@wdio/logger
@wdio/mocha-framework
@wdio/protocols
@wdio/repl
@wdio/reporter
@wdio/runner
@wdio/sauce-service
@wdio/shared-store-service
@wdio/smoke-test-cjs-service
@wdio/smoke-test-reporter
@wdio/smoke-test-service
@wdio/spec-reporter
@wdio/static-server-service
@wdio/sumologic-reporter
@wdio/testingbot-service
@wdio/types
@wdio/utils
@wdio/webdriver-mock-service
@wdio/xvfb
webdriver
webdriverio
commit: |
There was a problem hiding this comment.
Pull request overview
Fixes local driver startup behavior for Android-over-ADB Chrome/Firefox sessions by avoiding desktop browser provisioning and binary injection when androidPackage is set, preventing driver-side capability conflicts.
Changes:
- Guard
startWebDriverto skipsetupPuppeteerBrowser()and avoid settinggoog:chromeOptions.binary/moz:firefoxOptions.binarywhenandroidPackageis present. - Guard
setupBrowserto skip desktop browser downloads for AndroidandroidPackagecapabilities. - Add/extend unit tests and capability typings for
androidPackage-related options.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/wdio-utils/src/node/startWebDriver.ts | Skip desktop browser setup + binary injection when androidPackage is set for Chrome/Firefox. |
| packages/wdio-utils/src/node/manager.ts | Skip browser download in setupBrowser when androidPackage is present. |
| packages/wdio-utils/tests/node/index.test.ts | Adds regression tests ensuring no desktop download/binary injection for Android androidPackage. |
| packages/wdio-utils/tests/node/manager.test.ts | Adds tests ensuring setupBrowser skips Puppeteer setup for androidPackage caps. |
| packages/wdio-types/src/Capabilities.ts | Adds typings for Android-related android* fields in Chrome/Firefox options. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| let browserVersion: string | undefined | ||
| if (!caps['goog:chromeOptions']?.androidPackage) { | ||
| const puppeteerResult = await setupPuppeteerBrowser(cacheDir, caps) | ||
| browserVersion = puppeteerResult.browserVersion | ||
|
|
| const browserOptions = isFirefox(cap.browserName) | ||
| ? cap['moz:firefoxOptions'] | ||
| : cap['goog:chromeOptions'] | ||
| if (browserOptions?.androidPackage) { | ||
| return Promise.resolve() | ||
| } |
|
I'm the reporter of #15199 — just wanted to confirm that this fix works perfectly for my use case. I've been testing a WebExtension builds installed and running in Firefox mobile on Android, and with the changes from this PR applied as a patch to I believe WDIO is the only automation framework that supports testing WebExtensions on mobile Firefox right now, which makes this a really valuable capability. Thanks for taking care of this! |
When moz:firefoxOptions.androidPackage or goog:chromeOptions.androidPackage is set, geckodriver/chromedriver launch the browser on an Android device over ADB not a local executable. WDIO was unconditionally calling setupPuppeteerBrowser() and injecting the host-filesystem path as binary into the browser options, causing geckodriver to reject the session with androidPackage and binary are mutually exclusive. This fix guards both startWebDriver and setupBrowser to skip the download and binary injection when androidPackage is present. The driver process still starts normally.
Fixes #15199
Proposed changes
Types of changes
Checklist
Backport Request
v9and doesn't need to be back-ported#XXXXXFurther comments
Reviewers: @webdriverio/project-committers