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