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.
These features are available via $.platform.mobile and work on both Android and iOS:
Permission Handling
Permission dialog handling APIs:
Android-Specific Features
These features are available via $.platform.android:
Feature Status API Reference Press back ✅ pressBack Double press recent apps ✅ pressDoubleRecentApps Tap with Android selector ✅ tap Double tap ✅ doubleTap Tap at coordinate ✅ tapAt Enter text ✅ enterText Enter text by index ✅ enterTextByIndex Swipe ✅ swipe Swipe back ✅ swipeBack Pull to refresh ✅ pullToRefresh Enable location service ✅ enableLocation Disable location service ✅ disableLocation Open platform app ✅ openPlatformApp Get native views ✅ getNativeViews Wait until visible ✅ waitUntilVisible 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:
Feature Status API Reference Tap with iOS selector ✅ tap Double tap ✅ doubleTap Tap at coordinate ✅ tapAt Enter text ✅ enterText Enter text by index ✅ enterTextByIndex Swipe ✅ swipe Swipe back ✅ swipeBack Pull to refresh ✅ pullToRefresh Close heads-up notification ✅ closeHeadsUpNotification Open platform app ✅ openPlatformApp Get native views ✅ getNativeViews Wait until visible ✅ waitUntilVisible Interact with WebView ✅ Works 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:
Feature Status API Reference Tap ✅ tap Enter text ✅ enterText Scroll to element ✅ scrollTo Enable dark mode ✅ enableDarkMode Disable dark mode ✅ disableDarkMode Grant permissions ✅ grantPermissions Clear permissions ✅ clearPermissions Add cookie ✅ addCookie Clear cookies ✅ clearCookies Accept dialog ✅ acceptNextDialog Dismiss dialog ✅ dismissNextDialog Press key ✅ pressKey Press key combo ✅ pressKeyCombo Go back ✅ goBack Go forward ✅ goForward Get clipboard ✅ getClipboard Set clipboard ✅ setClipboard Upload file ✅ uploadFile Verify file downloads ✅ verifyFileDownloads Resize window ✅ resizeWindow Work with iframes ✅ All 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
Common Use Cases
Permissions
Device Settings
Notifications
Native UI
Use Case Android iOS Web Camera permission ✅ ✅ ✅ Location permission ✅ ✅ ✅ Notification permission ✅ ✅ ✅ Microphone permission ✅ ✅ ✅ Select location accuracy ✅ ✅ ❌ One-time permissions ✅ (API 30+) ✅ ❌
Use Case Android iOS Web Toggle Wi-Fi ✅ ✅ ❌ Toggle cellular ✅ ✅ ❌ Toggle Bluetooth ✅ (API 31+) ✅ ❌ Toggle airplane mode ✅ ✅ ❌ Toggle dark mode ✅ ✅ ✅ Toggle location service ✅ ❌ ❌ Set mock location ✅ (emulator) ✅ ❌
Use Case Android iOS Web Open notification shade ✅ ✅ ❌ Tap notification ✅ ✅ ❌ Get notification content ✅ ✅ ❌ Close notification shade ✅ ✅ ❌ Close heads-up notification ❌ ✅ ❌
Use Case Android iOS Web Tap native button ✅ ✅ ✅ Enter text ✅ ✅ ✅ Swipe gestures ✅ ✅ ❌ Double tap ✅ ✅ ❌ Interact with WebView ⚠️ ✅ N/A Work with iframes ❌ ❌ ✅
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:
Check the GitHub issues
Search for existing reports
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