qa-skills 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -0
- package/bin/cli.js +42 -0
- package/dist/agents/registry.d.ts +5 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +101 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/types.d.ts +9 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/dependencies.d.ts +21 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +125 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/installer.d.ts +25 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +437 -0
- package/dist/installer.js.map +1 -0
- package/dist/scaffold.d.ts +27 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +182 -0
- package/dist/scaffold.js.map +1 -0
- package/package.json +40 -0
- package/skills/qa-accessibility-test-writer/SKILL.md +127 -0
- package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +349 -0
- package/skills/qa-accessibility-test-writer/references/best-practices.md +184 -0
- package/skills/qa-accessibility-test-writer/references/wcag-tests.md +331 -0
- package/skills/qa-api-contract-curator/SKILL.md +104 -0
- package/skills/qa-api-contract-curator/references/breaking-changes.md +363 -0
- package/skills/qa-api-contract-curator/references/openapi-structure.md +404 -0
- package/skills/qa-browser-data-collector/SKILL.md +132 -0
- package/skills/qa-browser-data-collector/references/data-collection-checklist.md +91 -0
- package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +113 -0
- package/skills/qa-bug-ticket-creator/SKILL.md +148 -0
- package/skills/qa-bug-ticket-creator/references/bug-report-format.md +149 -0
- package/skills/qa-bug-ticket-creator/references/severity-guide.md +81 -0
- package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +39 -0
- package/skills/qa-changelog-analyzer/SKILL.md +134 -0
- package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +138 -0
- package/skills/qa-changelog-analyzer/references/impact-mapping.md +120 -0
- package/skills/qa-clickup-integration/SKILL.md +166 -0
- package/skills/qa-clickup-integration/references/api-patterns.md +102 -0
- package/skills/qa-clickup-integration/references/field-mapping.md +71 -0
- package/skills/qa-codeceptjs-writer/SKILL.md +136 -0
- package/skills/qa-codeceptjs-writer/references/best-practices.md +207 -0
- package/skills/qa-codeceptjs-writer/references/config.md +255 -0
- package/skills/qa-codeceptjs-writer/references/patterns.md +285 -0
- package/skills/qa-coverage-analyzer/SKILL.md +166 -0
- package/skills/qa-coverage-analyzer/references/best-practices.md +142 -0
- package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +155 -0
- package/skills/qa-coverage-analyzer/references/tools.md +204 -0
- package/skills/qa-cypress-writer/SKILL.md +134 -0
- package/skills/qa-cypress-writer/references/assertions.md +121 -0
- package/skills/qa-cypress-writer/references/best-practices.md +82 -0
- package/skills/qa-cypress-writer/references/config.md +121 -0
- package/skills/qa-cypress-writer/references/patterns.md +170 -0
- package/skills/qa-data-factory/SKILL.md +126 -0
- package/skills/qa-data-factory/references/factory-patterns.md +164 -0
- package/skills/qa-data-factory/references/faker-guide.md +131 -0
- package/skills/qa-diagram-generator/SKILL.md +125 -0
- package/skills/qa-diagram-generator/references/c4-model.md +53 -0
- package/skills/qa-diagram-generator/references/charts.md +58 -0
- package/skills/qa-diagram-generator/references/class-diagram.md +85 -0
- package/skills/qa-diagram-generator/references/er-diagram.md +69 -0
- package/skills/qa-diagram-generator/references/flowchart.md +92 -0
- package/skills/qa-diagram-generator/references/from-screenshot.md +45 -0
- package/skills/qa-diagram-generator/references/gantt.md +49 -0
- package/skills/qa-diagram-generator/references/journey.md +50 -0
- package/skills/qa-diagram-generator/references/mindmap.md +75 -0
- package/skills/qa-diagram-generator/references/sequence.md +69 -0
- package/skills/qa-diagram-generator/references/state-diagram.md +56 -0
- package/skills/qa-discovery-interview/SKILL.md +182 -0
- package/skills/qa-discovery-interview/references/completeness-checklist.md +53 -0
- package/skills/qa-discovery-interview/references/conflict-patterns.md +101 -0
- package/skills/qa-discovery-interview/references/qa-categories.md +147 -0
- package/skills/qa-discovery-interview/templates/qa-brief-template.md +168 -0
- package/skills/qa-environment-checker/SKILL.md +142 -0
- package/skills/qa-environment-checker/references/dependency-matrix.md +101 -0
- package/skills/qa-environment-checker/references/health-checks.md +209 -0
- package/skills/qa-environment-checker/templates/env-readiness-template.md +64 -0
- package/skills/qa-flaky-detector/SKILL.md +153 -0
- package/skills/qa-flaky-detector/references/ci-analysis.md +140 -0
- package/skills/qa-flaky-detector/references/flaky-patterns.md +247 -0
- package/skills/qa-github-issues-enhanced/SKILL.md +175 -0
- package/skills/qa-github-issues-enhanced/references/issue-templates.md +425 -0
- package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +130 -0
- package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +188 -0
- package/skills/qa-httpx-writer/SKILL.md +138 -0
- package/skills/qa-httpx-writer/references/assertions.md +195 -0
- package/skills/qa-httpx-writer/references/best-practices.md +140 -0
- package/skills/qa-httpx-writer/references/config.md +212 -0
- package/skills/qa-httpx-writer/references/patterns.md +262 -0
- package/skills/qa-jest-writer/SKILL.md +131 -0
- package/skills/qa-jest-writer/references/assertions.md +125 -0
- package/skills/qa-jest-writer/references/best-practices.md +136 -0
- package/skills/qa-jest-writer/references/config.md +134 -0
- package/skills/qa-jest-writer/references/patterns.md +172 -0
- package/skills/qa-jira-integration/SKILL.md +135 -0
- package/skills/qa-jira-integration/references/api-patterns.md +143 -0
- package/skills/qa-jira-integration/references/field-mapping.md +79 -0
- package/skills/qa-jira-integration/references/xray-integration.md +85 -0
- package/skills/qa-jmeter-writer/SKILL.md +171 -0
- package/skills/qa-jmeter-writer/references/best-practices.md +157 -0
- package/skills/qa-jmeter-writer/references/config.md +204 -0
- package/skills/qa-jmeter-writer/references/patterns.md +242 -0
- package/skills/qa-junit5-writer/SKILL.md +157 -0
- package/skills/qa-junit5-writer/references/assertions.md +118 -0
- package/skills/qa-junit5-writer/references/config.md +97 -0
- package/skills/qa-junit5-writer/references/patterns.md +162 -0
- package/skills/qa-k6-writer/SKILL.md +155 -0
- package/skills/qa-k6-writer/references/best-practices.md +236 -0
- package/skills/qa-k6-writer/references/config.md +219 -0
- package/skills/qa-k6-writer/references/patterns.md +304 -0
- package/skills/qa-linear-integration/SKILL.md +137 -0
- package/skills/qa-linear-integration/references/api-patterns.md +249 -0
- package/skills/qa-linear-integration/references/field-mapping.md +121 -0
- package/skills/qa-locust-writer/SKILL.md +151 -0
- package/skills/qa-locust-writer/references/best-practices.md +126 -0
- package/skills/qa-locust-writer/references/config.md +170 -0
- package/skills/qa-locust-writer/references/patterns.md +235 -0
- package/skills/qa-manual-test-designer/SKILL.md +145 -0
- package/skills/qa-manual-test-designer/references/exploratory-charters.md +138 -0
- package/skills/qa-manual-test-designer/references/personas.md +146 -0
- package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +47 -0
- package/skills/qa-manual-test-designer/templates/test-case-template.md +31 -0
- package/skills/qa-mobile-test-writer/SKILL.md +144 -0
- package/skills/qa-mobile-test-writer/references/best-practices.md +214 -0
- package/skills/qa-mobile-test-writer/references/config.md +309 -0
- package/skills/qa-mobile-test-writer/references/patterns.md +304 -0
- package/skills/qa-nfr-analyst/SKILL.md +177 -0
- package/skills/qa-nfr-analyst/references/iso-25010-model.md +159 -0
- package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +202 -0
- package/skills/qa-nfr-analyst/references/wcag-checklist.md +184 -0
- package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +89 -0
- package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +48 -0
- package/skills/qa-orchestrator/SKILL.md +132 -0
- package/skills/qa-orchestrator/references/handoff-chains.md +105 -0
- package/skills/qa-orchestrator/references/pipeline-modes.md +115 -0
- package/skills/qa-orchestrator/references/scheduler-rules.md +84 -0
- package/skills/qa-pact-writer/SKILL.md +133 -0
- package/skills/qa-pact-writer/references/best-practices.md +100 -0
- package/skills/qa-pact-writer/references/config.md +135 -0
- package/skills/qa-pact-writer/references/patterns.md +161 -0
- package/skills/qa-plan-creator/SKILL.md +139 -0
- package/skills/qa-plan-creator/references/introduction-plan.md +43 -0
- package/skills/qa-plan-creator/references/migration-plan.md +44 -0
- package/skills/qa-plan-creator/references/onboarding-plan.md +46 -0
- package/skills/qa-plan-creator/references/performance-plan.md +44 -0
- package/skills/qa-plan-creator/references/regression-plan.md +45 -0
- package/skills/qa-plan-creator/references/release-plan.md +45 -0
- package/skills/qa-plan-creator/references/sprint-plan.md +44 -0
- package/skills/qa-plan-creator/references/test-plan.md +59 -0
- package/skills/qa-plan-creator/references/uat-plan.md +43 -0
- package/skills/qa-plan-creator/templates/checklist-template.md +36 -0
- package/skills/qa-plan-creator/templates/regression-checklist-template.md +49 -0
- package/skills/qa-plan-creator/templates/release-checklist-template.md +46 -0
- package/skills/qa-plan-creator/templates/test-plan-template.md +74 -0
- package/skills/qa-playwright-py-writer/SKILL.md +156 -0
- package/skills/qa-playwright-py-writer/references/best-practices.md +194 -0
- package/skills/qa-playwright-py-writer/references/config.md +195 -0
- package/skills/qa-playwright-py-writer/references/patterns.md +212 -0
- package/skills/qa-playwright-ts-writer/SKILL.md +151 -0
- package/skills/qa-playwright-ts-writer/references/assertions.md +109 -0
- package/skills/qa-playwright-ts-writer/references/best-practices.md +191 -0
- package/skills/qa-playwright-ts-writer/references/config.md +144 -0
- package/skills/qa-playwright-ts-writer/references/patterns.md +171 -0
- package/skills/qa-pytest-writer/SKILL.md +145 -0
- package/skills/qa-pytest-writer/references/assertions.md +149 -0
- package/skills/qa-pytest-writer/references/best-practices.md +97 -0
- package/skills/qa-pytest-writer/references/config.md +176 -0
- package/skills/qa-pytest-writer/references/patterns.md +251 -0
- package/skills/qa-qase-integration/SKILL.md +149 -0
- package/skills/qa-qase-integration/references/api-reference.md +354 -0
- package/skills/qa-qase-integration/references/ci-integration.md +196 -0
- package/skills/qa-qase-integration/references/field-mapping.md +157 -0
- package/skills/qa-requirements-generator/SKILL.md +152 -0
- package/skills/qa-requirements-generator/references/iso-29148-structure.md +153 -0
- package/skills/qa-requirements-generator/references/requirement-patterns.md +278 -0
- package/skills/qa-rest-assured-writer/SKILL.md +137 -0
- package/skills/qa-rest-assured-writer/references/best-practices.md +50 -0
- package/skills/qa-rest-assured-writer/references/config.md +124 -0
- package/skills/qa-rest-assured-writer/references/patterns.md +192 -0
- package/skills/qa-risk-analyzer/SKILL.md +158 -0
- package/skills/qa-risk-analyzer/references/impact-analysis.md +133 -0
- package/skills/qa-risk-analyzer/references/risk-factors.md +123 -0
- package/skills/qa-robot-framework-writer/SKILL.md +147 -0
- package/skills/qa-robot-framework-writer/references/best-practices.md +249 -0
- package/skills/qa-robot-framework-writer/references/config.md +204 -0
- package/skills/qa-robot-framework-writer/references/libraries.md +273 -0
- package/skills/qa-robot-framework-writer/references/patterns.md +216 -0
- package/skills/qa-security-test-writer/SKILL.md +123 -0
- package/skills/qa-security-test-writer/references/best-practices.md +155 -0
- package/skills/qa-security-test-writer/references/owasp-top10.md +331 -0
- package/skills/qa-security-test-writer/references/zap-config.md +258 -0
- package/skills/qa-selenium-java-writer/SKILL.md +143 -0
- package/skills/qa-selenium-java-writer/references/best-practices.md +59 -0
- package/skills/qa-selenium-java-writer/references/config.md +143 -0
- package/skills/qa-selenium-java-writer/references/patterns.md +170 -0
- package/skills/qa-selenium-py-writer/SKILL.md +150 -0
- package/skills/qa-selenium-py-writer/references/best-practices.md +175 -0
- package/skills/qa-selenium-py-writer/references/config.md +224 -0
- package/skills/qa-selenium-py-writer/references/patterns.md +255 -0
- package/skills/qa-shortcut-integration/SKILL.md +143 -0
- package/skills/qa-shortcut-integration/references/api-patterns.md +126 -0
- package/skills/qa-shortcut-integration/references/field-mapping.md +66 -0
- package/skills/qa-spec-auditor/SKILL.md +162 -0
- package/skills/qa-spec-auditor/references/audit-checklist.md +144 -0
- package/skills/qa-spec-auditor/references/drift-patterns.md +207 -0
- package/skills/qa-spec-writer/SKILL.md +143 -0
- package/skills/qa-spec-writer/references/gherkin-guide.md +253 -0
- package/skills/qa-spec-writer/references/specification-patterns.md +274 -0
- package/skills/qa-spring-test-writer/SKILL.md +170 -0
- package/skills/qa-spring-test-writer/references/best-practices.md +57 -0
- package/skills/qa-spring-test-writer/references/config.md +179 -0
- package/skills/qa-spring-test-writer/references/patterns.md +235 -0
- package/skills/qa-supertest-writer/SKILL.md +150 -0
- package/skills/qa-supertest-writer/references/assertions.md +192 -0
- package/skills/qa-supertest-writer/references/best-practices.md +102 -0
- package/skills/qa-supertest-writer/references/config.md +166 -0
- package/skills/qa-supertest-writer/references/patterns.md +242 -0
- package/skills/qa-task-creator/SKILL.md +142 -0
- package/skills/qa-task-creator/references/linking-patterns.md +127 -0
- package/skills/qa-task-creator/references/task-types.md +169 -0
- package/skills/qa-task-creator/templates/task-template.md +24 -0
- package/skills/qa-test-doc-compiler/SKILL.md +114 -0
- package/skills/qa-test-doc-compiler/references/agile-tailoring.md +220 -0
- package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +302 -0
- package/skills/qa-test-healer/SKILL.md +101 -0
- package/skills/qa-test-healer/references/diagnosis-patterns.md +142 -0
- package/skills/qa-test-healer/references/fix-strategies.md +177 -0
- package/skills/qa-test-reporter/SKILL.md +130 -0
- package/skills/qa-test-reporter/references/best-practices.md +162 -0
- package/skills/qa-test-reporter/references/iso-29119-reports.md +236 -0
- package/skills/qa-test-reporter/references/report-formats.md +287 -0
- package/skills/qa-test-reviewer/SKILL.md +142 -0
- package/skills/qa-test-reviewer/references/anti-patterns.md +268 -0
- package/skills/qa-test-reviewer/references/review-checklist.md +93 -0
- package/skills/qa-test-strategy/SKILL.md +133 -0
- package/skills/qa-test-strategy/references/entry-exit-criteria.md +176 -0
- package/skills/qa-test-strategy/references/risk-matrix.md +102 -0
- package/skills/qa-test-strategy/references/testing-types.md +143 -0
- package/skills/qa-testcase-from-docs/SKILL.md +161 -0
- package/skills/qa-testcase-from-docs/references/test-case-format.md +196 -0
- package/skills/qa-testcase-from-docs/references/test-design-techniques.md +126 -0
- package/skills/qa-testcase-from-docs/templates/test-case-template.md +31 -0
- package/skills/qa-testcase-from-ui/SKILL.md +109 -0
- package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +126 -0
- package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +146 -0
- package/skills/qa-testcase-from-ui/templates/test-case-template.md +31 -0
- package/skills/qa-visual-regression-writer/SKILL.md +175 -0
- package/skills/qa-visual-regression-writer/references/best-practices.md +154 -0
- package/skills/qa-visual-regression-writer/references/config.md +220 -0
- package/skills/qa-visual-regression-writer/references/patterns.md +213 -0
- package/skills/qa-vitest-writer/SKILL.md +141 -0
- package/skills/qa-vitest-writer/references/assertions.md +105 -0
- package/skills/qa-vitest-writer/references/best-practices.md +62 -0
- package/skills/qa-vitest-writer/references/config.md +127 -0
- package/skills/qa-vitest-writer/references/patterns.md +141 -0
- package/skills/qa-webdriverio-writer/SKILL.md +145 -0
- package/skills/qa-webdriverio-writer/references/best-practices.md +176 -0
- package/skills/qa-webdriverio-writer/references/config.md +240 -0
- package/skills/qa-webdriverio-writer/references/patterns.md +269 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Exploratory Testing Session Charter
|
|
2
|
+
|
|
3
|
+
**Charter:** {mission statement}
|
|
4
|
+
**Date:** {YYYY-MM-DD}
|
|
5
|
+
**Tester:** {name}
|
|
6
|
+
**Time-box:** {e.g., 90 minutes}
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Mission
|
|
11
|
+
|
|
12
|
+
{What are we trying to learn or validate?}
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Areas to Explore
|
|
17
|
+
|
|
18
|
+
1. {area 1}
|
|
19
|
+
2. {area 2}
|
|
20
|
+
3. {area 3}
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Setup
|
|
25
|
+
|
|
26
|
+
- **Build/URL:** {version or URL}
|
|
27
|
+
- **Test data:** {credentials, test accounts}
|
|
28
|
+
- **Tools:** {browser, proxy, recorder}
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Session Notes
|
|
33
|
+
|
|
34
|
+
| Time | Action | Observation | Issue? |
|
|
35
|
+
|------|--------|-------------|--------|
|
|
36
|
+
| {HH:MM} | {what you did} | {what you saw} | ☐ Yes ☐ No |
|
|
37
|
+
| {HH:MM} | | | |
|
|
38
|
+
| {HH:MM} | | | |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Debrief
|
|
43
|
+
|
|
44
|
+
- **Bugs found:** {count and brief list}
|
|
45
|
+
- **Coverage:** {areas covered vs. missed}
|
|
46
|
+
- **Questions / follow-ups:** {open items}
|
|
47
|
+
- **Next charter:** {suggested focus}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Test Case
|
|
2
|
+
|
|
3
|
+
## [TC-{ID}] {Title}
|
|
4
|
+
|
|
5
|
+
**Module:** {module name}
|
|
6
|
+
**Priority:** {P1 | P2 | P3 | P4}
|
|
7
|
+
**Type:** {Functional | Regression | Smoke | Integration | E2E | Other}
|
|
8
|
+
|
|
9
|
+
## Preconditions
|
|
10
|
+
{Prerequisites, data state, environment setup}
|
|
11
|
+
|
|
12
|
+
## Test Steps
|
|
13
|
+
|
|
14
|
+
| # | Action | Expected Result |
|
|
15
|
+
|---|--------|-----------------|
|
|
16
|
+
| 1 | {action} | {expected} |
|
|
17
|
+
| 2 | {action} | {expected} |
|
|
18
|
+
| 3 | {action} | {expected} |
|
|
19
|
+
|
|
20
|
+
## Postconditions
|
|
21
|
+
{Cleanup, state after test}
|
|
22
|
+
|
|
23
|
+
## Test Data
|
|
24
|
+
{Input values, test accounts, sample data}
|
|
25
|
+
|
|
26
|
+
## Traceability
|
|
27
|
+
- **Requirement ID:** [REQ-{ID}]
|
|
28
|
+
- **Spec Reference:** {section or link}
|
|
29
|
+
|
|
30
|
+
## Automation Status
|
|
31
|
+
{Manual | Automated | Planned | N/A}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-mobile-test-writer
|
|
3
|
+
description: Generate mobile tests using Appium, WebdriverIO Mobile, and Flutter Driver for iOS and Android native, hybrid, Flutter, and mobile web applications.
|
|
4
|
+
output_dir: tests/mobile
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# QA Mobile Test Writer
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Write mobile tests for iOS, Android, hybrid, Flutter, and mobile web applications. Transform structured test cases into executable mobile test scripts using Appium (cross-platform native + hybrid), WebdriverIO Mobile (@wdio/appium-service), and Flutter Driver / integration_test for Flutter apps.
|
|
12
|
+
|
|
13
|
+
## Trigger Phrases
|
|
14
|
+
|
|
15
|
+
- "Write mobile tests for [iOS/Android/Flutter]"
|
|
16
|
+
- "Generate Appium tests from test cases"
|
|
17
|
+
- "Create mobile E2E tests for [app]"
|
|
18
|
+
- "Add Flutter integration tests"
|
|
19
|
+
- "Appium tests for native/hybrid app"
|
|
20
|
+
- "Mobile web tests on device"
|
|
21
|
+
- "WebdriverIO mobile tests with Appium"
|
|
22
|
+
- "Touch actions, gestures, app lifecycle tests"
|
|
23
|
+
- "Configure device farm (BrowserStack, Sauce Labs)"
|
|
24
|
+
- "Mobile test capabilities and emulator setup"
|
|
25
|
+
|
|
26
|
+
## Workflow
|
|
27
|
+
|
|
28
|
+
1. **Read test cases** — From qa-testcase-from-docs, qa-manual-test-designer, qa-testcase-from-ui
|
|
29
|
+
2. **Determine platform/framework** — iOS vs Android, native vs hybrid vs Flutter vs mobile web
|
|
30
|
+
3. **Generate test files** — Create test scripts with appropriate framework (Appium, WDIO, Flutter)
|
|
31
|
+
4. **Configure capabilities** — platformName, automationName, app path, device/emulator
|
|
32
|
+
5. **Set up device/emulator** — Local emulator, simulator, or device farm config
|
|
33
|
+
|
|
34
|
+
## Frameworks
|
|
35
|
+
|
|
36
|
+
| Framework | Use Case | Drivers |
|
|
37
|
+
|-----------|----------|---------|
|
|
38
|
+
| **Appium** | Native, hybrid, mobile web | XCUITest (iOS), UiAutomator2 (Android), Espresso (Android) |
|
|
39
|
+
| **WebdriverIO Mobile** | WDIO + Appium; TypeScript | @wdio/appium-service, same drivers |
|
|
40
|
+
| **Flutter Driver** | Flutter apps only | Flutter driver, integration_test |
|
|
41
|
+
|
|
42
|
+
## Platform Coverage
|
|
43
|
+
|
|
44
|
+
| Platform | Driver | Automation |
|
|
45
|
+
|----------|--------|------------|
|
|
46
|
+
| **iOS** | XCUITest | Native, hybrid, Safari (mobile web) |
|
|
47
|
+
| **Android** | UiAutomator2 | Native, hybrid, Chrome (mobile web) |
|
|
48
|
+
| **Flutter** | Flutter Driver | Flutter widgets, integration_test |
|
|
49
|
+
| **Mobile Web** | Browser on device | Chrome (Android), Safari (iOS) |
|
|
50
|
+
|
|
51
|
+
## Key Patterns
|
|
52
|
+
|
|
53
|
+
- **Desired capabilities:** platformName, automationName, app (path or URL), deviceName, udid, noReset, fullReset
|
|
54
|
+
- **Touch actions:** tap, swipe, scroll, long press, multi-touch
|
|
55
|
+
- **Element location:** accessibility id, xpath, class name, resource-id (Android), name (iOS)
|
|
56
|
+
- **Gestures:** W3C Actions API, TouchAction, MultiTouchAction
|
|
57
|
+
- **App lifecycle:** install, launch, close, reset, background/foreground
|
|
58
|
+
|
|
59
|
+
See `references/patterns.md` for native apps, hybrid apps, gestures, app lifecycle, deep links.
|
|
60
|
+
|
|
61
|
+
## Flutter Integration
|
|
62
|
+
|
|
63
|
+
- **flutter_test** — Unit and widget tests
|
|
64
|
+
- **integration_test** — E2E on device/emulator
|
|
65
|
+
- **Finders:** find.byKey, find.text, find.byType, find.bySemanticsLabel
|
|
66
|
+
- **Pumping:** pumpWidget, pumpAndSettle
|
|
67
|
+
- **Golden tests** — Screenshot comparison for visual regression
|
|
68
|
+
|
|
69
|
+
## WebdriverIO Mobile
|
|
70
|
+
|
|
71
|
+
- **@wdio/appium-service** — Appium server management
|
|
72
|
+
- **Mobile-specific selectors** — accessibility id, -android uiautomator, -ios predicate string
|
|
73
|
+
- **Touch actions** — element.touchAction(), browser.touchAction()
|
|
74
|
+
- **Mobile commands** — getContext, switchContext (for hybrid)
|
|
75
|
+
|
|
76
|
+
## Device Farms
|
|
77
|
+
|
|
78
|
+
| Service | Use Case |
|
|
79
|
+
|---------|----------|
|
|
80
|
+
| **BrowserStack** | Real devices, parallel execution |
|
|
81
|
+
| **Sauce Labs** | Real devices, emulators, Appium cloud |
|
|
82
|
+
| **AWS Device Farm** | AWS-integrated device testing |
|
|
83
|
+
| **Local** | Emulators, simulators, USB devices |
|
|
84
|
+
|
|
85
|
+
See `references/config.md` for Appium setup, capabilities, device farms, emulators.
|
|
86
|
+
|
|
87
|
+
## Output
|
|
88
|
+
|
|
89
|
+
- Mobile test scripts (Appium, WDIO, Flutter)
|
|
90
|
+
- Capability configuration files
|
|
91
|
+
- CI integration snippets (GitHub Actions, Jenkins, etc.)
|
|
92
|
+
- Device/emulator setup instructions
|
|
93
|
+
|
|
94
|
+
## Scope
|
|
95
|
+
|
|
96
|
+
**Can do (autonomous):**
|
|
97
|
+
- Generate Appium, WebdriverIO Mobile, Flutter Driver tests from test cases
|
|
98
|
+
- Configure desired capabilities for iOS/Android
|
|
99
|
+
- Use touch actions, gestures, app lifecycle patterns
|
|
100
|
+
- Set up capability configs for BrowserStack, Sauce Labs, AWS Device Farm
|
|
101
|
+
- Generate Flutter integration_test with finders and pumping
|
|
102
|
+
- Apply accessibility id, resource-id, xpath for element location
|
|
103
|
+
- Delegate to qa-test-healer when tests fail (selector/assertion fixes)
|
|
104
|
+
|
|
105
|
+
**Cannot do (requires confirmation):**
|
|
106
|
+
- Change production app code or add test IDs
|
|
107
|
+
- Add dependencies not in package.json / pubspec.yaml
|
|
108
|
+
- Override project Appium/WDIO config without approval
|
|
109
|
+
- Install or configure emulators/simulators on user machine
|
|
110
|
+
|
|
111
|
+
**Will not do (out of scope):**
|
|
112
|
+
- Execute tests (user runs `npx wdio`, `appium`, `flutter test integration_test`)
|
|
113
|
+
- Write unit/widget tests (use qa-jest-writer, qa-pytest-writer)
|
|
114
|
+
- Modify CI/CD pipelines
|
|
115
|
+
- Provision or manage device farm accounts
|
|
116
|
+
|
|
117
|
+
## References
|
|
118
|
+
|
|
119
|
+
- `references/patterns.md` — Native apps, hybrid apps, gestures, app lifecycle, deep links
|
|
120
|
+
- `references/config.md` — Appium setup, capabilities, device farms, emulators
|
|
121
|
+
- `references/best-practices.md` — Test stability, device matrix, accessibility IDs, CI with emulators
|
|
122
|
+
|
|
123
|
+
## Quality Checklist
|
|
124
|
+
|
|
125
|
+
- [ ] Accessibility id / resource-id preferred over xpath where possible
|
|
126
|
+
- [ ] Touch actions used for mobile (tap, swipe, scroll) vs generic click
|
|
127
|
+
- [ ] App lifecycle handled (install, launch, reset) per test needs
|
|
128
|
+
- [ ] Capabilities match target platform (iOS XCUITest, Android UiAutomator2)
|
|
129
|
+
- [ ] Tests independent (no shared state, order-independent)
|
|
130
|
+
- [ ] No hardcoded secrets (use env vars for device farm credentials)
|
|
131
|
+
- [ ] Traceability to test case IDs where applicable
|
|
132
|
+
- [ ] Flutter: find.byKey used for stable element location when available
|
|
133
|
+
|
|
134
|
+
## Troubleshooting
|
|
135
|
+
|
|
136
|
+
| Symptom | Likely Cause | Fix |
|
|
137
|
+
|---------|--------------|-----|
|
|
138
|
+
| Element not found | Wrong locator strategy, timing | Use accessibility id; add explicit wait; check context (native vs webview) |
|
|
139
|
+
| Session not created | Capability mismatch, wrong driver | Verify platformName, automationName, app path; check Appium server version |
|
|
140
|
+
| Hybrid app: element in webview | Wrong context | Use getContext/switchContext to webview; use CSS/XPath in webview |
|
|
141
|
+
| Flaky on emulator | Timing, animations | Use pumpAndSettle (Flutter); add explicit waits; disable animations |
|
|
142
|
+
| Device farm timeout | Slow device, network | Increase timeout; use faster device; check app size |
|
|
143
|
+
| Gesture fails | Unsupported action | Use W3C Actions API; fallback to TouchAction |
|
|
144
|
+
| App not installing | Invalid path, signing | Verify app path; check .ipa/.apk signing for real devices |
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# Mobile Testing Best Practices
|
|
2
|
+
|
|
3
|
+
## Test Stability
|
|
4
|
+
|
|
5
|
+
### Prefer Accessibility IDs
|
|
6
|
+
|
|
7
|
+
```javascript
|
|
8
|
+
// Good — stable, semantic
|
|
9
|
+
await $('~login-button').click();
|
|
10
|
+
await $('~email-input').setValue('user@test.com');
|
|
11
|
+
|
|
12
|
+
// Avoid — brittle
|
|
13
|
+
await $('//android.widget.Button[@index="2"]').click();
|
|
14
|
+
await $('.android.widget.EditText').setValue('user@test.com');
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Recommendation:** Add `accessibilityIdentifier` (iOS) and `contentDescription` / `testID` (Android/React Native) to key UI elements. Use these for automation.
|
|
18
|
+
|
|
19
|
+
### Explicit Waits
|
|
20
|
+
|
|
21
|
+
```javascript
|
|
22
|
+
// Good — wait for condition
|
|
23
|
+
await $('~welcome-message').waitForDisplayed({ timeout: 10000 });
|
|
24
|
+
await $('~submit-btn').waitForClickable();
|
|
25
|
+
|
|
26
|
+
// Bad — arbitrary delay
|
|
27
|
+
await driver.pause(3000);
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Handle Animations
|
|
31
|
+
|
|
32
|
+
- **Flutter:** Use `pumpAndSettle()` to wait for animations to finish
|
|
33
|
+
- **Appium:** Add short waits after navigation; use `waitForDisplayed` before interaction
|
|
34
|
+
- **Tip:** Disable animations on emulators for faster, more stable runs:
|
|
35
|
+
- Android: Settings → Developer options → Window/Transition/Animator scale → Off
|
|
36
|
+
- iOS: Settings → Accessibility → Motion → Reduce Motion
|
|
37
|
+
|
|
38
|
+
### Avoid Order Dependencies
|
|
39
|
+
|
|
40
|
+
- Each test should run in isolation
|
|
41
|
+
- Use `beforeEach` to reset app state or use `fullReset` when needed
|
|
42
|
+
- Prefer API/data setup over UI-based setup when possible
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Device Matrix
|
|
47
|
+
|
|
48
|
+
### Prioritize Key Combinations
|
|
49
|
+
|
|
50
|
+
| Priority | Android | iOS |
|
|
51
|
+
|----------|---------|-----|
|
|
52
|
+
| High | Latest (API 34) | Latest (17) |
|
|
53
|
+
| Medium | L-1 (API 33) | N-1 (16) |
|
|
54
|
+
| Low | Older (API 30) | Older (15) |
|
|
55
|
+
|
|
56
|
+
### Screen Sizes
|
|
57
|
+
|
|
58
|
+
- **Phone:** Small (320pt), Medium (375pt), Large (414pt)
|
|
59
|
+
- **Tablet:** 768pt, 1024pt (if app supports)
|
|
60
|
+
- **Orientation:** Portrait and landscape for critical flows
|
|
61
|
+
|
|
62
|
+
### Strategy
|
|
63
|
+
|
|
64
|
+
- **Smoke:** 1–2 devices (latest Android + iOS)
|
|
65
|
+
- **Regression:** 4–6 devices covering OS versions and screen sizes
|
|
66
|
+
- **Full matrix:** Device farm with parallel execution
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Accessibility IDs
|
|
71
|
+
|
|
72
|
+
### iOS (Swift/SwiftUI)
|
|
73
|
+
|
|
74
|
+
```swift
|
|
75
|
+
Button("Login") { ... }
|
|
76
|
+
.accessibilityIdentifier("login-button")
|
|
77
|
+
|
|
78
|
+
TextField("Email", text: $email)
|
|
79
|
+
.accessibilityIdentifier("email-input")
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Android (Kotlin/XML)
|
|
83
|
+
|
|
84
|
+
```xml
|
|
85
|
+
<Button
|
|
86
|
+
android:id="@+id/login_button"
|
|
87
|
+
android:contentDescription="Login" />
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```kotlin
|
|
91
|
+
// Or programmatically
|
|
92
|
+
view.accessibilityDelegate = object : AccessibilityDelegate() {
|
|
93
|
+
// Use contentDescription for screen readers and automation
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### React Native
|
|
98
|
+
|
|
99
|
+
```jsx
|
|
100
|
+
<Button testID="login-button" title="Login" />
|
|
101
|
+
<TextInput testID="email-input" />
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Flutter
|
|
105
|
+
|
|
106
|
+
```dart
|
|
107
|
+
ElevatedButton(
|
|
108
|
+
key: Key('login-button'),
|
|
109
|
+
onPressed: () {},
|
|
110
|
+
child: Text('Login'),
|
|
111
|
+
)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## CI with Emulators
|
|
117
|
+
|
|
118
|
+
### Caching
|
|
119
|
+
|
|
120
|
+
- Cache Android SDK and emulator images
|
|
121
|
+
- Cache iOS simulators (Xcode)
|
|
122
|
+
- Cache npm/pip dependencies
|
|
123
|
+
|
|
124
|
+
### Parallelization
|
|
125
|
+
|
|
126
|
+
```yaml
|
|
127
|
+
# Run Android and iOS in parallel
|
|
128
|
+
jobs:
|
|
129
|
+
android:
|
|
130
|
+
runs-on: ubuntu-latest
|
|
131
|
+
steps:
|
|
132
|
+
- run: npx wdio run wdio.android.conf.ts
|
|
133
|
+
ios:
|
|
134
|
+
runs-on: macos-latest
|
|
135
|
+
steps:
|
|
136
|
+
- run: npx wdio run wdio.ios.conf.ts
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Sharding
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Split specs across workers
|
|
143
|
+
npx wdio run wdio.conf.ts --shard=1/4
|
|
144
|
+
npx wdio run wdio.conf.ts --shard=2/4
|
|
145
|
+
# ...
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Artifacts on Failure
|
|
149
|
+
|
|
150
|
+
- Screenshots on failure
|
|
151
|
+
- Appium logs
|
|
152
|
+
- Video recording (device farms often provide this)
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
afterTest: async function (test, context, result) {
|
|
156
|
+
if (result.error) {
|
|
157
|
+
const screenshot = await browser.takeScreenshot();
|
|
158
|
+
// Write to file, upload to artifact storage
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Hybrid App Considerations
|
|
166
|
+
|
|
167
|
+
- **Context switching:** Always verify current context before interacting
|
|
168
|
+
- **Webview load:** Wait for webview context to appear and page to load
|
|
169
|
+
- **Selectors in webview:** Use web selectors (CSS, XPath) after switching to webview
|
|
170
|
+
- **Performance:** Webview interactions can be slower; increase timeouts if needed
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Flutter-Specific
|
|
175
|
+
|
|
176
|
+
### Use Keys for Stability
|
|
177
|
+
|
|
178
|
+
```dart
|
|
179
|
+
// In app
|
|
180
|
+
ElevatedButton(key: Key('submit'), ...)
|
|
181
|
+
|
|
182
|
+
// In test
|
|
183
|
+
await tester.tap(find.byKey(Key('submit')));
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### pumpAndSettle for Animations
|
|
187
|
+
|
|
188
|
+
```dart
|
|
189
|
+
await tester.pumpAndSettle(); // Waits for all animations
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Golden Tests
|
|
193
|
+
|
|
194
|
+
- Store golden images in version control
|
|
195
|
+
- Review visual diffs in PRs
|
|
196
|
+
- Use `flutter test --update-goldens` to update when UI intentionally changes
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Security
|
|
201
|
+
|
|
202
|
+
- Never hardcode device farm credentials
|
|
203
|
+
- Use `process.env` or CI secrets
|
|
204
|
+
- Store app paths in config; avoid committing .apk/.ipa to repo
|
|
205
|
+
- Use signed builds for real device testing
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Performance
|
|
210
|
+
|
|
211
|
+
- Use `noReset: true` when possible to avoid reinstall between tests
|
|
212
|
+
- Run tests in parallel on device farms
|
|
213
|
+
- Minimize unnecessary app restarts
|
|
214
|
+
- Consider splitting long flows into smaller, focused tests
|