Mobile Testing
Quick Mobile Checklist:
- Test on latest iOS + Android flagship devices
- Test offline mode and network transitions
- Verify push notifications work
- Test gesture interactions (swipe, pinch)
- Check permissions flow (camera, location, notifications)
Critical Success Factors:
- Emulators for 80% of testing, real devices for 20% critical paths
- Test on devices your users actually use (analytics)
- Device fragmentation is Android's biggest challenge
Quick Reference Card
When to Use
- Native app development (iOS/Android)
- Hybrid apps (React Native, Flutter)
- Mobile web / PWAs
- App store submission preparation
iOS vs Android Differences
| Aspect |
iOS |
Android |
| OS Versions |
2-3 supported |
10+ in use |
| Devices |
~40 models |
1000+ variants |
| Back Button |
Gesture/nav |
Hardware/software |
| Permissions |
Single prompt |
Runtime granular |
| App Store |
Strict review |
Google Play + sideload |
Device Coverage Tiers
| Tier |
Coverage |
Devices |
| Tier 1 |
60% users |
iPhone 15, Galaxy S24, iPad |
| Tier 2 |
30% users |
iPhone 14/13, Pixel 8 |
| Tier 3 |
10% users |
Older devices, other manufacturers |
Mobile-Specific Scenarios
// Offline mode testing
test('app works offline', async () => {
await driver.toggleAirplaneMode();
await driver.findElement('view-saved-items').click();
const items = await driver.findElements('saved-item');
expect(items.length).toBeGreaterThan(0);
const banner = await driver.findElement('offline-banner');
expect(banner.getText()).toContain('No internet');
await driver.toggleAirplaneMode(); // Restore
});
// Location testing
test('location-based features', async () => {
await driver.setGeoLocation({
latitude: 37.7749,
longitude: -122.4194,
altitude: 0
});
const stores = await driver.findElement('stores-list');
expect(stores.getText()).toContain('San Francisco');
});
// Permission testing (Android)
test('camera permission flow', async () => {
await driver.findElement('take-photo').click();
// Handle permission dialog
await driver.findElement(
'com.android.packageinstaller:id/permission_allow_button'
).click();
expect(await driver.findElement('camera-view')).toBeDefined();
});
Agent-Driven Mobile Testing
// Cross-platform mobile testing
await Task("Mobile Test Suite", {
platforms: ['iOS', 'Android'],
deviceTiers: [1, 2],
tests: 'regression-suite',
parallelDevices: 5,
deviceFarm: 'browserstack'
}, "qe-test-executor");
// Device farm integration
await Task("Device Farm Execution", {
service: 'browserstack',
devices: [
'iPhone 15 - iOS 17',
'Samsung Galaxy S24 - Android 14'
],
recordVideo: true,
captureNetworkLogs: true
}, "qe-test-executor");
Agent Coordination Hints
Memory Namespace
aqe/mobile-testing/
├── device-matrix/* - Device coverage strategy
├── platform-tests/* - iOS/Android specific tests
├── gesture-library/* - Reusable gesture patterns
└── performance/* - Mobile performance metrics
Fleet Coordination
const mobileFleet = await FleetManager.coordinate({
strategy: 'mobile-testing',
agents: [
'qe-test-executor', // Cross-platform execution
'qe-performance-tester', // Mobile performance
'qe-visual-tester' // Screen size validation
],
topology: 'parallel'
});
Related Skills
Remember
Test on real devices for critical flows. Emulators catch 80% of bugs but real devices are needed for actual performance, sensor behavior, and platform quirks.
With Agents: qe-test-executor orchestrates testing across device farms, manages platform differences, and tests 10+ devices in parallel.
1---2name: mobile-testing3description: Comprehensive mobile testing for iOS and Android platforms including gestures, sensors, permissions, device fragmentation, and performance. Use when testing native apps, hybrid apps, or mobile web, ensuring quality across 1000+ device variants.4---5
6# Mobile Testing
7
8<default_to_action>
9When testing mobile applications:
101. DEFINE device coverage matrix (Tier 1: 60%, Tier 2: 30%, Tier 3: 10%)
112. TEST platform differences (iOS ≠ Android: back button, permissions, UI)
123. VALIDATE touch gestures (tap, swipe, pinch, long-press)
134. TEST mobile-specific scenarios (offline, low battery, interruptions)
145. USE real devices for critical paths, emulators for fast feedback
15
16**Quick Mobile Checklist:**
17- Test on latest iOS + Android flagship devices
18- Test offline mode and network transitions
19- Verify push notifications work
20- Test gesture interactions (swipe, pinch)
21- Check permissions flow (camera, location, notifications)
22
23**Critical Success Factors:**
24- Emulators for 80% of testing, real devices for 20% critical paths
25- Test on devices your users actually use (analytics)
26- Device fragmentation is Android's biggest challenge
27</default_to_action>
28
29## Quick Reference Card
30
31### When to Use
32- Native app development (iOS/Android)
33- Hybrid apps (React Native, Flutter)
34- Mobile web / PWAs
35- App store submission preparation
36
37### iOS vs Android Differences
38| Aspect | iOS | Android |
39|--------|-----|---------|
40| OS Versions | 2-3 supported | 10+ in use |
41| Devices | ~40 models | 1000+ variants |
42| Back Button | Gesture/nav | Hardware/software |
43| Permissions | Single prompt | Runtime granular |
44| App Store | Strict review | Google Play + sideload |
45
46### Device Coverage Tiers
47| Tier | Coverage | Devices |
48|------|----------|---------|
49| **Tier 1** | 60% users | iPhone 15, Galaxy S24, iPad |
50| **Tier 2** | 30% users | iPhone 14/13, Pixel 8 |
51| **Tier 3** | 10% users | Older devices, other manufacturers |
52
53---
54
55## Mobile-Specific Scenarios
56
57```javascript
58// Offline mode testing
59test('app works offline', async () => {
60 await driver.toggleAirplaneMode();
61
62 await driver.findElement('view-saved-items').click();
63 const items = await driver.findElements('saved-item');
64 expect(items.length).toBeGreaterThan(0);
65
66 const banner = await driver.findElement('offline-banner');
67 expect(banner.getText()).toContain('No internet');
68
69 await driver.toggleAirplaneMode(); // Restore
70});
71
72// Location testing
73test('location-based features', async () => {
74 await driver.setGeoLocation({
75 latitude: 37.7749,
76 longitude: -122.4194,
77 altitude: 0
78 });
79
80 const stores = await driver.findElement('stores-list');
81 expect(stores.getText()).toContain('San Francisco');
82});
83
84// Permission testing (Android)
85test('camera permission flow', async () => {
86 await driver.findElement('take-photo').click();
87
88 // Handle permission dialog
89 await driver.findElement(
90 'com.android.packageinstaller:id/permission_allow_button'
91 ).click();
92
93 expect(await driver.findElement('camera-view')).toBeDefined();
94});
95```
96
97---
98
99## Agent-Driven Mobile Testing
100
101```typescript
102// Cross-platform mobile testing
103await Task("Mobile Test Suite", {
104 platforms: ['iOS', 'Android'],
105 deviceTiers: [1, 2],
106 tests: 'regression-suite',
107 parallelDevices: 5,
108 deviceFarm: 'browserstack'
109}, "qe-test-executor");
110
111// Device farm integration
112await Task("Device Farm Execution", {
113 service: 'browserstack',
114 devices: [
115 'iPhone 15 - iOS 17',
116 'Samsung Galaxy S24 - Android 14'
117 ],
118 recordVideo: true,
119 captureNetworkLogs: true
120}, "qe-test-executor");
121```
122
123---
124
125## Agent Coordination Hints
126
127### Memory Namespace
128```
129aqe/mobile-testing/
130├── device-matrix/* - Device coverage strategy
131├── platform-tests/* - iOS/Android specific tests
132├── gesture-library/* - Reusable gesture patterns
133└── performance/* - Mobile performance metrics
134```
135
136### Fleet Coordination
137```typescript
138const mobileFleet = await FleetManager.coordinate({
139 strategy: 'mobile-testing',
140 agents: [
141 'qe-test-executor', // Cross-platform execution
142 'qe-performance-tester', // Mobile performance
143 'qe-visual-tester' // Screen size validation
144 ],
145 topology: 'parallel'
146});
147```
148
149---
150
151## Related Skills
152- [accessibility-testing](../accessibility-testing/) - VoiceOver, TalkBack
153- [performance-testing](../performance-testing/) - Mobile performance
154- [compatibility-testing](../compatibility-testing/) - Device compatibility
155
156---
157
158## Remember
159
160**Test on real devices for critical flows.** Emulators catch 80% of bugs but real devices are needed for actual performance, sensor behavior, and platform quirks.
161
162**With Agents:** `qe-test-executor` orchestrates testing across device farms, manages platform differences, and tests 10+ devices in parallel.