Files
mqtt-explorer/MOBILE_TESTING.md

181 lines
4.9 KiB
Markdown

# Mobile Testing Guide
This document describes how to run and debug mobile UI tests for MQTT Explorer.
## Overview
The mobile tests simulate MQTT Explorer running in a mobile browser (Google Pixel 6 viewport: 412x914px) and generate demo videos showing the mobile user experience.
## Prerequisites
### System Dependencies
```bash
sudo apt-get install -y ffmpeg tmux xvfb x11vnc mosquitto
```
### Node Dependencies
```bash
yarn install
npx playwright install --with-deps chromium
```
## Running Mobile Tests
### 1. Build the Application
```bash
yarn build:server # For browser mode
```
### 2. Run Tests
```bash
./scripts/uiTestsMobile.sh
```
This will:
- Start Xvfb (virtual framebuffer)
- Start mosquitto MQTT broker
- Start MQTT Explorer server in browser mode
- Run Playwright tests with mobile viewport
- Record video of the test session
### 3. Post-Process Video
```bash
./scripts/prepareVideoMobile.sh
```
This converts the raw video to MP4 and GIF formats and creates individual segments for each test scene.
## Output Files
- `ui-test-mobile.mp4` - Full mobile test video (MP4)
- `ui-test-mobile.gif` - Full mobile test video (GIF)
- `segment-mobile-*.gif` - Individual scene segments
- `scenes-mobile.json` - Scene timing metadata
All video files are automatically excluded from git (see `.gitignore`).
## Debugging
### View Test in VNC
During test execution, you can connect with VNC to watch in real-time:
```bash
# Password: bierbier
vncviewer localhost:5900
```
### Common Issues
#### 1. Playwright Browsers Not Installed
**Error:** `Executable doesn't exist at .../chromium_headless_shell-1200/chrome-headless-shell`
**Solution:**
```bash
npx playwright install --with-deps chromium
```
#### 2. Video Encoding Fails
**Error:** `height not divisible by 2`
**Solution:** Ensure viewport height is even. Mobile viewport is set to 412x914 (not 915).
#### 3. Elements Outside Viewport
**Error:** `element is outside of the viewport`
**Solution:** The fix adds `scrollIntoViewIfNeeded()` before clicking elements. For modal/dialog elements that intercept clicks, use `force: true`.
#### 4. MQTT Broker Already Running
**Error:** `Address already in use` on port 1883
**Solution:** Kill existing mosquitto process:
```bash
pkill mosquitto
```
## Mobile UI Enhancements
The tests revealed several mobile UI improvements that were implemented:
### 1. Connection Dialog Responsiveness
Added responsive CSS to `ConnectionSetup.tsx`:
- Mobile viewports use 95vw width and 85vh height
- Enabled scrolling on the right panel
- Hide profile list on mobile to save space
### 2. Click Handling
Enhanced `clickOn` helper in `util/index.ts`:
- Added `scrollIntoViewIfNeeded()` to ensure elements are in viewport
- Support for `force: true` to bypass overlay elements
### 3. Tree Node Expansion
Updated `expandTopic` helper:
- Use `force: true` for tree clicks to bypass accordion overlays
- Better handling of nested topic expansion
## Test Scenes
The mobile demo includes these scenes:
1. **mobile_intro** - Introduction screen
2. **mobile_connect** - Connect to MQTT broker
3. **mobile_browse_topics** - Browse topic tree
4. **mobile_search** - Search and filter topics
5. **mobile_view_message** - View message details
6. **mobile_json_view** - JSON formatting display
7. **mobile_clipboard** - Copy operations
8. **mobile_plots** - Numeric data visualization
9. **mobile_menu** - Settings and menu
10. **mobile_end** - Conclusion screen
## CI Integration
Mobile tests run in the `demo-video-mobile` job in `.github/workflows/tests.yml`:
```yaml
demo-video-mobile:
runs-on: ubuntu-latest
container:
image: ghcr.io/thomasnordquist/mqtt-explorer-ui-tests:latest
steps:
- name: Generate Mobile Demo Video
run: ./scripts/uiTestsMobile.sh
- name: Post-processing
run: ./scripts/prepareVideoMobile.sh
```
Videos are uploaded to S3 and linked in PR comments.
## Technical Notes
### Viewport Configuration
- **Width:** 412px (Pixel 6)
- **Height:** 914px (must be even for h264 encoding)
- **Device Scale Factor:** 2.625
- **Mobile Mode:** Enabled with touch events
### Video Recording
- Raw video: YUV420P format
- Frame rate: 20 fps
- Recording tool: ffmpeg via tmux
### Post-Processing
- MP4 encoding: h264 codec
- GIF palette: 256 colors optimized per segment
- Segment creation: Based on scene timing in `scenes-mobile.json`
## Future Improvements
Potential areas for enhancement:
1. **Touch Gestures** - Add swipe and pinch interactions
2. **Performance** - Optimize for slower mobile networks
3. **Accessibility** - Larger touch targets, better contrast
4. **PWA Support** - Add manifest for "add to home screen"
5. **Orientation** - Test landscape mode
## References
- [MOBILE_COMPATIBILITY.md](./MOBILE_COMPATIBILITY.md) - Mobile compatibility strategy
- [Playwright Device Emulation](https://playwright.dev/docs/emulation)
- [Material-UI Responsive Design](https://mui.com/material-ui/customization/breakpoints/)