appium-ios-remotexpc 5.17.2 → 5.18.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/CHANGELOG.md +6 -0
- package/build/src/index.d.ts +1 -0
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +1 -0
- package/build/src/index.js.map +1 -1
- package/build/src/services/ios/accessibility-audit/ax-element.d.ts +7 -0
- package/build/src/services/ios/accessibility-audit/ax-element.d.ts.map +1 -1
- package/build/src/services/ios/accessibility-audit/ax-element.js +1 -0
- package/build/src/services/ios/accessibility-audit/ax-element.js.map +1 -1
- package/build/src/services/ios/accessibility-audit/index.d.ts +96 -0
- package/build/src/services/ios/accessibility-audit/index.d.ts.map +1 -1
- package/build/src/services/ios/accessibility-audit/index.js +259 -0
- package/build/src/services/ios/accessibility-audit/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/services/ios/accessibility-audit/ax-element.ts +8 -0
- package/src/services/ios/accessibility-audit/index.ts +270 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [5.18.0](https://github.com/appium/appium-ios-remotexpc/compare/v5.17.2...v5.18.0) (2026-09-01)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* **accessibility-audit:** add focus traversal via `moveFocus` and `walkElements` ([#310](https://github.com/appium/appium-ios-remotexpc/issues/310)) ([df982a5](https://github.com/appium/appium-ios-remotexpc/commit/df982a52bbe2f136520569fab4f858942f465d6c))
|
|
6
|
+
|
|
1
7
|
## [5.17.2](https://github.com/appium/appium-ios-remotexpc/compare/v5.17.1...v5.17.2) (2026-08-31)
|
|
2
8
|
|
|
3
9
|
### Performance Improvements
|
package/build/src/index.d.ts
CHANGED
|
@@ -36,6 +36,7 @@ export type { AxRect } from './services/ios/accessibility-audit/ax-values.js';
|
|
|
36
36
|
export { serializeAxAttribute, serializeAxElement, toAxElement, toInspectedElement, } from './services/ios/accessibility-audit/ax-element.js';
|
|
37
37
|
export type { AxElement, AxElementAttribute, AxInspectedElement, AxInspectorSection, } from './services/ios/accessibility-audit/ax-element.js';
|
|
38
38
|
export { serializeAxSetting } from './services/ios/accessibility-audit/index.js';
|
|
39
|
+
export { AxFocusDirection } from './services/ios/accessibility-audit/index.js';
|
|
39
40
|
export type { InspectOptions, RunAuditOptions, AxAuditIssue } from './services/ios/accessibility-audit/index.js';
|
|
40
41
|
export { CoreDeviceInfoService } from './services/ios/device-info/index.js';
|
|
41
42
|
export type { CoreDeviceAttributes, CoreDeviceDisplayInfo, CoreDeviceLockState, } from './services/ios/device-info/index.js';
|
package/build/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/src/index.js
CHANGED
|
@@ -18,6 +18,7 @@ export { AX_OBJECT_TYPE, deserializeAxObject } from './services/ios/accessibilit
|
|
|
18
18
|
export { AxPoint, toAxRect } from './services/ios/accessibility-audit/ax-values.js';
|
|
19
19
|
export { serializeAxAttribute, serializeAxElement, toAxElement, toInspectedElement, } from './services/ios/accessibility-audit/ax-element.js';
|
|
20
20
|
export { serializeAxSetting } from './services/ios/accessibility-audit/index.js';
|
|
21
|
+
export { AxFocusDirection } from './services/ios/accessibility-audit/index.js';
|
|
21
22
|
export { CoreDeviceInfoService } from './services/ios/device-info/index.js';
|
|
22
23
|
export { DeviceControlService } from './services/ios/device-control/index.js';
|
|
23
24
|
export { ConfigurationService } from './services/ios/configuration/index.js';
|
package/build/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAE,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAC,2BAA2B,EAAE,8BAA8B,EAAC,MAAM,yBAAyB,CAAC;AACpG,OAAO,EAAC,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EACL,aAAa,EACb,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,oBAAoB,EAAE,yBAAyB,EAAC,MAAM,wCAAwC,CAAC;AACvG,OAAO,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,uBAAuB,EAAC,MAAM,wCAAwC,CAAC;AAS/E,OAAO,EAAC,OAAO,EAAC,MAAM,8BAA8B,CAAC;AAMrD,OAAO,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAQhE,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,oCAAoC,CAAC;AAO5C,OAAO,EAAC,eAAe,EAAE,iBAAiB,EAAC,MAAM,mDAAmD,CAAC;AAErG,OAAO,EAAC,UAAU,EAAC,MAAM,qCAAqC,CAAC;AAQ/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAC,yBAAyB,EAAC,MAAM,6CAA6C,CAAC;AAEtF,OAAO,EAAC,mBAAmB,EAAC,MAAM,qDAAqD,CAAC;AAExF,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAC,MAAM,sDAAsD,CAAC;AACzG,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,iDAAiD,CAAC;AAElF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,GACnB,MAAM,kDAAkD,CAAC;AAO1D,OAAO,EAAC,kBAAkB,EAAC,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,13 @@ export interface AxInspectorSection {
|
|
|
45
45
|
}
|
|
46
46
|
/** The inspector panel the device pushes when the focused element changes. */
|
|
47
47
|
export interface AxInspectedElement {
|
|
48
|
+
/**
|
|
49
|
+
* A handle to the focused element, when the daemon sends one.
|
|
50
|
+
*
|
|
51
|
+
* Present on focus pushes, which lets a walk both detect revisits and read
|
|
52
|
+
* attributes for each element it reaches.
|
|
53
|
+
*/
|
|
54
|
+
element?: AxElement;
|
|
48
55
|
/** What VoiceOver would announce, when the daemon provides it. */
|
|
49
56
|
spokenDescription?: string;
|
|
50
57
|
/** The caption shown above the panel, when present. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ax-element.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/accessibility-audit/ax-element.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,cAAc,EAAE,OAAO,CAAC;IACxB,6DAA6D;IAC7D,UAAU,EAAE,OAAO,CAAC;IACpB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAiBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAkBjE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW9E;AA2BD,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ3F;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ax-element.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/accessibility-audit/ax-element.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,cAAc,EAAE,OAAO,CAAC;IACxB,6DAA6D;IAC7D,UAAU,EAAE,OAAO,CAAC;IACpB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAiBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAkBjE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW9E;AA2BD,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ3F;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAyBrE"}
|
|
@@ -106,6 +106,7 @@ export function toInspectedElement(value) {
|
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
108
|
return {
|
|
109
|
+
element: toAxElement(fields.ElementValue_v1),
|
|
109
110
|
spokenDescription: typeof fields.SpokenDescriptionValue_v1 === 'string' ? fields.SpokenDescriptionValue_v1 : undefined,
|
|
110
111
|
caption: typeof fields.CaptionTextValue_v1 === 'string' ? fields.CaptionTextValue_v1 : undefined,
|
|
111
112
|
sections,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ax-element.js","sourceRoot":"","sources":["../../../../../src/services/ios/accessibility-audit/ax-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAErC,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ax-element.js","sourceRoot":"","sources":["../../../../../src/services/ios/accessibility-audit/ax-element.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,16 @@ import { MessageAux } from '../dvt/dtx-message.js';
|
|
|
2
2
|
import { AX_OBJECT_TYPE } from './ax-deserialize.js';
|
|
3
3
|
import { type AxElement, type AxElementAttribute, type AxInspectedElement } from './ax-element.js';
|
|
4
4
|
import { AxAuditDtxTransport, type InvokeOptions } from './dtx-transport.js';
|
|
5
|
+
/**
|
|
6
|
+
* Where {@link AccessibilityAuditService.moveFocus} sends the accessibility
|
|
7
|
+
* focus. These are the daemon's own `direction` values, verified live.
|
|
8
|
+
*/
|
|
9
|
+
export declare enum AxFocusDirection {
|
|
10
|
+
Previous = 3,
|
|
11
|
+
Next = 4,
|
|
12
|
+
First = 5,
|
|
13
|
+
Last = 6
|
|
14
|
+
}
|
|
5
15
|
/**
|
|
6
16
|
* One accessibility setting reported by
|
|
7
17
|
* {@link AccessibilityAuditService.getAccessibilitySettings}.
|
|
@@ -48,6 +58,7 @@ export declare class AccessibilityAuditService {
|
|
|
48
58
|
static readonly RSD_SERVICE_NAME = "com.apple.accessibility.axAuditDaemon.remoteserver.shim.remote";
|
|
49
59
|
/** Live {@link observeFocusedElement} subscriptions; monitoring stays armed while > 0. */
|
|
50
60
|
private observerCount;
|
|
61
|
+
private focusMoveInFlight;
|
|
51
62
|
/** Guards {@link runAudit} against overlapping calls on one instance. */
|
|
52
63
|
private auditInFlight;
|
|
53
64
|
/**
|
|
@@ -162,6 +173,91 @@ export declare class AccessibilityAuditService {
|
|
|
162
173
|
observeFocusedElement(listener: (element: AxInspectedElement) => void, options?: {
|
|
163
174
|
showVisuals?: boolean;
|
|
164
175
|
}): () => void;
|
|
176
|
+
/**
|
|
177
|
+
* Moves the device's accessibility focus and resolves with the element it
|
|
178
|
+
* lands on — the same panel {@link getFocusedElement} returns, plus a handle
|
|
179
|
+
* in `element`.
|
|
180
|
+
*
|
|
181
|
+
* The daemon only reports focus that actually *changed*, so a move with
|
|
182
|
+
* nowhere to go — `First` when focus is already on the first element —
|
|
183
|
+
* emits nothing and rejects on timeout. Focus does wrap: `Next` from the last
|
|
184
|
+
* element returns to the first.
|
|
185
|
+
*
|
|
186
|
+
* Only one focus move may be in flight per instance — a second concurrent call
|
|
187
|
+
* rejects, since both would be resolved by the same push.
|
|
188
|
+
*
|
|
189
|
+
* On timeout the move has already been sent, and nothing ties the daemon's
|
|
190
|
+
* push back to the move that caused it. A push landing after the wait gave up
|
|
191
|
+
* is delivered to the next caller, which then sees a stale element — so treat
|
|
192
|
+
* a timeout as "this connection is briefly out of step" and let it settle.
|
|
193
|
+
* Draining blindly does not work: a move that changes nothing is answered with
|
|
194
|
+
* silence, so the event discarded would as often be a real one.
|
|
195
|
+
*
|
|
196
|
+
* @param direction Where to move; see {@link AxFocusDirection}.
|
|
197
|
+
* @param options Timeout, and whether to draw the on-device highlight.
|
|
198
|
+
*/
|
|
199
|
+
moveFocus(direction: AxFocusDirection, options?: InspectOptions): Promise<AxInspectedElement>;
|
|
200
|
+
/**
|
|
201
|
+
* Sends one move and waits for the focus event it produces.
|
|
202
|
+
*
|
|
203
|
+
* Assumes monitoring is already armed, so a walk can arm once instead of once
|
|
204
|
+
* per step.
|
|
205
|
+
*/
|
|
206
|
+
private requestFocusMove;
|
|
207
|
+
/** Arms monitoring for focus work and rejects a second concurrent caller. */
|
|
208
|
+
private beginFocusWork;
|
|
209
|
+
/** Undoes {@link beginFocusWork}, leaving monitoring armed for any observer. */
|
|
210
|
+
private endFocusWork;
|
|
211
|
+
/**
|
|
212
|
+
* Walks the focusable elements of whatever is on screen, in focus order.
|
|
213
|
+
*
|
|
214
|
+
* Moves focus forward, yielding each element, and stops once the sequence
|
|
215
|
+
* starts repeating — the daemon cycles rather than reporting an end.
|
|
216
|
+
*
|
|
217
|
+
* What counts as a repeat is the step *between* two elements, not an element,
|
|
218
|
+
* because nothing the daemon sends identifies one. {@link
|
|
219
|
+
* AxElement.platformElement} is a fresh handle per focus event, and
|
|
220
|
+
* `accessibilityIdentifier` is absent on most elements, so a screen of
|
|
221
|
+
* lookalikes — a photo grid announcing "Photo, Image" over and over — offers
|
|
222
|
+
* nothing to tell its elements apart. Runs of identical announcements are
|
|
223
|
+
* therefore collapsed for repeat detection and still yielded individually,
|
|
224
|
+
* and the walk stops only when a *pair* of announcements recurs.
|
|
225
|
+
*
|
|
226
|
+
* A repeated step is treated as a hypothesis rather than proof: the walk keeps
|
|
227
|
+
* going and only stops once the announcements have kept matching one period
|
|
228
|
+
* back for several more elements. A screen that happens to take the same step
|
|
229
|
+
* twice is therefore walked in full, where believing the first repeat would
|
|
230
|
+
* have cut it short.
|
|
231
|
+
*
|
|
232
|
+
* The consequence worth knowing: a screen whose announcements repeat over a
|
|
233
|
+
* long enough stretch to satisfy that check still ends early, and one where
|
|
234
|
+
* every element announces alike runs to the safety limit.
|
|
235
|
+
*
|
|
236
|
+
* A screen with nothing focusable yields nothing. Note the daemon reports what
|
|
237
|
+
* is actually drawn, so an app that has not rendered looks empty.
|
|
238
|
+
*
|
|
239
|
+
* Moving focus is a device-wide action: it leaves the focus wherever the walk
|
|
240
|
+
* finished.
|
|
241
|
+
*
|
|
242
|
+
* Read an element's attributes **inside** the loop. `element` is only valid
|
|
243
|
+
* while it holds focus — {@link getElementAttributeValue} returns real values
|
|
244
|
+
* for the element being yielded and `null` for one the walk has moved past.
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* ```ts
|
|
248
|
+
* for await (const focused of audit.walkElements()) {
|
|
249
|
+
* const basic = focused.sections.find((section) => section.title === 'Basic');
|
|
250
|
+
* const label = basic?.attributes.find((attribute) => attribute.name === 'Label');
|
|
251
|
+
* // Read now: after the next iteration this element is no longer focused.
|
|
252
|
+
* const value = label && focused.element
|
|
253
|
+
* ? await audit.getElementAttributeValue(focused.element, label)
|
|
254
|
+
* : undefined;
|
|
255
|
+
* }
|
|
256
|
+
* ```
|
|
257
|
+
*
|
|
258
|
+
* @param options Timeout per step, and whether to draw the on-device highlight.
|
|
259
|
+
*/
|
|
260
|
+
walkElements(options?: InspectOptions): AsyncGenerator<AxInspectedElement, void, unknown>;
|
|
165
261
|
/**
|
|
166
262
|
* Reads one attribute's value for an element.
|
|
167
263
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/accessibility-audit/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAC,cAAc,EAAsB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EACL,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EAKxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,mBAAmB,EAAE,KAAK,aAAa,EAAC,MAAM,oBAAoB,CAAC;AA8C3E;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,yBAAyB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/accessibility-audit/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,36 @@ const SETTING_VALIDATORS = new Map([
|
|
|
42
42
|
const MONITORED_EVENT_FOCUS = 2;
|
|
43
43
|
/** Value that disarms monitoring. */
|
|
44
44
|
const MONITORED_EVENT_OFF = 0;
|
|
45
|
+
/**
|
|
46
|
+
* Where {@link AccessibilityAuditService.moveFocus} sends the accessibility
|
|
47
|
+
* focus. These are the daemon's own `direction` values, verified live.
|
|
48
|
+
*/
|
|
49
|
+
export var AxFocusDirection;
|
|
50
|
+
(function (AxFocusDirection) {
|
|
51
|
+
AxFocusDirection[AxFocusDirection["Previous"] = 3] = "Previous";
|
|
52
|
+
AxFocusDirection[AxFocusDirection["Next"] = 4] = "Next";
|
|
53
|
+
AxFocusDirection[AxFocusDirection["First"] = 5] = "First";
|
|
54
|
+
AxFocusDirection[AxFocusDirection["Last"] = 6] = "Last";
|
|
55
|
+
})(AxFocusDirection || (AxFocusDirection = {}));
|
|
56
|
+
/** Default wait for the focus event a move produces. */
|
|
57
|
+
const DEFAULT_FOCUS_TIMEOUT_MS = 15000;
|
|
58
|
+
/**
|
|
59
|
+
* How many further elements must keep matching before a repeated step is taken
|
|
60
|
+
* as proof the walk has come round again.
|
|
61
|
+
*/
|
|
62
|
+
const WALK_PERIOD_CONFIRM_STEPS = 6;
|
|
63
|
+
/** Safety valve for {@link AccessibilityAuditService.walkElements}. */
|
|
64
|
+
const MAX_WALK_ELEMENTS = 1000;
|
|
65
|
+
/**
|
|
66
|
+
* How long to wait for the move onto the first element that opens a walk.
|
|
67
|
+
*
|
|
68
|
+
* When focus already sits there the daemon stays silent rather than answering,
|
|
69
|
+
* so this wait is what the walk pays to find that out. A move that is going to
|
|
70
|
+
* be answered is answered in tens of milliseconds, so this stays well clear of
|
|
71
|
+
* the caller's own budget, which would otherwise be spent in full before the
|
|
72
|
+
* walk could start.
|
|
73
|
+
*/
|
|
74
|
+
const FOCUS_FIRST_PROBE_TIMEOUT_MS = 2000;
|
|
45
75
|
/**
|
|
46
76
|
* CoreDevice accessibility audit service
|
|
47
77
|
* (`com.apple.accessibility.axAuditDaemon.remoteserver`) — the backend behind
|
|
@@ -67,6 +97,7 @@ export class AccessibilityAuditService {
|
|
|
67
97
|
static RSD_SERVICE_NAME = AxAuditDtxTransport.RSD_SERVICE_NAME;
|
|
68
98
|
/** Live {@link observeFocusedElement} subscriptions; monitoring stays armed while > 0. */
|
|
69
99
|
observerCount = 0;
|
|
100
|
+
focusMoveInFlight = false;
|
|
70
101
|
/** Guards {@link runAudit} against overlapping calls on one instance. */
|
|
71
102
|
auditInFlight = false;
|
|
72
103
|
/**
|
|
@@ -343,6 +374,234 @@ export class AccessibilityAuditService {
|
|
|
343
374
|
}
|
|
344
375
|
};
|
|
345
376
|
}
|
|
377
|
+
/**
|
|
378
|
+
* Moves the device's accessibility focus and resolves with the element it
|
|
379
|
+
* lands on — the same panel {@link getFocusedElement} returns, plus a handle
|
|
380
|
+
* in `element`.
|
|
381
|
+
*
|
|
382
|
+
* The daemon only reports focus that actually *changed*, so a move with
|
|
383
|
+
* nowhere to go — `First` when focus is already on the first element —
|
|
384
|
+
* emits nothing and rejects on timeout. Focus does wrap: `Next` from the last
|
|
385
|
+
* element returns to the first.
|
|
386
|
+
*
|
|
387
|
+
* Only one focus move may be in flight per instance — a second concurrent call
|
|
388
|
+
* rejects, since both would be resolved by the same push.
|
|
389
|
+
*
|
|
390
|
+
* On timeout the move has already been sent, and nothing ties the daemon's
|
|
391
|
+
* push back to the move that caused it. A push landing after the wait gave up
|
|
392
|
+
* is delivered to the next caller, which then sees a stale element — so treat
|
|
393
|
+
* a timeout as "this connection is briefly out of step" and let it settle.
|
|
394
|
+
* Draining blindly does not work: a move that changes nothing is answered with
|
|
395
|
+
* silence, so the event discarded would as often be a real one.
|
|
396
|
+
*
|
|
397
|
+
* @param direction Where to move; see {@link AxFocusDirection}.
|
|
398
|
+
* @param options Timeout, and whether to draw the on-device highlight.
|
|
399
|
+
*/
|
|
400
|
+
async moveFocus(direction, options = {}) {
|
|
401
|
+
const { timeoutMs = DEFAULT_FOCUS_TIMEOUT_MS, showVisuals = false } = options;
|
|
402
|
+
this.beginFocusWork(showVisuals);
|
|
403
|
+
try {
|
|
404
|
+
return await this.requestFocusMove(direction, timeoutMs);
|
|
405
|
+
}
|
|
406
|
+
finally {
|
|
407
|
+
this.endFocusWork(showVisuals);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Sends one move and waits for the focus event it produces.
|
|
412
|
+
*
|
|
413
|
+
* Assumes monitoring is already armed, so a walk can arm once instead of once
|
|
414
|
+
* per step.
|
|
415
|
+
*/
|
|
416
|
+
async requestFocusMove(direction, timeoutMs) {
|
|
417
|
+
// Registered before the move is sent so the push cannot be missed, and
|
|
418
|
+
// awaited unconditionally: an abandoned waiter rejects with nothing
|
|
419
|
+
// listening once the connection closes, which is an unhandled rejection
|
|
420
|
+
// rather than an error the caller can catch.
|
|
421
|
+
const pushed = this.transport.waitForInbound('hostInspectorCurrentElementChanged:', timeoutMs);
|
|
422
|
+
const aux = new MessageAux();
|
|
423
|
+
// Every value is envelope-wrapped: a bare `{direction: n}` is accepted on
|
|
424
|
+
// the wire but moves nothing.
|
|
425
|
+
aux.appendObj({
|
|
426
|
+
ObjectType: 'passthrough',
|
|
427
|
+
Value: {
|
|
428
|
+
allowNonAX: { ObjectType: 'passthrough', Value: 0 },
|
|
429
|
+
direction: { ObjectType: 'passthrough', Value: direction },
|
|
430
|
+
includeContainers: { ObjectType: 'passthrough', Value: 1 },
|
|
431
|
+
},
|
|
432
|
+
});
|
|
433
|
+
this.transport.invokeOneway('deviceInspectorMoveWithOptions:', aux);
|
|
434
|
+
const [payload] = await pushed;
|
|
435
|
+
return toInspectedElement(deserializeAxObject(payload));
|
|
436
|
+
}
|
|
437
|
+
/** Arms monitoring for focus work and rejects a second concurrent caller. */
|
|
438
|
+
beginFocusWork(showVisuals) {
|
|
439
|
+
if (this.focusMoveInFlight) {
|
|
440
|
+
throw new Error('A focus move is already running on this service instance; await it or use a second instance');
|
|
441
|
+
}
|
|
442
|
+
this.focusMoveInFlight = true;
|
|
443
|
+
this.setMonitoredEventType(MONITORED_EVENT_FOCUS);
|
|
444
|
+
if (showVisuals) {
|
|
445
|
+
this.setShowVisuals(true);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/** Undoes {@link beginFocusWork}, leaving monitoring armed for any observer. */
|
|
449
|
+
endFocusWork(showVisuals) {
|
|
450
|
+
this.focusMoveInFlight = false;
|
|
451
|
+
if (showVisuals) {
|
|
452
|
+
this.setShowVisuals(false);
|
|
453
|
+
}
|
|
454
|
+
if (this.observerCount === 0) {
|
|
455
|
+
this.setMonitoredEventType(MONITORED_EVENT_OFF);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Walks the focusable elements of whatever is on screen, in focus order.
|
|
460
|
+
*
|
|
461
|
+
* Moves focus forward, yielding each element, and stops once the sequence
|
|
462
|
+
* starts repeating — the daemon cycles rather than reporting an end.
|
|
463
|
+
*
|
|
464
|
+
* What counts as a repeat is the step *between* two elements, not an element,
|
|
465
|
+
* because nothing the daemon sends identifies one. {@link
|
|
466
|
+
* AxElement.platformElement} is a fresh handle per focus event, and
|
|
467
|
+
* `accessibilityIdentifier` is absent on most elements, so a screen of
|
|
468
|
+
* lookalikes — a photo grid announcing "Photo, Image" over and over — offers
|
|
469
|
+
* nothing to tell its elements apart. Runs of identical announcements are
|
|
470
|
+
* therefore collapsed for repeat detection and still yielded individually,
|
|
471
|
+
* and the walk stops only when a *pair* of announcements recurs.
|
|
472
|
+
*
|
|
473
|
+
* A repeated step is treated as a hypothesis rather than proof: the walk keeps
|
|
474
|
+
* going and only stops once the announcements have kept matching one period
|
|
475
|
+
* back for several more elements. A screen that happens to take the same step
|
|
476
|
+
* twice is therefore walked in full, where believing the first repeat would
|
|
477
|
+
* have cut it short.
|
|
478
|
+
*
|
|
479
|
+
* The consequence worth knowing: a screen whose announcements repeat over a
|
|
480
|
+
* long enough stretch to satisfy that check still ends early, and one where
|
|
481
|
+
* every element announces alike runs to the safety limit.
|
|
482
|
+
*
|
|
483
|
+
* A screen with nothing focusable yields nothing. Note the daemon reports what
|
|
484
|
+
* is actually drawn, so an app that has not rendered looks empty.
|
|
485
|
+
*
|
|
486
|
+
* Moving focus is a device-wide action: it leaves the focus wherever the walk
|
|
487
|
+
* finished.
|
|
488
|
+
*
|
|
489
|
+
* Read an element's attributes **inside** the loop. `element` is only valid
|
|
490
|
+
* while it holds focus — {@link getElementAttributeValue} returns real values
|
|
491
|
+
* for the element being yielded and `null` for one the walk has moved past.
|
|
492
|
+
*
|
|
493
|
+
* @example
|
|
494
|
+
* ```ts
|
|
495
|
+
* for await (const focused of audit.walkElements()) {
|
|
496
|
+
* const basic = focused.sections.find((section) => section.title === 'Basic');
|
|
497
|
+
* const label = basic?.attributes.find((attribute) => attribute.name === 'Label');
|
|
498
|
+
* // Read now: after the next iteration this element is no longer focused.
|
|
499
|
+
* const value = label && focused.element
|
|
500
|
+
* ? await audit.getElementAttributeValue(focused.element, label)
|
|
501
|
+
* : undefined;
|
|
502
|
+
* }
|
|
503
|
+
* ```
|
|
504
|
+
*
|
|
505
|
+
* @param options Timeout per step, and whether to draw the on-device highlight.
|
|
506
|
+
*/
|
|
507
|
+
async *walkElements(options = {}) {
|
|
508
|
+
const { timeoutMs = DEFAULT_FOCUS_TIMEOUT_MS, showVisuals = false } = options;
|
|
509
|
+
/** Every announcement seen so far, so a candidate period can be checked against it. */
|
|
510
|
+
const history = [];
|
|
511
|
+
/** Where each step between two announcements was first seen. */
|
|
512
|
+
const firstSeen = new Map();
|
|
513
|
+
/** Elements not yet known to be new; dropped if the walk turns out to be repeating. */
|
|
514
|
+
let held = [];
|
|
515
|
+
let candidate;
|
|
516
|
+
this.beginFocusWork(showVisuals);
|
|
517
|
+
try {
|
|
518
|
+
for (let step = 0; step < MAX_WALK_ELEMENTS; step += 1) {
|
|
519
|
+
let element;
|
|
520
|
+
try {
|
|
521
|
+
element =
|
|
522
|
+
step === 0
|
|
523
|
+
? await this.requestFocusMove(AxFocusDirection.First, Math.min(timeoutMs, FOCUS_FIRST_PROBE_TIMEOUT_MS))
|
|
524
|
+
: await this.requestFocusMove(AxFocusDirection.Next, timeoutMs);
|
|
525
|
+
}
|
|
526
|
+
catch {
|
|
527
|
+
if (step > 0) {
|
|
528
|
+
// Focus stopped moving. That is how a screen with a single focusable
|
|
529
|
+
// element ends, so the walk finishes with what it has rather than
|
|
530
|
+
// discarding it and rejecting.
|
|
531
|
+
log.debug('Focus stopped moving; ending the walk');
|
|
532
|
+
break;
|
|
533
|
+
}
|
|
534
|
+
// The opening move changed nothing, so focus already sits where the
|
|
535
|
+
// walk would have put it. `deviceInspectorFocusOnElement:` cannot be
|
|
536
|
+
// used to pick it up — it answers with a panel carrying no element
|
|
537
|
+
// handle — so the walk simply advances from here. Focus cycles, so
|
|
538
|
+
// every element is still reached, just starting one along.
|
|
539
|
+
log.debug('Opening move changed nothing; walking on from where focus is');
|
|
540
|
+
continue;
|
|
541
|
+
}
|
|
542
|
+
const announcement = element.element?.platformElement
|
|
543
|
+
? (element.caption ?? element.spokenDescription)
|
|
544
|
+
: undefined;
|
|
545
|
+
if (announcement === undefined) {
|
|
546
|
+
// Nothing focusable, or nothing said about it: an empty or undrawn screen.
|
|
547
|
+
log.debug('Focus returned nothing to identify; ending the walk');
|
|
548
|
+
break;
|
|
549
|
+
}
|
|
550
|
+
const index = history.length;
|
|
551
|
+
history.push(announcement);
|
|
552
|
+
if (index > 0 && announcement !== history[index - 1]) {
|
|
553
|
+
const transition = `${history[index - 1]}\u0000${announcement}`;
|
|
554
|
+
// Kept at its earliest index: the distance back to the *first* time a
|
|
555
|
+
// step was taken is what gives the true period.
|
|
556
|
+
const seenAt = firstSeen.get(transition);
|
|
557
|
+
if (seenAt === undefined) {
|
|
558
|
+
firstSeen.set(transition, index);
|
|
559
|
+
}
|
|
560
|
+
else if (!candidate) {
|
|
561
|
+
// A repeated step only *suggests* the walk has come round again.
|
|
562
|
+
// Confirm it before believing it, by checking the announcements keep
|
|
563
|
+
// matching one period back.
|
|
564
|
+
candidate = { period: index - seenAt, confirmed: 0 };
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
if (candidate) {
|
|
568
|
+
const matches = history[index] === history[index - candidate.period];
|
|
569
|
+
if (matches) {
|
|
570
|
+
candidate.confirmed += 1;
|
|
571
|
+
held.push(element);
|
|
572
|
+
if (candidate.confirmed >= WALK_PERIOD_CONFIRM_STEPS) {
|
|
573
|
+
// The sequence really is repeating, so everything held back is a
|
|
574
|
+
// revisit and goes with it.
|
|
575
|
+
log.debug(`Walk came full circle after ${candidate.period} element(s)`);
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
continue;
|
|
579
|
+
}
|
|
580
|
+
// The repeat was a coincidence — a screen may well take the same step
|
|
581
|
+
// twice without having come round. Nothing held was a revisit.
|
|
582
|
+
log.debug('A repeated step did not hold up; continuing the walk');
|
|
583
|
+
candidate = undefined;
|
|
584
|
+
yield* held;
|
|
585
|
+
held = [];
|
|
586
|
+
}
|
|
587
|
+
// Held back only to see whether it was the wrap; it was not.
|
|
588
|
+
yield* held;
|
|
589
|
+
held = [];
|
|
590
|
+
if (index > 0 && announcement === history[0]) {
|
|
591
|
+
// Possibly the wrap. Decided on the next step, so that the element the
|
|
592
|
+
// walk opened on is not yielded twice.
|
|
593
|
+
held.push(element);
|
|
594
|
+
}
|
|
595
|
+
else {
|
|
596
|
+
yield element;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
yield* held;
|
|
600
|
+
}
|
|
601
|
+
finally {
|
|
602
|
+
this.endFocusWork(showVisuals);
|
|
603
|
+
}
|
|
604
|
+
}
|
|
346
605
|
/**
|
|
347
606
|
* Reads one attribute's value for an element.
|
|
348
607
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/ios/accessibility-audit/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/ios/accessibility-audit/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -79,6 +79,7 @@ export type {
|
|
|
79
79
|
AxInspectorSection,
|
|
80
80
|
} from './services/ios/accessibility-audit/ax-element.js';
|
|
81
81
|
export {serializeAxSetting} from './services/ios/accessibility-audit/index.js';
|
|
82
|
+
export {AxFocusDirection} from './services/ios/accessibility-audit/index.js';
|
|
82
83
|
export type {InspectOptions, RunAuditOptions, AxAuditIssue} from './services/ios/accessibility-audit/index.js';
|
|
83
84
|
export {CoreDeviceInfoService} from './services/ios/device-info/index.js';
|
|
84
85
|
export type {
|
|
@@ -52,6 +52,13 @@ export interface AxInspectorSection {
|
|
|
52
52
|
|
|
53
53
|
/** The inspector panel the device pushes when the focused element changes. */
|
|
54
54
|
export interface AxInspectedElement {
|
|
55
|
+
/**
|
|
56
|
+
* A handle to the focused element, when the daemon sends one.
|
|
57
|
+
*
|
|
58
|
+
* Present on focus pushes, which lets a walk both detect revisits and read
|
|
59
|
+
* attributes for each element it reaches.
|
|
60
|
+
*/
|
|
61
|
+
element?: AxElement;
|
|
55
62
|
/** What VoiceOver would announce, when the daemon provides it. */
|
|
56
63
|
spokenDescription?: string;
|
|
57
64
|
/** The caption shown above the panel, when present. */
|
|
@@ -175,6 +182,7 @@ export function toInspectedElement(value: unknown): AxInspectedElement {
|
|
|
175
182
|
});
|
|
176
183
|
}
|
|
177
184
|
return {
|
|
185
|
+
element: toAxElement(fields.ElementValue_v1),
|
|
178
186
|
spokenDescription:
|
|
179
187
|
typeof fields.SpokenDescriptionValue_v1 === 'string' ? fields.SpokenDescriptionValue_v1 : undefined,
|
|
180
188
|
caption: typeof fields.CaptionTextValue_v1 === 'string' ? fields.CaptionTextValue_v1 : undefined,
|
|
@@ -58,6 +58,40 @@ const MONITORED_EVENT_FOCUS = 2;
|
|
|
58
58
|
/** Value that disarms monitoring. */
|
|
59
59
|
const MONITORED_EVENT_OFF = 0;
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Where {@link AccessibilityAuditService.moveFocus} sends the accessibility
|
|
63
|
+
* focus. These are the daemon's own `direction` values, verified live.
|
|
64
|
+
*/
|
|
65
|
+
export enum AxFocusDirection {
|
|
66
|
+
Previous = 3,
|
|
67
|
+
Next = 4,
|
|
68
|
+
First = 5,
|
|
69
|
+
Last = 6,
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Default wait for the focus event a move produces. */
|
|
73
|
+
const DEFAULT_FOCUS_TIMEOUT_MS = 15000;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* How many further elements must keep matching before a repeated step is taken
|
|
77
|
+
* as proof the walk has come round again.
|
|
78
|
+
*/
|
|
79
|
+
const WALK_PERIOD_CONFIRM_STEPS = 6;
|
|
80
|
+
|
|
81
|
+
/** Safety valve for {@link AccessibilityAuditService.walkElements}. */
|
|
82
|
+
const MAX_WALK_ELEMENTS = 1000;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* How long to wait for the move onto the first element that opens a walk.
|
|
86
|
+
*
|
|
87
|
+
* When focus already sits there the daemon stays silent rather than answering,
|
|
88
|
+
* so this wait is what the walk pays to find that out. A move that is going to
|
|
89
|
+
* be answered is answered in tens of milliseconds, so this stays well clear of
|
|
90
|
+
* the caller's own budget, which would otherwise be spent in full before the
|
|
91
|
+
* walk could start.
|
|
92
|
+
*/
|
|
93
|
+
const FOCUS_FIRST_PROBE_TIMEOUT_MS = 2000;
|
|
94
|
+
|
|
61
95
|
/**
|
|
62
96
|
* One accessibility setting reported by
|
|
63
97
|
* {@link AccessibilityAuditService.getAccessibilitySettings}.
|
|
@@ -105,6 +139,7 @@ export class AccessibilityAuditService {
|
|
|
105
139
|
|
|
106
140
|
/** Live {@link observeFocusedElement} subscriptions; monitoring stays armed while > 0. */
|
|
107
141
|
private observerCount = 0;
|
|
142
|
+
private focusMoveInFlight = false;
|
|
108
143
|
|
|
109
144
|
/** Guards {@link runAudit} against overlapping calls on one instance. */
|
|
110
145
|
private auditInFlight = false;
|
|
@@ -410,6 +445,241 @@ export class AccessibilityAuditService {
|
|
|
410
445
|
};
|
|
411
446
|
}
|
|
412
447
|
|
|
448
|
+
/**
|
|
449
|
+
* Moves the device's accessibility focus and resolves with the element it
|
|
450
|
+
* lands on — the same panel {@link getFocusedElement} returns, plus a handle
|
|
451
|
+
* in `element`.
|
|
452
|
+
*
|
|
453
|
+
* The daemon only reports focus that actually *changed*, so a move with
|
|
454
|
+
* nowhere to go — `First` when focus is already on the first element —
|
|
455
|
+
* emits nothing and rejects on timeout. Focus does wrap: `Next` from the last
|
|
456
|
+
* element returns to the first.
|
|
457
|
+
*
|
|
458
|
+
* Only one focus move may be in flight per instance — a second concurrent call
|
|
459
|
+
* rejects, since both would be resolved by the same push.
|
|
460
|
+
*
|
|
461
|
+
* On timeout the move has already been sent, and nothing ties the daemon's
|
|
462
|
+
* push back to the move that caused it. A push landing after the wait gave up
|
|
463
|
+
* is delivered to the next caller, which then sees a stale element — so treat
|
|
464
|
+
* a timeout as "this connection is briefly out of step" and let it settle.
|
|
465
|
+
* Draining blindly does not work: a move that changes nothing is answered with
|
|
466
|
+
* silence, so the event discarded would as often be a real one.
|
|
467
|
+
*
|
|
468
|
+
* @param direction Where to move; see {@link AxFocusDirection}.
|
|
469
|
+
* @param options Timeout, and whether to draw the on-device highlight.
|
|
470
|
+
*/
|
|
471
|
+
async moveFocus(direction: AxFocusDirection, options: InspectOptions = {}): Promise<AxInspectedElement> {
|
|
472
|
+
const {timeoutMs = DEFAULT_FOCUS_TIMEOUT_MS, showVisuals = false} = options;
|
|
473
|
+
this.beginFocusWork(showVisuals);
|
|
474
|
+
try {
|
|
475
|
+
return await this.requestFocusMove(direction, timeoutMs);
|
|
476
|
+
} finally {
|
|
477
|
+
this.endFocusWork(showVisuals);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Sends one move and waits for the focus event it produces.
|
|
483
|
+
*
|
|
484
|
+
* Assumes monitoring is already armed, so a walk can arm once instead of once
|
|
485
|
+
* per step.
|
|
486
|
+
*/
|
|
487
|
+
private async requestFocusMove(direction: AxFocusDirection, timeoutMs: number): Promise<AxInspectedElement> {
|
|
488
|
+
// Registered before the move is sent so the push cannot be missed, and
|
|
489
|
+
// awaited unconditionally: an abandoned waiter rejects with nothing
|
|
490
|
+
// listening once the connection closes, which is an unhandled rejection
|
|
491
|
+
// rather than an error the caller can catch.
|
|
492
|
+
const pushed = this.transport.waitForInbound('hostInspectorCurrentElementChanged:', timeoutMs);
|
|
493
|
+
const aux = new MessageAux();
|
|
494
|
+
// Every value is envelope-wrapped: a bare `{direction: n}` is accepted on
|
|
495
|
+
// the wire but moves nothing.
|
|
496
|
+
aux.appendObj({
|
|
497
|
+
ObjectType: 'passthrough',
|
|
498
|
+
Value: {
|
|
499
|
+
allowNonAX: {ObjectType: 'passthrough', Value: 0},
|
|
500
|
+
direction: {ObjectType: 'passthrough', Value: direction},
|
|
501
|
+
includeContainers: {ObjectType: 'passthrough', Value: 1},
|
|
502
|
+
},
|
|
503
|
+
});
|
|
504
|
+
this.transport.invokeOneway('deviceInspectorMoveWithOptions:', aux);
|
|
505
|
+
const [payload] = await pushed;
|
|
506
|
+
return toInspectedElement(deserializeAxObject(payload));
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
/** Arms monitoring for focus work and rejects a second concurrent caller. */
|
|
510
|
+
private beginFocusWork(showVisuals: boolean): void {
|
|
511
|
+
if (this.focusMoveInFlight) {
|
|
512
|
+
throw new Error('A focus move is already running on this service instance; await it or use a second instance');
|
|
513
|
+
}
|
|
514
|
+
this.focusMoveInFlight = true;
|
|
515
|
+
this.setMonitoredEventType(MONITORED_EVENT_FOCUS);
|
|
516
|
+
if (showVisuals) {
|
|
517
|
+
this.setShowVisuals(true);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/** Undoes {@link beginFocusWork}, leaving monitoring armed for any observer. */
|
|
522
|
+
private endFocusWork(showVisuals: boolean): void {
|
|
523
|
+
this.focusMoveInFlight = false;
|
|
524
|
+
if (showVisuals) {
|
|
525
|
+
this.setShowVisuals(false);
|
|
526
|
+
}
|
|
527
|
+
if (this.observerCount === 0) {
|
|
528
|
+
this.setMonitoredEventType(MONITORED_EVENT_OFF);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/**
|
|
533
|
+
* Walks the focusable elements of whatever is on screen, in focus order.
|
|
534
|
+
*
|
|
535
|
+
* Moves focus forward, yielding each element, and stops once the sequence
|
|
536
|
+
* starts repeating — the daemon cycles rather than reporting an end.
|
|
537
|
+
*
|
|
538
|
+
* What counts as a repeat is the step *between* two elements, not an element,
|
|
539
|
+
* because nothing the daemon sends identifies one. {@link
|
|
540
|
+
* AxElement.platformElement} is a fresh handle per focus event, and
|
|
541
|
+
* `accessibilityIdentifier` is absent on most elements, so a screen of
|
|
542
|
+
* lookalikes — a photo grid announcing "Photo, Image" over and over — offers
|
|
543
|
+
* nothing to tell its elements apart. Runs of identical announcements are
|
|
544
|
+
* therefore collapsed for repeat detection and still yielded individually,
|
|
545
|
+
* and the walk stops only when a *pair* of announcements recurs.
|
|
546
|
+
*
|
|
547
|
+
* A repeated step is treated as a hypothesis rather than proof: the walk keeps
|
|
548
|
+
* going and only stops once the announcements have kept matching one period
|
|
549
|
+
* back for several more elements. A screen that happens to take the same step
|
|
550
|
+
* twice is therefore walked in full, where believing the first repeat would
|
|
551
|
+
* have cut it short.
|
|
552
|
+
*
|
|
553
|
+
* The consequence worth knowing: a screen whose announcements repeat over a
|
|
554
|
+
* long enough stretch to satisfy that check still ends early, and one where
|
|
555
|
+
* every element announces alike runs to the safety limit.
|
|
556
|
+
*
|
|
557
|
+
* A screen with nothing focusable yields nothing. Note the daemon reports what
|
|
558
|
+
* is actually drawn, so an app that has not rendered looks empty.
|
|
559
|
+
*
|
|
560
|
+
* Moving focus is a device-wide action: it leaves the focus wherever the walk
|
|
561
|
+
* finished.
|
|
562
|
+
*
|
|
563
|
+
* Read an element's attributes **inside** the loop. `element` is only valid
|
|
564
|
+
* while it holds focus — {@link getElementAttributeValue} returns real values
|
|
565
|
+
* for the element being yielded and `null` for one the walk has moved past.
|
|
566
|
+
*
|
|
567
|
+
* @example
|
|
568
|
+
* ```ts
|
|
569
|
+
* for await (const focused of audit.walkElements()) {
|
|
570
|
+
* const basic = focused.sections.find((section) => section.title === 'Basic');
|
|
571
|
+
* const label = basic?.attributes.find((attribute) => attribute.name === 'Label');
|
|
572
|
+
* // Read now: after the next iteration this element is no longer focused.
|
|
573
|
+
* const value = label && focused.element
|
|
574
|
+
* ? await audit.getElementAttributeValue(focused.element, label)
|
|
575
|
+
* : undefined;
|
|
576
|
+
* }
|
|
577
|
+
* ```
|
|
578
|
+
*
|
|
579
|
+
* @param options Timeout per step, and whether to draw the on-device highlight.
|
|
580
|
+
*/
|
|
581
|
+
async *walkElements(options: InspectOptions = {}): AsyncGenerator<AxInspectedElement, void, unknown> {
|
|
582
|
+
const {timeoutMs = DEFAULT_FOCUS_TIMEOUT_MS, showVisuals = false} = options;
|
|
583
|
+
/** Every announcement seen so far, so a candidate period can be checked against it. */
|
|
584
|
+
const history: string[] = [];
|
|
585
|
+
/** Where each step between two announcements was first seen. */
|
|
586
|
+
const firstSeen = new Map<string, number>();
|
|
587
|
+
/** Elements not yet known to be new; dropped if the walk turns out to be repeating. */
|
|
588
|
+
let held: AxInspectedElement[] = [];
|
|
589
|
+
let candidate: {period: number; confirmed: number} | undefined;
|
|
590
|
+
|
|
591
|
+
this.beginFocusWork(showVisuals);
|
|
592
|
+
try {
|
|
593
|
+
for (let step = 0; step < MAX_WALK_ELEMENTS; step += 1) {
|
|
594
|
+
let element: AxInspectedElement;
|
|
595
|
+
try {
|
|
596
|
+
element =
|
|
597
|
+
step === 0
|
|
598
|
+
? await this.requestFocusMove(AxFocusDirection.First, Math.min(timeoutMs, FOCUS_FIRST_PROBE_TIMEOUT_MS))
|
|
599
|
+
: await this.requestFocusMove(AxFocusDirection.Next, timeoutMs);
|
|
600
|
+
} catch {
|
|
601
|
+
if (step > 0) {
|
|
602
|
+
// Focus stopped moving. That is how a screen with a single focusable
|
|
603
|
+
// element ends, so the walk finishes with what it has rather than
|
|
604
|
+
// discarding it and rejecting.
|
|
605
|
+
log.debug('Focus stopped moving; ending the walk');
|
|
606
|
+
break;
|
|
607
|
+
}
|
|
608
|
+
// The opening move changed nothing, so focus already sits where the
|
|
609
|
+
// walk would have put it. `deviceInspectorFocusOnElement:` cannot be
|
|
610
|
+
// used to pick it up — it answers with a panel carrying no element
|
|
611
|
+
// handle — so the walk simply advances from here. Focus cycles, so
|
|
612
|
+
// every element is still reached, just starting one along.
|
|
613
|
+
log.debug('Opening move changed nothing; walking on from where focus is');
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
const announcement = element.element?.platformElement
|
|
618
|
+
? (element.caption ?? element.spokenDescription)
|
|
619
|
+
: undefined;
|
|
620
|
+
if (announcement === undefined) {
|
|
621
|
+
// Nothing focusable, or nothing said about it: an empty or undrawn screen.
|
|
622
|
+
log.debug('Focus returned nothing to identify; ending the walk');
|
|
623
|
+
break;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
const index = history.length;
|
|
627
|
+
history.push(announcement);
|
|
628
|
+
if (index > 0 && announcement !== history[index - 1]) {
|
|
629
|
+
const transition = `${history[index - 1]}\u0000${announcement}`;
|
|
630
|
+
// Kept at its earliest index: the distance back to the *first* time a
|
|
631
|
+
// step was taken is what gives the true period.
|
|
632
|
+
const seenAt = firstSeen.get(transition);
|
|
633
|
+
if (seenAt === undefined) {
|
|
634
|
+
firstSeen.set(transition, index);
|
|
635
|
+
} else if (!candidate) {
|
|
636
|
+
// A repeated step only *suggests* the walk has come round again.
|
|
637
|
+
// Confirm it before believing it, by checking the announcements keep
|
|
638
|
+
// matching one period back.
|
|
639
|
+
candidate = {period: index - seenAt, confirmed: 0};
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
if (candidate) {
|
|
644
|
+
const matches = history[index] === history[index - candidate.period];
|
|
645
|
+
if (matches) {
|
|
646
|
+
candidate.confirmed += 1;
|
|
647
|
+
held.push(element);
|
|
648
|
+
if (candidate.confirmed >= WALK_PERIOD_CONFIRM_STEPS) {
|
|
649
|
+
// The sequence really is repeating, so everything held back is a
|
|
650
|
+
// revisit and goes with it.
|
|
651
|
+
log.debug(`Walk came full circle after ${candidate.period} element(s)`);
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
654
|
+
continue;
|
|
655
|
+
}
|
|
656
|
+
// The repeat was a coincidence — a screen may well take the same step
|
|
657
|
+
// twice without having come round. Nothing held was a revisit.
|
|
658
|
+
log.debug('A repeated step did not hold up; continuing the walk');
|
|
659
|
+
candidate = undefined;
|
|
660
|
+
yield* held;
|
|
661
|
+
held = [];
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
// Held back only to see whether it was the wrap; it was not.
|
|
665
|
+
yield* held;
|
|
666
|
+
held = [];
|
|
667
|
+
|
|
668
|
+
if (index > 0 && announcement === history[0]) {
|
|
669
|
+
// Possibly the wrap. Decided on the next step, so that the element the
|
|
670
|
+
// walk opened on is not yielded twice.
|
|
671
|
+
held.push(element);
|
|
672
|
+
} else {
|
|
673
|
+
yield element;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
yield* held;
|
|
678
|
+
} finally {
|
|
679
|
+
this.endFocusWork(showVisuals);
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
|
|
413
683
|
/**
|
|
414
684
|
* Reads one attribute's value for an element.
|
|
415
685
|
*
|