Skip to main content

Changelog

[0.0.44] (2026-06-12)

  • Feat: add activity to LaunchOptions (#182)
  • Feat(driver-mobilenext): upload test report by default unless uploadReport is off (#188)
  • Feat(driver-mobilenext): log periodic progress during app upload to S3 (#187)

[0.0.43] (2026-06-12)

  • Feat: add device.screenSize() returning width, height, scale (#179)
  • Feat: expose doubleTap(), longPress(), gesture() on Screen (#178)
  • Feat: add filter(), and(), or() to Locator (#177)
  • Fix: added missing webview types (#183)

[0.0.42] (2026-06-09)

  • Feat: adding Playwright webview support with getByWebView() locator (#172)
  • Feat: test result upload to mobilenext.ai (#147)
  • Feat: Playwright-idiomatic timeout configuration (#155)
  • Feat: collect code snippets from each test step for mobilenext report (#157)
  • Feat: additional debug logs around mobilenext test report upload (#161)

[0.0.41] (2026-05-26)

  • Refactor: rename mobile-use driver to mobilenext (#146)
  • Chore(driver-mobilecli): update mobilecli to fix websocket 1006 errors (#150)

[0.0.39] (2026-05-21)

  • Feat: add test step instrumentation for HTML reporter (#144)
  • Feat: add Dockerfile for mobilewright image, multi-arch for arm64 and amd64 (#143)
  • Fix(locator): isVisible() no longer swallows driver/session errors — only returns false for element-not-found failures, rethrows all other errors (#138), thanks to @JustasMonkev

[0.0.38] (2026-05-17)

  • Fix(ios): call getForegroundApp() before launchApp() in mobilecli driver to ensure DeviceKit is running first, preventing a race where its startup minimizes the newly-launched app (#89)
  • Fix(android): using instruments to get view tree, solves bug when constant UI change would fail "uiautomator dump" (fix is in mobilecli 0.3.74)
  • General: skip redundant mobilecli devices shell-outs in connect() and installApp() when device type is already known, reducing test startup time by ~4s
  • General: break early if installApps points to non-zip containers, before allocating devices
  • General: added plenty of verbose logs when DEBUG=mw:*

[0.0.37] (2026-05-16)

  • Feat: add installApps to per-project overrides (#133)
  • Feat: export HardwareButton from @mobilewright/core and add LOCK button (#132)
  • Fix: use Number.NaN and String.raw in tests (#93), thanks to @khanhdodang

[0.0.36] (2026-05-16)

  • Feat: add toHaveCount and toBeEmpty assertions (#122), thanks to @alexC2K
  • Feat: add device info annotations to test report (#125)
  • Feat(test): attach accessibility tree on test failure via saveTreeOnFailure (#111), thanks to @farhanlabib
  • Feat: add eslint with @typescript-eslint and @stylistic rules (#127)
  • Fix(driver): reject .ipa installs on iOS simulators with a clear error (#74), thanks to @krismuhi
  • Fix: only catch LocatorError in expect assertions, rethrow unexpected errors (#126)
  • Fix: respect autoAppLaunch config option in test fixture (#110), thanks to @farhanlabib

[0.0.35] (2026-05-12)

  • Fix(android): updated mobilecli to 0.3.73 to fix missing elements that had non-null resource-id (#120)

[0.0.34] (2026-05-12)

  • Feat(locator): locator.exists() is now available — returns true if the element is present in the view tree
  • Fix: --config flag is now correctly honored in fixtures and device-pool setup (#109)
  • Fix(android): moved away from monkey to run apps, fixes apks compiled with 'test' flag

[0.0.33] (2026-05-07)

  • Fix(android): warn and continue when foreground app check fails on launch instead of throwing error, thanks @farhanlabib (#102)

[0.0.32] (2026-05-05)

  • Fix: updated mobilecli to fix 'SYS_KEYS has no physical keys but with factor 2.0%' error on certain Android devices

[0.0.31] (2026-05-04)

  • Feat: screen.getByPlaceholder() is now available (#84)
  • Feat: launchApp() now waits for the app to reach the foreground before continuing; pass noWaitAfter: true to skip (#80)
  • Feat: Add anonymous telemetry for test, doctor, and init commands - see README for opt-out (#79)
  • Feat: init example test template now includes a device param and doc comments (#86)
  • Fix: mobilewright --version now reads from package.json instead of the hardcoded '0.0.1' (#78)

[0.0.30] (2026-05-01)

  • Fix(config): loadConfig() now uses pathToFileURL for dynamic import — fixes config not loading on Windows
  • Fix(doctor): Suggest Microsoft.OpenJDK.17 instead of Azul Zulu for Windows JDK installs
  • Feat(test): swipe on a locator — e.g. swipe left on a list item
  • Docs: Added Windows instructions for enabling debug logs ($env:DEBUG / set DEBUG)

[0.0.29] (2026-04-30)

  • General: mobilecli agent is automatically installed on simulators and emulators at connect time — no manual mobilewright install step needed
  • Fix(cli): npx mobilewright init now works correctly — templates were missing from the published dist
  • Fix(driver-mobilecli): Windows 11 is now supported — win32-x64 resolves to mobilecli-windows-amd64.exe

[0.0.28] (2026-04-29)

  • Fix(test): Stream cloud recordings to disk instead of loading into memory — safe for large video files
  • Fix(test): Video attachments now work with the cloud drivers
  • Fix(cli): Fixed HTML report branding so it now applies when the html reporter is configured

[0.0.27] (2026-04-28)

  • General: New worker/device-pool architecture: workers acquire devices from a shared pool instead of each worker owning a dedicated device
  • General: Track installed apps per slot to skip re-install when the same worker reuses a device
  • General: Per-allocation timeouts via AbortSignal; pool shutdown drains waiters and releases all slots
  • General: Stack traces from expect() failures now omit mobilewright frames — set MWDEBUGIMPL=1 to see them
  • General: Upgrade mobilecli to 0.3.67
  • CLI: Add --shard option to the test command for multi-host sharding of tests
  • CLI: Add mobilewright merge-reports command, needed for sharding
  • Fix: Fix 'text' field from viewTree to fetch from dump's 'text' instead of 'label', thanks to emor
  • Fix(allocator-factory): Throw on unknown driver type instead of silently falling back to mobile-use
  • Fix(driver-mobile-use): Only call fleet.release on disconnect when this instance owns the lease
  • Fix(device-pool): Re-queue waiters on NoDeviceAvailableError; treat NaN --workers as 1
  • Fix(rpc-client): Close WebSocket nicely with code 1000 and await the close handshake on disconnect()

[0.0.26] (2026-04-22)

  • Fix(driver-mobile-use): Device allocation now correctly waits for provisioning to complete
  • Fix(driver-mobile-use): devices.list response properly unwrapped from { devices: [...] } envelope
  • Fix(driver-mobile-use): installApp upload now includes duplex: 'half' required by Node.js for stream bodies

[0.0.25] (2026-04-22)

  • General: Add installApps config option to install apps before launching
  • General: Add autoAppLaunch config option to skip automatic app launch (default: true)
  • Fix: loadConfig() now unwraps double-wrapped default exports caused by Playwright's transpiler
  • Fix(driver-mobile-use): Handle allocating state from mobile-use.com, wait until device is ready
  • Fix(driver-mobile-use): installApp uploads file via uploads.create

[0.0.24] (2026-04-22)

  • General: Add @mobilewright/driver-mobile-use package for mobile-use.com cloud device support
  • General: Refactor ConnectionConfig — replace required deviceId with required platform, optional deviceId, deviceName, osVersion
  • General: Move device resolution into drivers — mobilecli resolves locally
  • General: Add missing scale field to getScreenSize response
  • General: Default workers: 1 in defineConfig — mobile tests target a single device, changeable for cloud
  • General: Add debug logging to both drivers (DEBUG=mw:* to enable)
  • General: Improve WebSocket error messages with close code and reason
  • General: Add toMatch, toBeInstanceOf, toBeDefined, toBeGreaterThanOrEqual, toBeLessThanOrEqual, toBeNaN, toContainEqual, toHaveLength, toHaveProperty, toMatchObject, toStrictEqual, toThrow assertions
  • General: Handle both flat array and { apps: [...] } response in listApps, thanks to emor
  • Docs: Add troubleshooting guide with DEBUG=mw:* and mobilewright doctor usage
  • Tests: Add cross-driver integration test suite (e2e/)
  • Fix: LaunchOptions.locale renamed to locales (to match mobilecli server protocol)
  • Fix: gesture() now sends actions param to match OpenRPC spec (was incorrectly sending pointers)
  • Fix: startRecording no longer drops timeLimit: 0
  • Fix: disconnect() now properly awaits WebSocket close

[0.0.22] (2026-04-16)

  • General: Add mobilewright install command to install agents on devices (#29)
  • General: Switch listDevices() to use mobilecli cli instead of launching server (#29)
  • General: Upgrade mobilecli to mobilecli@0.3.66 (#29)
  • Doctor: Show mobilecli version and detected devices with agent install status (#30)
  • Doctor: Show booted iOS simulators with UDIDs (#30)
  • Doctor: Remove Homebrew check (#30)
  • CI: Add explicit permissions to docs build workflow (#28)

[0.0.21] (2026-04-14)

  • General: Support plain value assertions in expect()toBe, toEqual, toBeTruthy, toBeFalsy, toContain, toMatch, and more (#17)
  • CI: Add explicit permissions and npm audit to CI workflow (#19)
  • CI: Use npm ci instead of npm install and add CODEOWNERS (#20)

[0.0.20] (2026-04-13)

  • General: Add count(), all(), first(), last(), nth() to Locator for collection operations (#10)
  • General: Add screen.goBack() convenience method for Android (#11)
  • General: Add toBeHidden() assertion (#11)
  • General: Rename toHaveFocus() to toBeFocused() for naming consistency (#11)
  • General: Copy README into mobilewright package before npm publish (#14)

[0.0.19] (2026-04-13)

  • General: Add screen.viewTree() to dump the UI view hierarchy (#12)
  • General: Add mobilewright screenshot CLI command (#9)
  • General: Update mobilecli to 0.1.64

[0.0.18] (2026-04-02)

  • General: Fix mobilecli binary resolution using createRequire to work reliably from npx caches, global installs, and local node_modules (#7)

[0.0.17] (2026-04-02)

  • General: Add mobilewright init command to scaffold config and example test (#2)
  • General: Improve html test report template with click-to-fullscreen screenshots (#6)
  • General: Add getByPlaceholder locator for matching elements by placeholder text (#4)
  • General: Add toBeDisabled, toBeSelected, toHaveFocus, toBeChecked, and toHaveValue assertions (#4)
  • General: Add isSelected, isFocused, isChecked, and getValue locator queries (#4)
  • General: Support testId matching against full Android resourceId for Appium migration (#4)
  • General: Fix swipe command to convert direction to start/end coordinates for mobilecli RPC (#5)
  • Android: Map React Native view types (ReactViewGroup, ReactTextView, ReactEditText, ReactImageView, ReactScrollView) to semantic roles (#4)
  • Android: Parse isChecked state from UI hierarchy (#4)