Releases: webdriverio/desktop-mobile
Releases · webdriverio/desktop-mobile
@wdio/tauri-service: v1.0.0
New:
- Three driver providers:
@wdio/tauri-serviceships with three ways to connect to a Tauri application — embedded (default, no external binary required), official (externaltauri-driverbinary), and CrabNebula (macOS-only commercial alternative). The embedded provider is auto-detected on macOS and can be enabled explicitly on Windows and Linux viadriverProvider: 'embedded'(#182, #238) browser.tauriAPI: All Tauri-specific test operations are available on thebrowser.taurinamespace —execute(),mock(),clearAllMocks(),resetAllMocks(),restoreAllMocks(),switchWindow(),listWindows(), andtriggerDeeplink()- Command mocking: Mock any Tauri backend command with a full Vitest-compatible interface including
mockReturnValue,mockImplementation,mockReturnValueOnce,mockRejectedValue,withImplementation, and call tracking viamock.callsandmock.results. Mocking is implemented via JavaScript-side invoke interception and requires@wdio/tauri-plugin browser.tauri.execute(): Execute arbitrary JavaScript in the Tauri frontend context with access to Tauri APIs. Accepts a function (receiving the full Tauri API object as the first parameter) or a string of code, with optional extra arguments. Requires@wdio/tauri-plugin(#241)- Deeplink testing:
browser.tauri.triggerDeeplink(url)triggers a custom protocol URL using platform-appropriate system commands (openon macOS,xdg-openon Linux,cmd /c starton Windows). See the Deeplink Testing guide for single-instance plugin setup - Multi-window support:
browser.tauri.switchWindow(label)andbrowser.tauri.listWindows()allow tests to target specific named windows. Per-call window overrides are available viawithExecuteOptions({ windowLabel })without changing the session default (#225) - Log forwarding: Backend (Rust) and frontend (JS) logs can be captured and forwarded to WebdriverIO's logger via
captureBackendLogsandcaptureFrontendLogsoptions. Standalone mode writes logs to timestamped files in a configurablelogDir - Standalone session API:
startWdioSession(),cleanupWdioSession(), andcreateTauriCapabilities()allow managing Tauri sessions outside of the WebdriverIO runner lifecycle — useful for custom test frameworks or one-off automation scripts - Multiremote support: Multiple Tauri app instances can be driven in a single test run using WebdriverIO multiremote. Each instance gets its own embedded WebDriver port, and CrabNebula backend cycling is supported for macOS multiremote setups (#184)
- Auto-install helpers:
autoInstallTauriDriver: trueinstallstauri-drivervia Cargo if not found in PATH;autoDownloadEdgeDriver: truedownloads a matching MSEdgeDriver on Windows when a version mismatch is detected
Fixed:
- Script serialization in
executecommands for improved cross-context compatibility (#224) - Mock failures when using specific Tauri invoke patterns (#235)
- Error handling and response mapping throughout the service (#198)
Documentation:
- Added: API reference covering all
browser.tauri.*methods, theTauriMockinterface, and all package exports - Added: Configuration reference for all service options
- Added: Plugin setup guide, deeplink testing, log forwarding, platform support, and troubleshooting guides (#193)
Developer:
- Monorepo: Developed in the
webdriverio/desktop-mobileTurborepo monorepo alongside@wdio/electron-serviceand shared packages (@wdio/native-utils,@wdio/native-types,@wdio/native-spy) - Architecture: Service follows the standard WDIO launcher/worker split —
TauriLaunchServiceruns in the main process for driver lifecycle management,TauriWorkerServiceruns in the worker process forbrowser.tauriAPI injection - Tooling: Biome alongside ESLint for formatting and linting; TypeScript 5.9+ strict mode throughout
- Build: TypeScript compiler with dual ESM/CJS output; Node.js 24 LTS
- Testing: Unit and integration test suite with 80%+ coverage; ESM/CJS compatibility verified via package tests (#215)
Full Changelog: https://github.com/webdriverio/desktop-mobile/commits/wdio-tauri-service@v1.0.0
@wdio/tauri-plugin: v1.0.0
New:
plugin:wdio|executecommand: Execute arbitrary JavaScript in the Tauri frontend context with access to all Tauri APIs. The script receives the fullwindow.__TAURI__object as its first argument, enabling direct calls tocore.invoke,app,window, and any other Tauri module. Used bybrowser.tauri.execute()in@wdio/tauri-service- JavaScript-side invoke interception: The plugin installs
window.__wdio_mocks__in the frontend to interceptcore.invoke()calls before they reach the Rust backend. This allows full command mocking without any Rust-side changes —browser.tauri.mock('my_command')in tests transparently redirects invocations at the JS layer - Log forwarding:
plugin:wdio|log-frontendforwards JavaScript console output from the frontend to WebdriverIO's logger. Controlled bycaptureFrontendLogsin@wdio/tauri-service - Window management commands:
plugin:wdio|get-active-window-label,plugin:wdio|list-windows, andplugin:wdio|get-window-statesexpose Tauri window metadata to the test process, poweringbrowser.tauri.switchWindow()andbrowser.tauri.listWindows() - TypeScript support: The
@wdio/tauri-pluginnpm package ships full TypeScript definitions for the frontend API (window.wdioTauri) includingexecute(),waitForInit(),cleanupAll(),cleanupLogListeners(), andcleanupInvokeInterception() - Tauri v2 permission model: All commands are gated by explicit Tauri v2 permissions.
"wdio:default"in your capability file grants all plugin capabilities; individual permissions (wdio:allow-execute,wdio:allow-list-windows, etc.) are available for fine-grained control
Developer:
- Dual package: Ships as both a Rust crate (
tauri-plugin-wdioon crates.io) and an npm package (@wdio/tauri-pluginon npm) — the npm package provides the frontend JavaScript and TypeScript types - Monorepo: Developed in the
webdriverio/desktop-mobileTurborepo monorepo alongside@wdio/tauri-service - Build:
build.rsgenerates permission schema without auto-registering commands (avoids Tauri generating duplicate permission identifiers)
Full Changelog: https://github.com/webdriverio/desktop-mobile/commits/wdio-tauri-plugin@v1.0.0
tauri-plugin-wdio-webdriver: v1.0.0
New:
- Embedded W3C WebDriver server:
tauri-plugin-wdio-webdriverembeds a compliant WebDriver HTTP server directly inside your Tauri application, eliminating the need fortauri-driver,msedgedriver, orwebkit2gtk-driver. Register it once in your Tauri app and@wdio/tauri-servicehandles the rest - Full cross-platform support: All three major desktop platforms are supported in this release — macOS via WKWebView native APIs, Windows via WebView2 native APIs, and Linux via WebKitGTK native APIs
- 47 W3C WebDriver endpoints: Session management, navigation, element finding and interaction, shadow DOM, window and frame control, script execution, cookies, user actions, alerts, screenshots, and PDF printing
TAURI_WEBDRIVER_PORTenv var: Configure the server port at runtime without code changes.@wdio/tauri-servicesets this automatically; for standalone use, set it before launching the app. Falls back to port4445init_with_port(port)API: Set a fixed port programmatically at plugin registration time, taking precedence over the environment variable- Standalone W3C client compatibility: The embedded server is compatible with any W3C WebDriver client — WebdriverIO, Selenium Python, or any other conforming client can connect directly
Developer:
- Renamed from
tauri-plugin-wdio-server: The crate was renamed totauri-plugin-wdio-webdriverfor clarity. Update yourCargo.tomlif migrating from the pre-release (#182) - Forked from
Choochmeque/tauri-plugin-webdriver: Extended with WebdriverIO-specific compatibility fixes, health-check endpoint improvements, and the port configuration API (#238) - Production safety: Intended as a dev/test-only dependency. Use
[target.'cfg(debug_assertions)'.dependencies]or a feature flag to ensure it is excluded from release builds - Monorepo: Developed in the
webdriverio/desktop-mobilemonorepo alongside@wdio/tauri-service
Full Changelog: https://github.com/webdriverio/desktop-mobile/commits/tauri-plugin-wdio-webdriver@v1.0.0
@wdio/electron-service: v10.0.0
Previous versions of this package can be found at https://github.com/webdriverio-community/wdio-electron-service.
New:
- Package renamed to
@wdio/electron-service: The service is now an official first-party WebdriverIO package, hosted in thewebdriverio/desktop-mobilemonorepo. WebdriverIO automatically resolves the'electron'service name — no configuration changes required. See the v9 → v10 migration guide for full upgrade instructions (#3) - Deeplink testing: New
browser.electron.triggerDeeplink()command for testing custom protocol handlers, with automatic handling of platform-specific behaviour including the Windows new-instance problem (#59) - Console log capture: Electron main and renderer process console output can now be captured into WDIO test logs via the
captureMainProcessLogs,captureRendererLogs,mainProcessLogLevel, andrendererLogLevelservice options. Standalone mode writes logs to timestamped files (#59) - Class mocking: In addition to function-level mocking, the service now supports mocking entire Electron class instances (e.g.
Tray,BrowserWindow,Menu) viabrowser.electron.mock('Tray'). Class mocks provide a__constructorspy and individual spies for all instance methods (#59) electronBuilderConfigoption: Specify a path to a customelectron-builderconfiguration file, useful when you have multiple build configurations (e.g. staging vs. production) that extend a common base (#59)getElectronBinaryPath()utility: New exported helper to resolve the Electron binary path from a given app directory, without needing to start a full session (#59)- Bridge stub API: CDP bridge methods are now stubbed before full bridge initialization, preventing errors when bridge APIs are invoked during early app startup (#50)
Breaking Changes:
createElectronCapabilities()interface: The helper now accepts a singleElectronServiceOptionsobject instead of positional arguments. The return type has changed from theElectronServiceCapabilitiesunion to a singleElectronStandaloneCapabilityobject. See the migration guide for details (#165)
Fixed:
- Windows multiremote capability handling (#124)
- Script serialization in
executecommands for improved cross-context compatibility (#224) - Mock failures when using specific Electron APIs (#235)
- Improved error handling and logging throughout the service (#197)
Documentation:
- Added: v9 → v10 migration guide
- Added: API reference with full documentation for all exported functions, browser commands, mock object methods and properties
- Added: Dedicated debugging guide split from common issues, covering debug logging and log capture
- Updated: Complete documentation rework across configuration, Electron APIs, common issues, standalone mode, window management, and deeplink testing (#105, #157, #196)
Developer:
- Migration: Migrated to the
webdriverio/desktop-mobileTurborepo monorepo, now developed alongside@wdio/tauri-serviceand a suite of shared packages (@wdio/native-utils,@wdio/native-types,@wdio/native-spy). Additionally,@wdio/cdp-bridgewas renamed to@wdio/electron-cdp-bridge. - Architecture: Electron service patterns standardised with the Tauri service for consistency across both desktop targets (#158); internal types refactored (#52, #174)
- Tooling: Biome added alongside ESLint for formatting and linting (#153)
- Build: TypeScript 5.9+, Node.js 24 LTS, pnpm 10, Turborepo 2.5+
- Testing: ESM/CJS compatibility verified via package tests (#38); unit and integration test suite improvements (#213)
- CI: Reworked release workflows using releasekit (#217); security fixes for CodeQL alerts (#116, #117, #119)
- Maintenance: LTS backporting approach removed in favour of the new monorepo's rolling release model (#104)
- Dependencies: Updated all dependencies to latest versions including Puppeteer and WebdriverIO (#94, #115, #203, #230)
Full Changelog: https://github.com/webdriverio/desktop-mobile/commits/wdio-electron-service@v10.0.0