Skip to main content

BrowserStack

BrowserStack App Automate runs Mobilewright tests on real devices through the @browserstack/mobilewright driver, maintained by BrowserStack. Every test session is a first-class App Automate session — dashboard, server-side video, device and network logs — with no BrowserStack-specific code in your tests.

Requires mobilewright ≥ 0.0.53.

Setup

1. Install the driver

npm install --save-dev @browserstack/mobilewright

2. Set your credentials

Find your username and access key in the BrowserStack account settings and export them:

export BROWSERSTACK_USERNAME=...
export BROWSERSTACK_ACCESS_KEY=...

3. Set the driver

// mobilewright.config.ts
import { defineConfig } from 'mobilewright';
import { browserStackDriver } from '@browserstack/mobilewright';

export default defineConfig({
testDir: './tests',
bundleId: 'com.example.app',
driver: browserStackDriver({
app: 'bs://<app-id>', // or a local .apk/.ipa path, or an https:// url — uploaded for you
project: 'My project',
}),
projects: [
{ name: 'android', use: { platform: 'android', deviceName: /Google Pixel 8\b/ } },
{ name: 'ios', use: { platform: 'ios', deviceType: 'real', osVersion: '>=17 <19' } },
],
});

Device selection uses the standard config fields: deviceName (regex), osVersion (range expressions like ">=17 <19"), and deviceType (App Automate is always real). The app falls back to the BROWSERSTACK_APP env var when app is omitted.

Session names and statuses are automatic: at run end every App Automate session is named after the tests it ran, marked passed or failed, and its dashboard link is printed.

Switching between a local device and BrowserStack

Keep one config and pick the driver by environment: local (mobilecli) by default, BrowserStack when credentials are present.

import { defineConfig, type MobilewrightConfig } from 'mobilewright';
import { browserStackDriver } from '@browserstack/mobilewright';

const config: MobilewrightConfig = { /* ...your existing config... */ };

if (process.env.BROWSERSTACK_USERNAME) {
config.driver = browserStackDriver({ app: './build/app.apk' });
}

export default defineConfig(config);
npx mobilewright test # local device
BROWSERSTACK_USERNAME=... BROWSERSTACK_ACCESS_KEY=... \
npx mobilewright test # the same suite on App Automate

Local .apk/.ipa paths are uploaded automatically, once per run.

Learn more

BrowserStack Local, geolocation and network simulation, camera and biometric injection, and other App Automate features are documented in the @browserstack/mobilewright package on npm.