home / skills / proffesor-for-testing / agentic-qe / mobile-testing

This skill enables comprehensive mobile testing across iOS and Android, covering gestures, permissions, offline scenarios, and device fragmentation to ensure

npx playbooks add skill proffesor-for-testing/agentic-qe --skill mobile-testing

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
6.2 KB
---
name: mobile-testing
description: "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."
category: specialized-testing
priority: high
tokenEstimate: 1000
agents: [qe-test-executor, qe-performance-tester, qe-visual-tester]
implementation_status: optimized
optimization_version: 1.0
last_optimized: 2025-12-02
dependencies: []
quick_reference_card: true
tags: [mobile, ios, android, appium, gestures, device-fragmentation, sensors]
---

# Mobile Testing

<default_to_action>
When testing mobile applications:
1. DEFINE device coverage matrix (Tier 1: 60%, Tier 2: 30%, Tier 3: 10%)
2. TEST platform differences (iOS ≠ Android: back button, permissions, UI)
3. VALIDATE touch gestures (tap, swipe, pinch, long-press)
4. TEST mobile-specific scenarios (offline, low battery, interruptions)
5. USE real devices for critical paths, emulators for fast feedback

**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
</default_to_action>

## 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 Performance Goals
| Metric | Target |
|--------|--------|
| App launch | < 2 seconds |
| Screen transition | < 300ms |
| Frame rate | 60 FPS |
| Battery drain | < 5%/hour background |

---

## Touch Gesture Testing

```javascript
// Appium gesture examples
// Tap
await driver.touchAction({ action: 'tap', x: 100, y: 200 });

// Swipe (scroll down)
await driver.touchAction([
  { action: 'press', x: 200, y: 400 },
  { action: 'moveTo', x: 200, y: 100 },
  { action: 'release' }
]);

// Pinch to zoom
const finger1 = [
  { action: 'press', x: 100, y: 200 },
  { action: 'moveTo', x: 50, y: 150 },
  { action: 'release' }
];
const finger2 = [
  { action: 'press', x: 200, y: 200 },
  { action: 'moveTo', x: 250, y: 250 },
  { action: 'release' }
];
await driver.multiTouchAction([finger1, finger2]);

// Long press
await driver.touchAction({
  action: 'longPress',
  x: 100, y: 200,
  duration: 2000
});
```

---

## Mobile-Specific Scenarios

```javascript
// 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

```typescript
// 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
```typescript
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
- [accessibility-testing](../accessibility-testing/) - VoiceOver, TalkBack
- [performance-testing](../performance-testing/) - Mobile performance
- [compatibility-testing](../compatibility-testing/) - Device compatibility

---

## Remember

**Mobile is not a smaller desktop - it's a different platform.** 60%+ of web traffic is mobile. Device fragmentation (1000+ Android devices), touch gestures, sensors, permissions, offline scenarios - all require specific testing.

**Test on real devices for critical flows.** Emulators catch 80% of bugs but real devices 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. Reduces mobile testing from days to hours.

Overview

This skill provides comprehensive mobile testing for iOS and Android, covering gestures, sensors, permissions, device fragmentation, and performance. It orchestrates tests across emulators and real devices, integrates with device farms, and targets critical paths to ensure app quality across 1000+ device variants. Use it to reduce manual effort and accelerate mobile test execution with parallel device runs.

How this skill works

The skill defines a device coverage matrix and executes platform-specific tests (iOS vs Android) with reusable gesture patterns and sensor simulations. It runs regression suites on emulators for fast feedback and on real devices for critical flows, capturing video, network logs, and performance metrics. Agent coordination manages parallel device allocation, device-farm integration, and reporting.

When to use it

  • Validating native apps (iOS, Android) during CI and pre-release
  • Testing hybrid frameworks like React Native or Flutter
  • Verifying mobile web/PWA behavior and responsiveness
  • Preparing for app store submissions and review
  • Investigating device-specific crashes or performance regressions

Best practices

  • Define a device coverage matrix (Tier 1: 60%, Tier 2: 30%, Tier 3: 10%) based on user analytics
  • Use emulators for ~80% of tests and real devices for critical 20% paths
  • Automate touch gestures (tap, swipe, pinch, long-press) and multi-touch flows
  • Include mobile-specific scenarios: offline, interruptions, low battery, sensors
  • Capture video, network logs, and performance metrics during device-farm runs

Example use cases

  • Run a cross-platform regression suite across iPhone 15 and Galaxy S24 in parallel
  • Validate push notifications, permissions flows, and camera access on Android and iOS
  • Simulate offline mode and network transitions for an app with cached content
  • Measure launch time, screen transition latency, and frame rate on real devices
  • Execute device-farm runs with recorded video and network logs for postmortem

FAQ

How do I choose which devices to test?

Prioritize devices from your analytics: Tier 1 covers top 60% of users (latest flagships), Tier 2 covers next 30%, Tier 3 covers the remaining 10% and legacy devices.

When should I use emulators vs real devices?

Use emulators for fast, frequent feedback and broad automation. Use real devices for critical user flows, sensor behavior, performance, and platform-specific quirks.