[2026-04-28] Rename apple-browsers rules .mdc → .md for Obsidian compatibility
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
---
|
||||
source: ~/DuckDuckGo/apple-browsers.git/main/.cursor/rules/maestro-device-selection.mdc
|
||||
confidence: 0.9
|
||||
namespace: work
|
||||
last_synced: 2026-04-28
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Maestro Test Device Selection (iPhone/iPad)
|
||||
|
||||
## Overview
|
||||
Maestro tests can run on either iPhone or iPad simulators based on tags in the test YAML files. This allows you to test iPad-specific UI layouts and features while maintaining a single test suite.
|
||||
|
||||
## How It Works
|
||||
- **Default**: Tests run on iPhone 16 with iOS 18.2
|
||||
- **iPad Tests**: Add `ipad` tag to run on iPad 10th generation with iOS 18.2
|
||||
|
||||
## Usage
|
||||
|
||||
### For Individual iPad Tests
|
||||
Add the `ipad` tag to your test file:
|
||||
|
||||
```yaml
|
||||
appId: com.duckduckgo.mobile.ios
|
||||
tags:
|
||||
- ipad
|
||||
- your-other-tags
|
||||
name: Your iPad Test
|
||||
|
||||
---
|
||||
# Your test steps here
|
||||
```
|
||||
|
||||
### Running Tests
|
||||
The same commands work as before:
|
||||
```bash
|
||||
# Run a single test (device selected based on tags)
|
||||
./run_ui_tests.sh path/to/test.yaml
|
||||
|
||||
# Run all tests in a folder (each test runs on appropriate device)
|
||||
./run_ui_tests.sh path/to/tests/
|
||||
```
|
||||
|
||||
## Implementation Details
|
||||
|
||||
### Setup Phase (`setup_ui_tests.sh`)
|
||||
1. Creates both iPhone and iPad simulators upfront
|
||||
2. Boots and configures both simulators with English locale
|
||||
3. Installs the app on both devices
|
||||
4. Saves both simulator UUIDs for test execution
|
||||
|
||||
### Test Execution (`run_ui_tests.sh`)
|
||||
1. Opens Simulator app if not already running
|
||||
2. Checks each test file for the `ipad` tag using grep
|
||||
3. Boots the required simulator if it's not already running
|
||||
4. Uses the pre-created simulator based on the tag
|
||||
5. Reinstalls the app before each test for clean state
|
||||
6. Reports which device type was used in test results
|
||||
|
||||
## Simulator Specifications
|
||||
- **iPhone**: iPhone 16, iOS 18.2
|
||||
- **iPad**: iPad (10th generation), iOS 18.2
|
||||
|
||||
Both simulators are configured with:
|
||||
- Language: English (en)
|
||||
- Locale: en_US
|
||||
- Name suffix: "(maestro)" for easy identification
|
||||
|
||||
## Example Test Structure
|
||||
```yaml
|
||||
appId: com.duckduckgo.mobile.ios
|
||||
tags:
|
||||
- ipad
|
||||
- duckplayer
|
||||
name: DuckPlayer iPad Layout Test
|
||||
|
||||
---
|
||||
# This test will automatically run on iPad simulator
|
||||
|
||||
- runFlow:
|
||||
file: ../shared/setup.yaml
|
||||
|
||||
# Test iPad-specific UI elements
|
||||
- assertVisible: "Split View" # Example iPad-specific element
|
||||
```
|
||||
|
||||
## Technical Implementation
|
||||
|
||||
### Tag Detection Function
|
||||
The script uses awk to detect the 'ipad' tag:
|
||||
```bash
|
||||
check_for_ipad_tag() {
|
||||
local test_file=$1
|
||||
|
||||
# Check if the test has an 'ipad' tag
|
||||
if awk '/^tags:/{flag=1} flag && /^[^-]/{exit} flag && /- ipad/{found=1; exit} END{exit !found}' "$test_file" 2>/dev/null; then
|
||||
echo "true"
|
||||
else
|
||||
echo "false"
|
||||
fi
|
||||
}
|
||||
```
|
||||
|
||||
### Pre-created Simulators
|
||||
Both simulators are created during setup for better performance:
|
||||
```bash
|
||||
# In setup_ui_tests.sh
|
||||
create_or_get_simulator() {
|
||||
local device_name=$1
|
||||
local device_type=$2
|
||||
local simulator_name="$device_name $target_os (maestro)"
|
||||
# Creates simulator if it doesn't exist
|
||||
# Returns simulator UUID
|
||||
}
|
||||
|
||||
# Creates both simulators
|
||||
iphone_uuid=$(create_or_get_simulator "iPhone-16" "iPhone-16")
|
||||
ipad_uuid=$(create_or_get_simulator "iPad-10th-generation" "iPad-10th-generation")
|
||||
```
|
||||
|
||||
### Simulator UUID Storage
|
||||
UUIDs are saved to files for test execution:
|
||||
- iPhone UUID: `DerivedData/device_uuid.txt`
|
||||
- iPad UUID: `DerivedData/device_uuid_ipad.txt`
|
||||
|
||||
## Benefits
|
||||
- **Single Test Suite**: Maintain one set of tests for both device types
|
||||
- **Automatic Selection**: No need to manually switch simulators
|
||||
- **Efficient Testing**: Only creates simulators when needed
|
||||
- **Clear Indication**: Test output shows which device type is being used
|
||||
|
||||
## Future Enhancements
|
||||
- Support for additional iPad models
|
||||
- Different iOS versions per device type
|
||||
- Landscape/portrait orientation configuration
|
||||
- Device-specific timeout adjustments
|
||||
Reference in New Issue
Block a user