Skip to main content

Platform Support

Complete guide to platform-specific requirements, limitations, and driver setup for Dioxus testing.

Platform Support Overviewโ€‹

PlatformSupportedDriver ProvidersNotes
Windowsโœ… Yes'embedded', 'external''embedded' recommended; 'external' requires wdio-dioxus-driver + msedgedriver
Linuxโœ… Yes'embedded' only'external' blocked in v1 โ€” upstream Dioxus PR pending
macOSโœ… Yes'embedded' only'external' not supported

Driver Providersโ€‹

'embedded'โ€‹

Type
Recommended Everywhere

The embedded WebDriver provider uses wdio-dioxus-embedded-driver wired into the app via wdio_dioxus_bridge::install(config). No external driver process is needed.

Works on: Windows, Linux, macOS

Requirements:

  • wdio-dioxus-bridge = "1" in Cargo.toml
  • wdio_dioxus_bridge::install(config) in main.rs inside #[cfg(debug_assertions)]
  • Debug build of the app (cargo build)

Configuration:

services: [['@wdio/dioxus-service', {
driverProvider: 'embedded', // Default, recommended
}]]

'external'โ€‹

Type
Windows Only in v1

The external provider uses wdio-dioxus-driver (a fork of tauri-driver) + msedgedriver.exe.

Works on: Windows only in v1

Not supported on: Linux (blocked โ€” see below), macOS (never supported)

Requirements:

  • wdio-dioxus-driver installed via cargo install wdio-dioxus-driver
  • msedgedriver.exe (auto-managed by the service with autoDownloadEdgeDriver: true)

Configuration:

services: [['@wdio/dioxus-service', {
driverProvider: 'external',
autoInstallDioxusDriver: true,
autoDownloadEdgeDriver: true,
}]]

Windowsโ€‹

No external driver needed. Ensure the bridge is in your app and use a debug build.

services: [['@wdio/dioxus-service', {
driverProvider: 'embedded',
appBinaryPath: './target/debug/my_app.exe',
}]]

'external' Providerโ€‹

Uses wdio-dioxus-driver โ†’ msedgedriver.exe โ†’ Dioxus app via WebView2 automation.

Setup:

  1. Build a debug binary: cargo build
  2. Configure the service:
    services: [['@wdio/dioxus-service', {
    driverProvider: 'external',
    autoInstallDioxusDriver: true,
    autoDownloadEdgeDriver: true,
    appBinaryPath: './target/debug/my_app.exe',
    }]]

The service auto-manages msedgedriver.exe to match the WebView2 version in your binary.

See Edge WebDriver (Windows) for detailed setup.

Windows-Specific Featuresโ€‹

  • โœ… Full Dioxus invoke API via browser.dioxus.execute()
  • โœ… Command mocking
  • โœ… Log capture (frontend and backend)
  • โœ… Screenshot capture
  • โœ… Multiremote testing

Windows Requirementsโ€‹

  • Visual C++ Build Tools or Visual Studio
  • Rust toolchain
  • Node.js 18+
  • For 'external' provider: wdio-dioxus-driver + msedgedriver (auto-managed)

Linuxโ€‹

'embedded' Provider Onlyโ€‹

'external' is blocked in v1 due to a missing upstream Dioxus API โ€” the automation toggle that wdio-dioxus-driver needs to pass to Wry has not yet landed in the Dioxus/Wry codebase. This is tracked and will be enabled in v1.1 once the upstream PR merges.

Attempting to set driverProvider: 'external' on Linux throws a SevereServiceError at startup with an explanatory message.

Configuration:

services: [['@wdio/dioxus-service', {
driverProvider: 'embedded', // The only supported option on Linux
appBinaryPath: './target/debug/my_app',
}]]

Linux Build Requirementsโ€‹

Install WebKitGTK libraries (required to build Dioxus desktop apps):

# Debian/Ubuntu
sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev

# Fedora
sudo dnf install -y webkit2gtk4.1-devel gtk3-devel

# Arch Linux
sudo pacman -S webkit2gtk-4.1 gtk3

Headless Testing on Linuxโ€‹

To run tests without a display (CI/CD environments):

# With Xvfb
sudo apt-get install -y xvfb
xvfb-run -a npx wdio run wdio.conf.ts

Linux-Specific Featuresโ€‹

  • โœ… Full Dioxus invoke API
  • โœ… Command mocking
  • โœ… Log capture
  • โœ… Screenshot capture
  • โœ… Headless testing with Xvfb
  • โœ… Multiremote testing
  • โŒ 'external' provider (v1 โ€” v1.1 target)

Linux Distribution Supportโ€‹

DistributionStatus
Debian / Ubuntu 22.04+โœ… Supported
Fedora 40+โœ… Supported
Arch Linuxโœ… Supported
Alpine LinuxโŒ Not supported (musl incompatibility)

macOSโ€‹

'embedded' Provider Onlyโ€‹

'external' is not supported on macOS and never will be โ€” it inherits the same WKWebView limitation as the upstream tauri-driver fork it is based on.

Configuration:

services: [['@wdio/dioxus-service', {
driverProvider: 'embedded', // Default, and the only option on macOS
appBinaryPath: './target/debug/my_app',
}]]

macOS-Specific Featuresโ€‹

  • โœ… Full Dioxus invoke API
  • โœ… Command mocking
  • โœ… Log capture
  • โœ… Screenshot capture
  • โœ… Multiremote testing
  • โŒ 'external' provider (not supported, no timeline)

Cross-Platform Tipsโ€‹

# .github/workflows/e2e.yml
jobs:
e2e:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable

- name: Install Linux dependencies
if: runner.os == 'Linux'
run: sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev xvfb

- uses: actions/setup-node@v4
with:
node-version: '20'

- run: npm install
- run: cargo build

- name: Run E2E (Linux, headless)
if: runner.os == 'Linux'
run: xvfb-run -a npm run test:e2e

- name: Run E2E (Windows / macOS)
if: runner.os != 'Linux'
run: npm run test:e2e

Platform-Conditional Testsโ€‹

describe('Platform-specific features', () => {
it('should handle Windows path format', function() {
if (process.platform !== 'win32') {
this.skip();
}
// Windows-specific test
});

it('should handle Linux file permissions', function() {
if (process.platform !== 'linux') {
this.skip();
}
// Linux-specific test
});
});

Summaryโ€‹

ProviderWindowsLinuxmacOS
'embedded'โœ…โœ…โœ…
'external'โœ…โŒ (v1.1)โŒ (never)

Use 'embedded' everywhere for the simplest, most consistent setup.

See Alsoโ€‹

Welcome! How can I help?

WebdriverIO AI Copilot