prowl-tools 0.1.5 → 0.1.7

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/dist/lib.js CHANGED
@@ -1,25 +1,41 @@
1
1
  import {
2
+ ANDROID_INTERACTIVE_CLASSES,
2
3
  ANDROID_KEYCODES,
4
+ ANDROID_MATCH_DIALECT,
3
5
  DEFAULT_AGENT_REQUEST_TIMEOUT_MS,
4
6
  DEFAULT_ANALYZE_TREE_DEPTH,
5
7
  DEFAULT_FLAKY_THRESHOLD,
6
8
  DEFAULT_REQUEST_TIMEOUT_MS,
7
9
  DEFAULT_SIMULATOR_LOCK_ROOT,
8
10
  DEFAULT_WDA_REQUEST_TIMEOUT_MS,
11
+ HELPER_BINARY,
9
12
  INTERACTIVE_ROLES,
13
+ IOS_INTERACTIVE_TYPES,
14
+ IOS_MATCH_DIALECT,
10
15
  IOS_PRESS_KEYS,
16
+ IOS_WINDOW_TYPE,
17
+ MACDRIVER_REPO,
18
+ MACDRIVER_SIGNING_AUTHORITY_PREFIX,
19
+ MACDRIVER_SIGNING_IDENTIFIER,
20
+ MACDRIVER_VERSION,
21
+ MACDRIVER_VERSION_PATTERN,
22
+ MACOS_MATCH_DIALECT,
23
+ NATIVE_ATTRIBUTE_MAP,
11
24
  SpawnMacHelperClient,
12
25
  UIA2_REMOTE_PORT,
13
26
  Uia2HttpError,
14
27
  Uia2Transport,
15
- WDA_RUNNER_APP_NAME,
16
28
  WDA_RUNNER_BUNDLE_ID,
29
+ WDA_USE_PORT_ENV,
17
30
  WEB_ONLY_STEP_TYPES,
18
31
  WdaHttpError,
19
32
  WdaTransport,
33
+ analyzeAndroidApp,
34
+ analyzeIosApp,
20
35
  analyzeMacApp,
21
36
  analyzePage,
22
37
  androidAppAllowedIdentities,
38
+ androidNodeToNative,
23
39
  androidQueryToLocator,
24
40
  assertAndroidAppAllowed,
25
41
  assertIosAppAllowed,
@@ -32,6 +48,8 @@ import {
32
48
  closeIosSession,
33
49
  closeMacSession,
34
50
  clusterFailures,
51
+ codesignVerifier,
52
+ collectMacdriverStatus,
35
53
  computeFlakeScore,
36
54
  createAndroidDriver,
37
55
  createIosDriver,
@@ -40,8 +58,12 @@ import {
40
58
  createUia2Session,
41
59
  createWdaAgentClient,
42
60
  createWdaSession,
61
+ decodeXmlEntities,
43
62
  defaultAgentConnector,
44
63
  defaultIosAgentConnector,
64
+ defaultWdaTestRunPreparer,
65
+ dittoExtractor,
66
+ downloadAndVerify,
45
67
  escapePredicateArg,
46
68
  escapeUiSelectorArg,
47
69
  extractElementId,
@@ -50,26 +72,54 @@ import {
50
72
  findFreePort,
51
73
  generateHunt,
52
74
  healSelector,
75
+ injectUsePortIntoXctestrun,
76
+ installMacdriver,
53
77
  interpolateHunt,
54
78
  iosAppAllowedIdentities,
79
+ iosNodeToNative,
55
80
  iosQueryToLocator,
81
+ isAndroidInteractive,
82
+ isIosInteractive,
56
83
  launchAndroidSession,
57
84
  launchIosSession,
58
85
  launchMacSession,
59
86
  listDevices,
60
87
  listSimulators,
88
+ macdriverAssetName,
89
+ macdriverAssetUrl,
61
90
  macdriverBuildInstructions,
91
+ macdriverChecksumName,
92
+ macdriverInstallRoot,
93
+ macdriverInstalledBinary,
94
+ macdriverReleaseTag,
95
+ macdriverVersionDir,
96
+ matchAndroidSelector,
97
+ matchIosSelector,
98
+ matchNativeTree,
99
+ nodeMatchesSelector,
62
100
  normalizeXcuiClassName,
63
101
  parseAaptPackage,
64
102
  parseAdbDevices,
103
+ parseAndroidHierarchy,
65
104
  parseAndroidSelector,
105
+ parseChecksumFile,
106
+ parseCodesignDetails,
66
107
  parseForwardPort,
108
+ parseIosHierarchy,
67
109
  parseIosSelector,
68
110
  parseMacSelector,
111
+ parseNativeSelector,
69
112
  parseSimctlDevices,
113
+ parseSnapshot,
70
114
  parseXcodeVersion,
115
+ parseXml,
116
+ qualifyResourceId,
117
+ quoteSelectorValue,
118
+ rankAndroidSelectors,
71
119
  rankFlaky,
120
+ rankIosSelectors,
72
121
  rankMacSelectors,
122
+ rankNativeSelectors,
73
123
  readHistory,
74
124
  readHuntHistory,
75
125
  readIosBundleIdentifier,
@@ -77,19 +127,30 @@ import {
77
127
  resolveAgentApks,
78
128
  resolveHelperBinary,
79
129
  resolveWdaProject,
80
- resolveWdaRunner,
130
+ resolveWdaTestRun,
81
131
  runHunt,
82
132
  runSuite,
133
+ runVersionProbe,
83
134
  selectDeviceSerial,
84
135
  selectSimulatorUdid,
136
+ sha256Hex,
137
+ shortIosType,
138
+ tccGuidance,
139
+ unquoteSelectorValue,
85
140
  unwrapAndroidTextSelector,
86
141
  unwrapIosTextSelector,
142
+ unwrapNativeTextSelector,
87
143
  updateBacklogFromSuite,
144
+ validateMacdriverArchiveEntries,
145
+ validateMacdriverVersion,
146
+ verifyMacdriverSignature,
88
147
  waitForAgentReady,
89
148
  waitForWdaReady,
90
149
  wdaCacheDir,
91
- webOnlyReason
92
- } from "./chunk-2KD2XCTH.js";
150
+ wdaTestRunArgs,
151
+ webOnlyReason,
152
+ zipinfoArchiveLister
153
+ } from "./chunk-R7NUH44M.js";
93
154
  import {
94
155
  configSchema,
95
156
  huntSchema,
@@ -99,29 +160,45 @@ import {
99
160
  loadHuntMeta,
100
161
  loadHuntTags,
101
162
  stepSchema
102
- } from "./chunk-ITOSUJCN.js";
163
+ } from "./chunk-O3OUTZ2P.js";
103
164
  export {
165
+ ANDROID_INTERACTIVE_CLASSES,
104
166
  ANDROID_KEYCODES,
167
+ ANDROID_MATCH_DIALECT,
105
168
  DEFAULT_AGENT_REQUEST_TIMEOUT_MS,
106
169
  DEFAULT_ANALYZE_TREE_DEPTH,
107
170
  DEFAULT_FLAKY_THRESHOLD,
108
171
  DEFAULT_REQUEST_TIMEOUT_MS,
109
172
  DEFAULT_SIMULATOR_LOCK_ROOT,
110
173
  DEFAULT_WDA_REQUEST_TIMEOUT_MS,
174
+ HELPER_BINARY,
111
175
  INTERACTIVE_ROLES,
176
+ IOS_INTERACTIVE_TYPES,
177
+ IOS_MATCH_DIALECT,
112
178
  IOS_PRESS_KEYS,
179
+ IOS_WINDOW_TYPE,
180
+ MACDRIVER_REPO,
181
+ MACDRIVER_SIGNING_AUTHORITY_PREFIX,
182
+ MACDRIVER_SIGNING_IDENTIFIER,
183
+ MACDRIVER_VERSION,
184
+ MACDRIVER_VERSION_PATTERN,
185
+ MACOS_MATCH_DIALECT,
186
+ NATIVE_ATTRIBUTE_MAP,
113
187
  SpawnMacHelperClient,
114
188
  UIA2_REMOTE_PORT,
115
189
  Uia2HttpError,
116
190
  Uia2Transport,
117
- WDA_RUNNER_APP_NAME,
118
191
  WDA_RUNNER_BUNDLE_ID,
192
+ WDA_USE_PORT_ENV,
119
193
  WEB_ONLY_STEP_TYPES,
120
194
  WdaHttpError,
121
195
  WdaTransport,
196
+ analyzeAndroidApp,
197
+ analyzeIosApp,
122
198
  analyzeMacApp,
123
199
  analyzePage,
124
200
  androidAppAllowedIdentities,
201
+ androidNodeToNative,
125
202
  androidQueryToLocator,
126
203
  assertAndroidAppAllowed,
127
204
  assertIosAppAllowed,
@@ -134,6 +211,8 @@ export {
134
211
  closeIosSession,
135
212
  closeMacSession,
136
213
  clusterFailures,
214
+ codesignVerifier,
215
+ collectMacdriverStatus,
137
216
  computeFlakeScore,
138
217
  configSchema,
139
218
  createAndroidDriver,
@@ -143,8 +222,12 @@ export {
143
222
  createUia2Session,
144
223
  createWdaAgentClient,
145
224
  createWdaSession,
225
+ decodeXmlEntities,
146
226
  defaultAgentConnector,
147
227
  defaultIosAgentConnector,
228
+ defaultWdaTestRunPreparer,
229
+ dittoExtractor,
230
+ downloadAndVerify,
148
231
  escapePredicateArg,
149
232
  escapeUiSelectorArg,
150
233
  extractElementId,
@@ -154,9 +237,14 @@ export {
154
237
  generateHunt,
155
238
  healSelector,
156
239
  huntSchema,
240
+ injectUsePortIntoXctestrun,
241
+ installMacdriver,
157
242
  interpolateHunt,
158
243
  iosAppAllowedIdentities,
244
+ iosNodeToNative,
159
245
  iosQueryToLocator,
246
+ isAndroidInteractive,
247
+ isIosInteractive,
160
248
  launchAndroidSession,
161
249
  launchIosSession,
162
250
  launchMacSession,
@@ -167,18 +255,41 @@ export {
167
255
  loadHunt,
168
256
  loadHuntMeta,
169
257
  loadHuntTags,
258
+ macdriverAssetName,
259
+ macdriverAssetUrl,
170
260
  macdriverBuildInstructions,
261
+ macdriverChecksumName,
262
+ macdriverInstallRoot,
263
+ macdriverInstalledBinary,
264
+ macdriverReleaseTag,
265
+ macdriverVersionDir,
266
+ matchAndroidSelector,
267
+ matchIosSelector,
268
+ matchNativeTree,
269
+ nodeMatchesSelector,
171
270
  normalizeXcuiClassName,
172
271
  parseAaptPackage,
173
272
  parseAdbDevices,
273
+ parseAndroidHierarchy,
174
274
  parseAndroidSelector,
275
+ parseChecksumFile,
276
+ parseCodesignDetails,
175
277
  parseForwardPort,
278
+ parseIosHierarchy,
176
279
  parseIosSelector,
177
280
  parseMacSelector,
281
+ parseNativeSelector,
178
282
  parseSimctlDevices,
283
+ parseSnapshot,
179
284
  parseXcodeVersion,
285
+ parseXml,
286
+ qualifyResourceId,
287
+ quoteSelectorValue,
288
+ rankAndroidSelectors,
180
289
  rankFlaky,
290
+ rankIosSelectors,
181
291
  rankMacSelectors,
292
+ rankNativeSelectors,
182
293
  readHistory,
183
294
  readHuntHistory,
184
295
  readIosBundleIdentifier,
@@ -186,18 +297,29 @@ export {
186
297
  resolveAgentApks,
187
298
  resolveHelperBinary,
188
299
  resolveWdaProject,
189
- resolveWdaRunner,
300
+ resolveWdaTestRun,
190
301
  runHunt,
191
302
  runSuite,
303
+ runVersionProbe,
192
304
  selectDeviceSerial,
193
305
  selectSimulatorUdid,
306
+ sha256Hex,
307
+ shortIosType,
194
308
  stepSchema,
309
+ tccGuidance,
310
+ unquoteSelectorValue,
195
311
  unwrapAndroidTextSelector,
196
312
  unwrapIosTextSelector,
313
+ unwrapNativeTextSelector,
197
314
  updateBacklogFromSuite,
315
+ validateMacdriverArchiveEntries,
316
+ validateMacdriverVersion,
317
+ verifyMacdriverSignature,
198
318
  waitForAgentReady,
199
319
  waitForWdaReady,
200
320
  wdaCacheDir,
201
- webOnlyReason
321
+ wdaTestRunArgs,
322
+ webOnlyReason,
323
+ zipinfoArchiveLister
202
324
  };
203
325
  //# sourceMappingURL=lib.js.map
@@ -10,7 +10,7 @@ import {
10
10
  loadHuntTags,
11
11
  resolveViewport,
12
12
  warnLegacyConfigDir
13
- } from "./chunk-ITOSUJCN.js";
13
+ } from "./chunk-O3OUTZ2P.js";
14
14
  export {
15
15
  CONFIG_DIR,
16
16
  LEGACY_CONFIG_DIR,
@@ -24,4 +24,4 @@ export {
24
24
  resolveViewport,
25
25
  warnLegacyConfigDir
26
26
  };
27
- //# sourceMappingURL=loader-FCXPARP7.js.map
27
+ //# sourceMappingURL=loader-X37URHUV.js.map
@@ -5,7 +5,7 @@
5
5
  #
6
6
  # Run it: prowl run hello
7
7
  #
8
- # Browse more hunt templates at https://hub.prowl.tools
8
+ # See .prowl/hunts/login-flow.yml for a fuller example (auth, secrets, assertions).
9
9
 
10
10
  name: hello
11
11
  description: Verify the target app loads successfully
@@ -0,0 +1,58 @@
1
+ # Login Flow
2
+ # ---
3
+ # Pattern: Authentication — email/password login with redirect verification
4
+ # What it tests: Fill credentials, submit, verify redirect to dashboard.
5
+ # Customize:
6
+ # - Update the selectors and URL paths to match your app's login page
7
+ # - Store credentials in .prowl/.env and reference them with {{VAR}}
8
+ #
9
+ # Tip: Use `prowl login` to capture auth state so other hunts can skip login.
10
+
11
+ name: login-flow
12
+ description: Log in with email and password, verify redirect to dashboard
13
+
14
+ tags:
15
+ - auth
16
+ - login
17
+ - credentials
18
+
19
+ # Store secrets in .prowl/.env — they'll be redacted in reports automatically.
20
+ # Example .env:
21
+ # TEST_EMAIL=user@example.com
22
+ # TEST_PASSWORD=secret123
23
+ vars:
24
+ EMAIL: "{{TEST_EMAIL}}"
25
+ PASSWORD: "{{TEST_PASSWORD}}"
26
+
27
+ steps:
28
+ - navigate: "/login"
29
+
30
+ # Shorthand fill — Prowl finds the input by its label or placeholder text.
31
+ # Equivalent explicit form:
32
+ # fill:
33
+ # selector: "input[placeholder='Email']"
34
+ # value: "{{EMAIL}}"
35
+ - fill:
36
+ "Email": "{{EMAIL}}"
37
+
38
+ - fill:
39
+ "Password": "{{PASSWORD}}"
40
+
41
+ # Shorthand click — Prowl finds a button by its text content.
42
+ # Equivalent explicit form:
43
+ # click:
44
+ # selector: "button:has-text('Sign In')"
45
+ - click: "Sign In"
46
+
47
+ # Wait for navigation to complete after login
48
+ - waitForUrl:
49
+ value: "/dashboard"
50
+ timeout: 10000
51
+
52
+ # Mid-flow assertion — verify the dashboard loaded
53
+ - assert:
54
+ visible: "Dashboard"
55
+
56
+ assertions:
57
+ - urlIncludes: "/dashboard"
58
+ - noConsoleErrors: true
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "prowl-tools",
3
- "version": "0.1.5",
4
- "description": "CLI-first QA testing tool for deterministic Playwright flows.",
3
+ "version": "0.1.7",
4
+ "description": "E2E testing for native macOS apps and web apps from declarative YAML hunts.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
7
7
  "author": "Prowl Tools",
@@ -16,9 +16,12 @@
16
16
  "keywords": [
17
17
  "testing",
18
18
  "qa",
19
+ "e2e",
20
+ "macos",
21
+ "desktop-testing",
22
+ "accessibility",
19
23
  "playwright",
20
24
  "yaml",
21
- "e2e",
22
25
  "browser-testing",
23
26
  "automation",
24
27
  "web-testing",