Skip to main content
This page documents which native automation features are available on each platform. We strive for high feature parity across platforms, but some platform-specific limitations exist.
macOS support is in alpha and does not have platform automation implemented yet.

Cross-Platform Mobile Features

These features are available via $.platform.mobile and work on both Android and iOS:
FeatureAndroidiOSNotes
Press home
Open app
Open notifications
Close notifications
Open quick settingsiOS: Control Center (not available on simulator)
Open URL
Enable dark mode
Disable dark mode
Enable airplane mode
Disable airplane mode
Enable cellular
Disable cellular
Enable Wi-Fi
Disable Wi-Fi
Enable BluetoothAndroid: Requires API 31+ (Android 12)
Disable BluetoothAndroid: Requires API 31+ (Android 12)
Press volume upiOS: Real devices only (not simulator)
Press volume downiOS: Real devices only (not simulator)
Handle permissionsiOS: Requires English (US) device language
Set mock locationAndroid: Emulator only; iOS: All devices
Get OS version
Check virtual deviceAndroid: May not be 100% accurate
Tap
Double tap
Tap at coordinate
Enter text
Enter text by index
Swipe
Swipe backAndroid: May require gesture navigation
Pull to refresh
Tap notification by index
Tap notification by selector
Get notifications
Take camera photo
Pick image from gallery
Pick multiple images

Permission Handling

Permission dialog handling APIs:
FeatureAndroidiOSNotes
Grant permission when in use
Grant permission only this timeAndroid: API 30+ (Android 11)
Deny permission
Select fine locationPrecise/exact location
Select coarse locationApproximate location
Check permission dialog visible

Android-Specific Features

These features are available via $.platform.android:
FeatureStatusAPI Reference
Press backpressBack
Double press recent appspressDoubleRecentApps
Tap with Android selectortap
Double tapdoubleTap
Tap at coordinatetapAt
Enter textenterText
Enter text by indexenterTextByIndex
Swipeswipe
Swipe backswipeBack
Pull to refreshpullToRefresh
Enable location serviceenableLocation
Disable location servicedisableLocation
Open platform appopenPlatformApp
Get native viewsgetNativeViews
Wait until visiblewaitUntilVisible
Interact with WebView⚠️See GitHub issue #244

Android Selector Properties

AndroidSelector(
  resourceName: String?,        // Resource ID
  text: String?,               // Exact text
  textStartsWith: String?,     // Text prefix
  textContains: String?,       // Text substring
  className: String?,          // Widget class
  contentDescription: String?, // Accessibility label
  contentDescriptionStartsWith: String?,
  contentDescriptionContains: String?,
  isEnabled: bool?,           // Enabled state
  isFocused: bool?,           // Focus state
  applicationPackage: String?, // App package
  instance: int?,             // Which instance (0-based)
)

iOS-Specific Features

These features are available via $.platform.ios:
FeatureStatusAPI Reference
Tap with iOS selectortap
Double tapdoubleTap
Tap at coordinatetapAt
Enter textenterText
Enter text by indexenterTextByIndex
Swipeswipe
Swipe backswipeBack
Pull to refreshpullToRefresh
Close heads-up notificationcloseHeadsUpNotification
Open platform appopenPlatformApp
Get native viewsgetNativeViews
Wait until visiblewaitUntilVisible
Interact with WebViewWorks with Safari and WKWebView

iOS Selector Properties

IOSSelector(
  identifier: String?,         // Accessibility identifier
  text: String?,              // Label text (exact)
  textStartsWith: String?,    // Label prefix
  textContains: String?,      // Label substring
  accessibilityLabel: String?, // Accessibility label
  elementType: IOSElementType?, // Element type
)
When interacting with UI elements in apps other than your app under test, you must provide the app’s bundle ID via the appId parameter.

Web-Specific Features

These features are available via $.platform.web for Flutter Web apps:
FeatureStatusAPI Reference
Taptap
Enter textenterText
Scroll to elementscrollTo
Enable dark modeenableDarkMode
Disable dark modedisableDarkMode
Grant permissionsgrantPermissions
Clear permissionsclearPermissions
Add cookieaddCookie
Clear cookiesclearCookies
Accept dialogacceptNextDialog
Dismiss dialogdismissNextDialog
Press keypressKey
Press key combopressKeyCombo
Go backgoBack
Go forwardgoForward
Get clipboardgetClipboard
Set clipboardsetClipboard
Upload fileuploadFile
Verify file downloadsverifyFileDownloads
Resize windowresizeWindow
Work with iframesAll methods support iframeSelector parameter

Web Selector Properties

WebSelector(
  text: String?,            // Visible text
  cssOrXpath: String?,      // CSS selector or XPath
  testId: String?,          // data-testid attribute
  placeholder: String?,     // Placeholder text
)

Browser Permissions

Supported permission strings for grantPermissions():
  • geolocation
  • notifications
  • clipboard-read
  • clipboard-write
  • camera
  • microphone
  • midi
  • background-sync

Platform Comparison

Common Use Cases

Use CaseAndroidiOSWeb
Camera permission
Location permission
Notification permission
Microphone permission
Select location accuracy
One-time permissions✅ (API 30+)

Legend

  • Fully supported - Feature works as documented
  • ⚠️ Partial support - Feature works with limitations (see notes)
  • Not supported - Feature not available on this platform
  • N/A - Not applicable to this platform

Reporting Issues

If you find that a feature doesn’t work as documented or discover platform-specific bugs:
  1. Check the GitHub issues
  2. Search for existing reports
  3. Create a new issue with:
    • Platform and OS version
    • Device type (real/simulator/emulator)
    • Minimal reproduction code
    • Expected vs actual behavior

Next Steps

Usage Guide

Learn how to use these features in your tests

API Reference

View complete API documentation on pub.dev

Build docs developers (and LLMs) love