Skip to content

Commit 0ccb038

Browse files
authored
Device API references (#122)
* Add Android device reference documentation Mintlify-Source: dashboard-editor * Add iOS device reference and update Android device docs Mintlify-Source: dashboard-editor * Update docs.json to reorganize API reference links Mintlify-Source: dashboard-editor * Restore deleted API ref * add android back to doc.json * Add Android barcode, location, and sensor mocking docs Mintlify-Source: dashboard-editor * Refactor audio docs, add beacon and web speaker capture docs Mintlify-Source: dashboard-editor * Add native mobile visual diffing documentation Mintlify-Source: dashboard-editor * Add browser extensions docs and update icons Mintlify-Source: dashboard-editor * Update Android audio injection docs Mintlify-Source: dashboard-editor * Refactor and clarify various documentation sections Mintlify-Source: dashboard-editor * Refactor documentation for clarity and consistency Mintlify-Source: dashboard-editor * Update audio injection examples Mintlify-Source: dashboard-editor * Update web-injection.mdx with warning and formatting Mintlify-Source: dashboard-editor * Update audio capture docs and remove audio injection Mintlify-Source: dashboard-editor * Update a11y docs with new examples and descriptions Mintlify-Source: dashboard-editor * Update a11y-web.mdx title Mintlify-Source: dashboard-editor * Update title for Android audio injection to "Microphone injection Mintlify-Source: dashboard-editor * Update visual diffing native app docs with usage and warnings Mintlify-Source: dashboard-editor * Add iOS audio injection documentation Mintlify-Source: dashboard-editor * Refine titles and descriptions for clarity across several docs Mintlify-Source: dashboard-editor * Update Android and Electron docs, add Android location mocking Mintlify-Source: dashboard-editor * Refactor and clarify documentation examples Mintlify-Source: dashboard-editor * Rename iOS device reference file to lowercase Mintlify-Source: dashboard-editor * Update documentation links and file paths Mintlify-Source: dashboard-editor * Move iBeacon injection docs to correct path Mintlify-Source: dashboard-editor * Move web-audio-analysis docs to qawolf directory Mintlify-Source: dashboard-editor * Refactor audio injection docs and update Android location link Mintlify-Source: dashboard-editor * Update audio injection link in solutions.mdx Mintlify-Source: dashboard-editor * Move web audio injection docs to qawolf directory Mintlify-Source: dashboard-editor * Update workflow mapping docs with file-based methods Mintlify-Source: dashboard-editor * Add background flow creation to AI docs Mintlify-Source: dashboard-editor
1 parent e11253b commit 0ccb038

31 files changed

Lines changed: 2390 additions & 196 deletions

docs.json

Lines changed: 74 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@
126126
"qawolf/Use-emails-in-tests-29c5b2a994fb81cf8a03de3eb25ed68e"
127127
]
128128
},
129+
{
130+
"group": "Authentication",
131+
"icon": "lock-keyhole",
132+
"pages": [
133+
"qawolf/qrcode",
134+
"qawolf/test-mfa"
135+
]
136+
},
129137
{
130138
"group": "Networking",
131139
"icon": "network",
@@ -139,11 +147,18 @@
139147
]
140148
},
141149
{
142-
"group": "Network Simulation",
150+
"group": "Network simulation",
143151
"icon": "signal",
144152
"pages": [
145153
"qawolf/network-simulation"
146154
]
155+
},
156+
{
157+
"group": "Beacon injection",
158+
"icon": "bluetooth",
159+
"pages": [
160+
"qawolf/i-beacon-injection"
161+
]
147162
}
148163
]
149164
},
@@ -157,42 +172,60 @@
157172
]
158173
},
159174
{
160-
"group": "Mobile-native media",
161-
"icon": "tablet-smartphone",
175+
"group": "Audio",
176+
"icon": "ear",
162177
"pages": [
163178
{
164-
"group": "Photo library management",
165-
"icon": "image",
179+
"group": "Microphone injection",
180+
"icon": "mic",
166181
"pages": [
167-
"qawolf/photo-library-management"
182+
"qawolf/android-audio-injection",
183+
"qawolf/ios-audio-injection",
184+
"qawolf/web-audio-injection"
168185
]
169186
},
170187
{
171-
"group": "Camera injection",
172-
"icon": "camera",
188+
"group": "Speaker capture",
189+
"icon": "speaker",
173190
"pages": [
174-
"qawolf/camera-and-audio-injection"
191+
"qawolf/audio-capture",
192+
"qawolf/web-speaker-capture"
175193
]
176194
},
177195
{
178-
"group": "Barcode injection",
179-
"icon": "scan-qr-code",
196+
"group": "Audio analysis",
197+
"icon": "audio-waveform",
180198
"pages": [
181-
"qawolf/barcode-qrcode-scanning"
199+
"qawolf/i-os-audio-analysis",
200+
"qawolf/web-audio-analysis"
201+
]
202+
}
203+
]
204+
},
205+
{
206+
"group": "Camera",
207+
"icon": "camera",
208+
"pages": [
209+
{
210+
"group": "Photo library management",
211+
"icon": "image",
212+
"pages": [
213+
"qawolf/photo-library-management"
182214
]
183215
},
184216
{
185-
"group": "Audio injection",
186-
"icon": "mic",
217+
"group": "Camera injection",
218+
"icon": "switch-camera",
187219
"pages": [
188-
"qawolf/audio-injection"
220+
"qawolf/camera-and-audio-injection"
189221
]
190222
},
191223
{
192-
"group": "Audio capture",
193-
"icon": "audio-waveform",
224+
"group": "Barcode injection",
225+
"icon": "scan-qr-code",
194226
"pages": [
195-
"qawolf/audio-capture"
227+
"qawolf/android-barcode",
228+
"qawolf/barcode-qrcode-scanning"
196229
]
197230
},
198231
{
@@ -216,13 +249,15 @@
216249
"group": "Performance",
217250
"icon": "gauge",
218251
"pages": [
252+
"qawolf/android-performance",
219253
"qawolf/web-performance"
220254
]
221255
},
222256
{
223257
"group": "Visual diffing",
224258
"icon": "scan",
225259
"pages": [
260+
"qawolf/visual-diffing-native-app",
226261
"qawolf/visual-diffing"
227262
]
228263
},
@@ -237,15 +272,28 @@
237272
"group": "Desktop",
238273
"icon": "monitor",
239274
"pages": [
240-
"qawolf/electron"
275+
"qawolf/electron",
276+
"qawolf/browser-extensions"
241277
]
242278
},
243279
{
244-
"group": "Authentication",
245-
"icon": "lock-keyhole",
280+
"group": "Sensors",
281+
"icon": "circle-gauge",
246282
"pages": [
247-
"qawolf/qrcode",
248-
"qawolf/test-mfa"
283+
{
284+
"group": "Location Mocking",
285+
"icon": "locate",
286+
"pages": [
287+
"qawolf/android-location-mocking"
288+
]
289+
},
290+
{
291+
"group": "Sensor Mocking",
292+
"icon": "waves",
293+
"pages": [
294+
"qawolf/android-sensor-mocking"
295+
]
296+
}
249297
]
250298
}
251299
]
@@ -266,7 +314,9 @@
266314
"qawolf/libraries/flows/api-reference/web",
267315
"qawolf/libraries/flows/api-reference/cli",
268316
"qawolf/libraries/flows/api-reference/android",
269-
"qawolf/libraries/flows/api-reference/ios"
317+
"qawolf/libraries/flows/api-reference/android-device-reference",
318+
"qawolf/libraries/flows/api-reference/ios",
319+
"qawolf/libraries/flows/api-reference/ios-device-reference"
270320
]
271321
},
272322
{

qawolf/Automate-flows-using-AI-2d35b2a994fb8084b524cfc9aca7c358.mdx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ Automation AI generates the flow code and opens it in the editor. From here you
3737
- **Review the code** if you want to understand or manually adjust what was generated
3838
- **Ask the AI to change it** by typing a follow-up instruction in the chat panel
3939

40+
## Create flows in the background
41+
42+
From the **Automate** tab, open the AI chat panel and click **Autonomously complete this test**. Describe what you want, or select a flow and let the AI work from context.
43+
44+
The AI runs in the background and creates the flows without blocking your work. To check progress or review what was created, open the sessions sidebar in the left panel of the **Map** tab and select the session.
45+
4046
## Debug a failing flow
4147

4248
When a flow fails, click **Fix with AI** in the banner at the top of the editor. Describe the problem or let the AI interpret the error automatically.

qawolf/Map-your-app-s-workflows-2a45b2a994fb80ca8a87c8fdc2a443fc.mdx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,35 @@ The AI mapping agent creates and maintains a structured view of coverage by expl
3838
</Step>
3939
</Steps>
4040

41+
## Map from a file
42+
43+
Click <Icon icon="plus" /> in the chat input to attach a file, then use one of the following prompts depending on what you want.
44+
45+
<Note>
46+
Supported file types: CSV, JSON, Markdown, plain text, and YAML.
47+
</Note>
48+
49+
### Generate flows from a file
50+
51+
Parses the file and creates the folder structure and flow stubs immediately, without exploring the app. Supports most file and image types.
52+
53+
Prompt: _"Upload the flows from this file."_
54+
55+
### Map your app using a file as a guide
56+
57+
Uses the file as a reference while the agent actively explores your app.
58+
59+
<Steps>
60+
<Step>
61+
Navigate to your app in the browser panel, or include the URL and login credentials in your message.
62+
</Step>
63+
<Step>
64+
Prompt: _"Map all the flows in this file."_
65+
</Step>
66+
</Steps>
67+
68+
When the session ends, the agent produces a CSV with each test case's coverage status, the flow that covers it, and the reason for any rejections.
69+
4170
## Review and publish mapped flows
4271

4372
As the agent maps your application, newly discovered flows appear in the right panel. Review them before publishing.

qawolf/a11y-native.mdx

Lines changed: 49 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,34 @@
11
---
22
title: "Measure accessibility for native mobile"
33
description: "Use accessibility IDs to verify that key screens are reachable and usable by screen readers on iOS and Android."
4-
sidebarTitle: "Mobile - Native app"
4+
sidebarTitle: "Native mobile"
55
---
66

7+
Use accessibility IDs to verify that key screens are reachable and usable by screen readers on iOS and Android. The `~` selector prefix is WebdriverIO shorthand for locating an element by its accessibility ID — this proves the element is correctly exposed to the accessibility layer and keeps your tests stable across visual refactors.
8+
79
<Info>
810
This recipe covers accessibility spot-checking for native mobile. For operationalized a11y monitoring — scheduled runs, trend tracking, aggregated reports, and stakeholder dashboards — talk to your QA Wolf team about full-service accessibility testing.
911
</Info>
1012

1113
## Examples
1214

13-
**Verify a screen's key elements are reachable via accessibility semantics:**
15+
**Verify a screen's key elements are reachable via accessibility semantics**
1416

1517
```typescript
16-
const email = await driver.$("~Email");
17-
const password = await driver.$("~Password");
18-
const loginBtn = await driver.$("~Log in");
18+
const email = await driver.$("~Email");
19+
const password = await driver.$("~Password");
20+
const loginBtn = await driver.$("~Log in");
1921

2022
await expect(email).toBeDisplayed();
2123
await expect(password).toBeDisplayed();
2224
await expect(loginBtn).toBeEnabled();
23-
24-
await email.setValue(process.env.USER_EMAIL);
25-
await password.setValue(process.env.USER_PASSWORD);
26-
await loginBtn.click();
27-
28-
const homeHeader = await driver.$("~Home");
29-
await expect(homeHeader).toBeDisplayed();
3025
```
3126

3227
<Tip>
3328
If you can't locate an element using `~`, that element is likely missing an accessibility label entirely — an accessibility bug worth raising with your dev team before writing the test.
3429
</Tip>
3530

36-
**Assert that icon buttons have meaningful accessible names:**
31+
**Assert that icon buttons have meaningful accessible names**
3732

3833
```typescript
3934
const menuIcon = await driver.$("~Main menu");
@@ -47,22 +42,18 @@ if (!label || label.trim().length < 3) {
4742

4843
## When to use
4944

50-
- You want to verify that a screen's key interactive elements are exposed to VoiceOver (iOS) or TalkBack (Android).
51-
- You need to catch regressions where a developer removed or renamed an accessibility label.
45+
- Your app has key interactive elements that must be exposed to VoiceOver (iOS) or TalkBack (Android).
46+
- Your team wants to catch regressions where a developer removed or renamed an accessibility label.
5247
- Your team wants a lightweight proxy for accessibility hygiene without a full WCAG audit.
53-
- You want to confirm that icon-only buttons have meaningful accessible names, not blank or placeholder labels.
54-
55-
## How it works
48+
- Your app has icon-only buttons that must have meaningful accessible names.
5649

57-
Tests locate elements using accessibility identifiers — attributes set by your developers that expose UI components to the OS accessibility layer.
50+
## Platform reference
5851

5952
| Platform | Attribute | WebdriverIO selector |
6053
| --- | --- | --- |
6154
| Android | `content-desc` | `driver.$('~your-label')` |
6255
| iOS | `accessibilityIdentifier` / accessible name | `driver.$('~your-id')` |
6356

64-
The `~` prefix is the WebdriverIO shorthand for locating an element by its accessibility ID. This is a double win: it proves the element is correctly exposed to the accessibility layer, and it keeps your tests stable across visual refactors.
65-
6657
## Quick reference
6758

6859
| Goal | How to do it |
@@ -72,10 +63,43 @@ The `~` prefix is the WebdriverIO shorthand for locating an element by its acces
7263
| Assert an icon button has a meaningful label | `getAttribute('content-desc')` and check length |
7364
| Assert an error or toast is readable | `await expect($('~error-id')).toHaveText('...')` |
7465

75-
## Notes
76-
7766
<Warning>
78-
QA Wolf does not run a WCAG rules engine against native app views. Native apps don't have a DOM, so axe-core style scanning isn't available for native iOS or Android.
67+
QA Wolf does not run a WCAG rules engine against native app views. Native apps don't have a DOM, so axe-core style scanning isn't available for native iOS or Android. For deeper audits — color contrast, touch target size, reading order — supplement these tests with manual testing using VoiceOver on iOS, TalkBack on Android, or the Xcode Accessibility Inspector and Android Studio Layout Inspector.
7968
</Warning>
8069

81-
For deeper audits — color contrast, touch target size, reading order — supplement these tests with manual testing using VoiceOver on iOS, TalkBack on Android, or the Xcode Accessibility Inspector and Android Studio Layout Inspector.
70+
## Full sample test
71+
72+
```typescript
73+
import { flow } from "@qawolf/flows/android";
74+
75+
export default flow(
76+
"Accessibility — login screen",
77+
{ target: "Android - Pixel", launch: true },
78+
async ({ driver, test }) => {
79+
await test("verify login screen elements are accessible", async () => {
80+
// Arrange
81+
await driver.$("~Email").waitForDisplayed({ timeout: 10_000 });
82+
83+
// Act
84+
const email = driver.$("~Email");
85+
const password = driver.$("~Password");
86+
const loginBtn = driver.$("~Log in");
87+
88+
await email.setValue(process.env.USER_EMAIL);
89+
await password.setValue(process.env.USER_PASSWORD);
90+
await loginBtn.click();
91+
92+
// Assert
93+
await expect(driver.$("~Home")).toBeDisplayed();
94+
95+
const menuIcon = driver.$("~Main menu");
96+
await expect(menuIcon).toBeDisplayed();
97+
98+
const label = await menuIcon.getAttribute("content-desc");
99+
if (!label || label.trim().length < 3) {
100+
throw new Error("A11y: menu icon accessible label is missing or too short");
101+
}
102+
});
103+
},
104+
);
105+
```

0 commit comments

Comments
 (0)