@rehearsal-labs/retest 0.1.0 → 0.3.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.
Files changed (502) hide show
  1. package/README.md +12 -5
  2. package/dist/agent/session.d.ts +21 -2
  3. package/dist/agent/session.d.ts.map +1 -1
  4. package/dist/agent/session.js +73 -11
  5. package/dist/api/app-page.d.ts +39 -3
  6. package/dist/api/app-page.d.ts.map +1 -1
  7. package/dist/api/app-page.js +108 -0
  8. package/dist/api/dialog.d.ts +38 -0
  9. package/dist/api/dialog.d.ts.map +1 -0
  10. package/dist/api/dialog.js +78 -0
  11. package/dist/api/drag.d.ts +32 -0
  12. package/dist/api/drag.d.ts.map +1 -0
  13. package/dist/api/drag.js +26 -0
  14. package/dist/api/files.d.ts +49 -0
  15. package/dist/api/files.d.ts.map +1 -0
  16. package/dist/api/files.js +168 -0
  17. package/dist/api/inbox.d.ts +97 -0
  18. package/dist/api/inbox.d.ts.map +1 -0
  19. package/dist/api/inbox.js +191 -0
  20. package/dist/api/locator-recipes.d.ts +1 -1
  21. package/dist/api/locator-recipes.d.ts.map +1 -1
  22. package/dist/api/locator-recipes.js +4 -3
  23. package/dist/api/page.d.ts +214 -4
  24. package/dist/api/page.d.ts.map +1 -1
  25. package/dist/api/route.d.ts +21 -0
  26. package/dist/api/route.d.ts.map +1 -0
  27. package/dist/api/route.js +99 -0
  28. package/dist/api/source-location.d.ts.map +1 -1
  29. package/dist/api/source-location.js +3 -1
  30. package/dist/api/test-run.d.ts +127 -1
  31. package/dist/api/test-run.d.ts.map +1 -1
  32. package/dist/api/test-run.js +293 -0
  33. package/dist/assertions/expect.d.ts +91 -2
  34. package/dist/assertions/expect.d.ts.map +1 -1
  35. package/dist/assertions/expect.js +98 -0
  36. package/dist/assertions/look-until.d.ts +5 -0
  37. package/dist/assertions/look-until.d.ts.map +1 -1
  38. package/dist/assertions/look-until.js +1 -1
  39. package/dist/assertions/poll-layout.d.ts +24 -0
  40. package/dist/assertions/poll-layout.d.ts.map +1 -0
  41. package/dist/assertions/poll-layout.js +63 -0
  42. package/dist/assertions/screenshot.d.ts +36 -0
  43. package/dist/assertions/screenshot.d.ts.map +1 -0
  44. package/dist/assertions/screenshot.js +125 -0
  45. package/dist/browser/accessibility.d.ts.map +1 -1
  46. package/dist/browser/accessibility.js +22 -1
  47. package/dist/browser/actionability.d.ts +9 -6
  48. package/dist/browser/actionability.d.ts.map +1 -1
  49. package/dist/browser/actionability.js +17 -8
  50. package/dist/browser/browser.d.ts.map +1 -1
  51. package/dist/browser/browser.js +15 -4
  52. package/dist/browser/builds.d.ts +35 -6
  53. package/dist/browser/builds.d.ts.map +1 -1
  54. package/dist/browser/builds.js +115 -16
  55. package/dist/browser/cdp/connection.d.ts +6 -0
  56. package/dist/browser/cdp/connection.d.ts.map +1 -1
  57. package/dist/browser/cdp/connection.js +8 -0
  58. package/dist/browser/cdp/transport.d.ts.map +1 -1
  59. package/dist/browser/cdp/transport.js +4 -4
  60. package/dist/browser/checked-state.d.ts +2 -2
  61. package/dist/browser/checked-state.d.ts.map +1 -1
  62. package/dist/browser/chromium-process.d.ts +32 -2
  63. package/dist/browser/chromium-process.d.ts.map +1 -1
  64. package/dist/browser/chromium-process.js +95 -17
  65. package/dist/browser/contract.d.ts +119 -5
  66. package/dist/browser/contract.d.ts.map +1 -1
  67. package/dist/browser/dialogs.d.ts +157 -0
  68. package/dist/browser/dialogs.d.ts.map +1 -0
  69. package/dist/browser/dialogs.js +271 -0
  70. package/dist/browser/downloads.d.ts +71 -0
  71. package/dist/browser/downloads.d.ts.map +1 -0
  72. package/dist/browser/downloads.js +253 -0
  73. package/dist/browser/drag.d.ts +50 -0
  74. package/dist/browser/drag.d.ts.map +1 -0
  75. package/dist/browser/drag.js +584 -0
  76. package/dist/browser/electron-window-watch.d.ts +32 -0
  77. package/dist/browser/electron-window-watch.d.ts.map +1 -0
  78. package/dist/browser/electron-window-watch.js +93 -0
  79. package/dist/browser/electron.d.ts +14 -3
  80. package/dist/browser/electron.d.ts.map +1 -1
  81. package/dist/browser/electron.js +57 -9
  82. package/dist/browser/element-queries.d.ts +51 -15
  83. package/dist/browser/element-queries.d.ts.map +1 -1
  84. package/dist/browser/element-queries.js +92 -13
  85. package/dist/browser/emulation.d.ts.map +1 -1
  86. package/dist/browser/emulation.js +7 -5
  87. package/dist/browser/executables.d.ts +16 -1
  88. package/dist/browser/executables.d.ts.map +1 -1
  89. package/dist/browser/executables.js +50 -18
  90. package/dist/browser/file-chooser.d.ts +75 -0
  91. package/dist/browser/file-chooser.d.ts.map +1 -0
  92. package/dist/browser/file-chooser.js +449 -0
  93. package/dist/browser/firefox/accessible-names.d.ts +5 -4
  94. package/dist/browser/firefox/accessible-names.d.ts.map +1 -1
  95. package/dist/browser/firefox/accessible-names.js +11 -6
  96. package/dist/browser/firefox/bridge.js +3 -2
  97. package/dist/browser/firefox/executable.d.ts +14 -14
  98. package/dist/browser/firefox/executable.d.ts.map +1 -1
  99. package/dist/browser/firefox/executable.js +29 -21
  100. package/dist/browser/firefox/input.d.ts +5 -0
  101. package/dist/browser/firefox/input.d.ts.map +1 -1
  102. package/dist/browser/firefox/input.js +6 -3
  103. package/dist/browser/firefox/launch.js +1 -1
  104. package/dist/browser/firefox/navigation.d.ts +5 -2
  105. package/dist/browser/firefox/navigation.d.ts.map +1 -1
  106. package/dist/browser/firefox/navigation.js +48 -14
  107. package/dist/browser/firefox/orphans.d.ts.map +1 -1
  108. package/dist/browser/firefox/orphans.js +34 -2
  109. package/dist/browser/firefox/page.d.ts +11 -1
  110. package/dist/browser/firefox/page.d.ts.map +1 -1
  111. package/dist/browser/firefox/page.js +179 -26
  112. package/dist/browser/firefox/process.d.ts +20 -1
  113. package/dist/browser/firefox/process.d.ts.map +1 -1
  114. package/dist/browser/firefox/process.js +124 -22
  115. package/dist/browser/firefox/profile.d.ts +5 -0
  116. package/dist/browser/firefox/profile.d.ts.map +1 -1
  117. package/dist/browser/firefox/profile.js +17 -1
  118. package/dist/browser/firefox/storage.d.ts.map +1 -1
  119. package/dist/browser/firefox/storage.js +4 -2
  120. package/dist/browser/firefox/subscriptions.d.ts +26 -0
  121. package/dist/browser/firefox/subscriptions.d.ts.map +1 -0
  122. package/dist/browser/firefox/subscriptions.js +10 -0
  123. package/dist/browser/frames.d.ts +205 -0
  124. package/dist/browser/frames.d.ts.map +1 -0
  125. package/dist/browser/frames.js +657 -0
  126. package/dist/browser/input-guard.d.ts +18 -5
  127. package/dist/browser/input-guard.d.ts.map +1 -1
  128. package/dist/browser/input-guard.js +65 -6
  129. package/dist/browser/isolated-world.d.ts +8 -1
  130. package/dist/browser/isolated-world.d.ts.map +1 -1
  131. package/dist/browser/launch.d.ts +6 -0
  132. package/dist/browser/launch.d.ts.map +1 -1
  133. package/dist/browser/launch.js +14 -1
  134. package/dist/browser/layout.d.ts +120 -0
  135. package/dist/browser/layout.d.ts.map +1 -0
  136. package/dist/browser/layout.js +213 -0
  137. package/dist/browser/locate.d.ts +10 -0
  138. package/dist/browser/locate.d.ts.map +1 -1
  139. package/dist/browser/locate.js +24 -6
  140. package/dist/browser/origin-document.d.ts +4 -0
  141. package/dist/browser/origin-document.d.ts.map +1 -1
  142. package/dist/browser/origin-document.js +9 -1
  143. package/dist/browser/page-scripts.d.ts +48 -0
  144. package/dist/browser/page-scripts.d.ts.map +1 -1
  145. package/dist/browser/page-scripts.js +515 -39
  146. package/dist/browser/page.d.ts +60 -1
  147. package/dist/browser/page.d.ts.map +1 -1
  148. package/dist/browser/page.js +275 -32
  149. package/dist/browser/popups.d.ts +166 -0
  150. package/dist/browser/popups.d.ts.map +1 -0
  151. package/dist/browser/popups.js +317 -0
  152. package/dist/browser/routes.d.ts +97 -0
  153. package/dist/browser/routes.d.ts.map +1 -0
  154. package/dist/browser/routes.js +226 -0
  155. package/dist/browser/screenshot.d.ts +44 -0
  156. package/dist/browser/screenshot.d.ts.map +1 -0
  157. package/dist/browser/screenshot.js +51 -0
  158. package/dist/browser/shadow-candidates.d.ts +20 -0
  159. package/dist/browser/shadow-candidates.d.ts.map +1 -0
  160. package/dist/browser/shadow-candidates.js +77 -0
  161. package/dist/browser/webkit/page.d.ts +11 -1
  162. package/dist/browser/webkit/page.d.ts.map +1 -1
  163. package/dist/browser/webkit/page.js +53 -2
  164. package/dist/browser/webkit/relay.d.ts.map +1 -1
  165. package/dist/browser/webkit/relay.js +5 -1
  166. package/dist/cli/commands/doctor.js +3 -3
  167. package/dist/cli/commands/inspect.js +3 -2
  168. package/dist/cli/commands/install.d.ts.map +1 -1
  169. package/dist/cli/commands/install.js +26 -13
  170. package/dist/cli/commands/licences.d.ts +22 -0
  171. package/dist/cli/commands/licences.d.ts.map +1 -1
  172. package/dist/cli/commands/licences.js +62 -20
  173. package/dist/cli/commands/run.d.ts.map +1 -1
  174. package/dist/cli/commands/run.js +4 -2
  175. package/dist/cli/doctor/checks.js +4 -1
  176. package/dist/cli/inspect/diagnostics.js +3 -3
  177. package/dist/cli/inspect/test-timeline.d.ts.map +1 -1
  178. package/dist/cli/inspect/test-timeline.js +45 -11
  179. package/dist/cli/install/doctor-rows.d.ts.map +1 -1
  180. package/dist/cli/install/doctor-rows.js +5 -4
  181. package/dist/cli/install/file-changes.d.ts +44 -0
  182. package/dist/cli/install/file-changes.d.ts.map +1 -0
  183. package/dist/cli/install/file-changes.js +81 -0
  184. package/dist/cli/install/install-archive.d.ts +3 -1
  185. package/dist/cli/install/install-archive.d.ts.map +1 -1
  186. package/dist/cli/install/install-archive.js +80 -33
  187. package/dist/cli/install/lock.d.ts.map +1 -1
  188. package/dist/cli/install/lock.js +108 -21
  189. package/dist/cli/install/media-doctor.d.ts.map +1 -1
  190. package/dist/cli/install/media-doctor.js +2 -1
  191. package/dist/cli/install/media-install.d.ts.map +1 -1
  192. package/dist/cli/install/media-install.js +38 -19
  193. package/dist/cli/install/media-pins.d.ts +7 -1
  194. package/dist/cli/install/media-pins.d.ts.map +1 -1
  195. package/dist/cli/install/media-pins.js +23 -12
  196. package/dist/cli/install/media-record.d.ts.map +1 -1
  197. package/dist/cli/install/media-record.js +10 -9
  198. package/dist/cli/install/media-report.d.ts +3 -1
  199. package/dist/cli/install/media-report.d.ts.map +1 -1
  200. package/dist/cli/install/media-report.js +7 -5
  201. package/dist/cli/install/media-tools.d.ts.map +1 -1
  202. package/dist/cli/install/media-tools.js +6 -4
  203. package/dist/cli/install/process-start.d.ts +3 -2
  204. package/dist/cli/install/process-start.d.ts.map +1 -1
  205. package/dist/cli/install/process-start.js +4 -0
  206. package/dist/cli/install/report.d.ts.map +1 -1
  207. package/dist/cli/install/report.js +11 -7
  208. package/dist/cli/install/supervisor-install.d.ts +33 -0
  209. package/dist/cli/install/supervisor-install.d.ts.map +1 -0
  210. package/dist/cli/install/supervisor-install.js +158 -0
  211. package/dist/cli/install/supervisor-locate.d.ts +47 -0
  212. package/dist/cli/install/supervisor-locate.d.ts.map +1 -0
  213. package/dist/cli/install/supervisor-locate.js +113 -0
  214. package/dist/cli/install/supervisor-pins.d.ts +21 -0
  215. package/dist/cli/install/supervisor-pins.d.ts.map +1 -0
  216. package/dist/cli/install/supervisor-pins.js +28 -0
  217. package/dist/cli/install/supervisor-record.d.ts +31 -0
  218. package/dist/cli/install/supervisor-record.d.ts.map +1 -0
  219. package/dist/cli/install/supervisor-record.js +104 -0
  220. package/dist/cli/install/supervisor-report.d.ts +11 -0
  221. package/dist/cli/install/supervisor-report.d.ts.map +1 -0
  222. package/dist/cli/install/supervisor-report.js +33 -0
  223. package/dist/cli/install/supervisor-tools.d.ts +43 -0
  224. package/dist/cli/install/supervisor-tools.d.ts.map +1 -0
  225. package/dist/cli/install/supervisor-tools.js +114 -0
  226. package/dist/cli/install/unpack.d.ts +23 -3
  227. package/dist/cli/install/unpack.d.ts.map +1 -1
  228. package/dist/cli/install/unpack.js +124 -10
  229. package/dist/cli/install/zip-member.d.ts +15 -0
  230. package/dist/cli/install/zip-member.d.ts.map +1 -0
  231. package/dist/cli/install/zip-member.js +77 -0
  232. package/dist/cli/interrupt.d.ts +1 -1
  233. package/dist/cli/interrupt.d.ts.map +1 -1
  234. package/dist/cli/interrupt.js +15 -10
  235. package/dist/cli/terminal.d.ts +9 -1
  236. package/dist/cli/terminal.d.ts.map +1 -1
  237. package/dist/cli/terminal.js +14 -0
  238. package/dist/config/define.d.ts +2 -2
  239. package/dist/config/define.js +2 -2
  240. package/dist/config/loaded.d.ts +12 -2
  241. package/dist/config/loaded.d.ts.map +1 -1
  242. package/dist/config/read-inboxes.d.ts +10 -0
  243. package/dist/config/read-inboxes.d.ts.map +1 -0
  244. package/dist/config/read-inboxes.js +78 -0
  245. package/dist/config/register.d.ts +5 -1
  246. package/dist/config/register.d.ts.map +1 -1
  247. package/dist/config/types.d.ts +36 -0
  248. package/dist/config/types.d.ts.map +1 -1
  249. package/dist/config/validate.d.ts.map +1 -1
  250. package/dist/config/validate.js +4 -1
  251. package/dist/diagnostics/artifact.d.ts.map +1 -1
  252. package/dist/diagnostics/artifact.js +10 -2
  253. package/dist/diagnostics/attempt.d.ts +5 -0
  254. package/dist/diagnostics/attempt.d.ts.map +1 -1
  255. package/dist/diagnostics/attempt.js +10 -0
  256. package/dist/diagnostics/chromium-collector.d.ts +9 -1
  257. package/dist/diagnostics/chromium-collector.d.ts.map +1 -1
  258. package/dist/diagnostics/chromium-collector.js +19 -4
  259. package/dist/diagnostics/firefox-collector.d.ts +11 -10
  260. package/dist/diagnostics/firefox-collector.d.ts.map +1 -1
  261. package/dist/diagnostics/firefox-collector.js +16 -11
  262. package/dist/diagnostics/observations.d.ts +8 -0
  263. package/dist/diagnostics/observations.d.ts.map +1 -1
  264. package/dist/diagnostics/session-capture.d.ts.map +1 -1
  265. package/dist/diagnostics/session-capture.js +8 -0
  266. package/dist/index.d.ts +9 -4
  267. package/dist/index.d.ts.map +1 -1
  268. package/dist/index.js +1 -0
  269. package/dist/media/client.d.ts +2 -1
  270. package/dist/media/client.d.ts.map +1 -1
  271. package/dist/media/client.js +16 -5
  272. package/dist/media/host.d.ts +32 -0
  273. package/dist/media/host.d.ts.map +1 -0
  274. package/dist/media/host.js +50 -0
  275. package/dist/media/locate.d.ts.map +1 -1
  276. package/dist/media/locate.js +4 -3
  277. package/dist/media/policy.d.ts +2 -2
  278. package/dist/media/policy.d.ts.map +1 -1
  279. package/dist/media/policy.js +1 -1
  280. package/dist/native/processes.d.ts.map +1 -1
  281. package/dist/native/processes.js +7 -3
  282. package/dist/playwright/not-yet.d.ts.map +1 -1
  283. package/dist/playwright/not-yet.js +5 -2
  284. package/dist/protocol/commands.d.ts +122 -13
  285. package/dist/protocol/commands.d.ts.map +1 -1
  286. package/dist/protocol/commands.js +85 -6
  287. package/dist/protocol/diagnostics.d.ts +10 -0
  288. package/dist/protocol/diagnostics.d.ts.map +1 -1
  289. package/dist/protocol/diagnostics.js +5 -0
  290. package/dist/protocol/dialogs.d.ts +104 -0
  291. package/dist/protocol/dialogs.d.ts.map +1 -0
  292. package/dist/protocol/dialogs.js +101 -0
  293. package/dist/protocol/drag.d.ts +45 -0
  294. package/dist/protocol/drag.d.ts.map +1 -0
  295. package/dist/protocol/drag.js +31 -0
  296. package/dist/protocol/events.d.ts +153 -1
  297. package/dist/protocol/events.d.ts.map +1 -1
  298. package/dist/protocol/events.js +97 -0
  299. package/dist/protocol/files.d.ts +83 -0
  300. package/dist/protocol/files.d.ts.map +1 -0
  301. package/dist/protocol/files.js +73 -0
  302. package/dist/protocol/inbox.d.ts +87 -0
  303. package/dist/protocol/inbox.d.ts.map +1 -0
  304. package/dist/protocol/inbox.js +51 -0
  305. package/dist/protocol/index.d.ts +4 -1
  306. package/dist/protocol/index.d.ts.map +1 -1
  307. package/dist/protocol/layout-checks.d.ts +83 -0
  308. package/dist/protocol/layout-checks.d.ts.map +1 -0
  309. package/dist/protocol/layout-checks.js +214 -0
  310. package/dist/protocol/layout.d.ts +135 -0
  311. package/dist/protocol/layout.d.ts.map +1 -0
  312. package/dist/protocol/layout.js +124 -0
  313. package/dist/protocol/locator-checks.d.ts +19 -2
  314. package/dist/protocol/locator-checks.d.ts.map +1 -1
  315. package/dist/protocol/locator-checks.js +23 -1
  316. package/dist/protocol/locator.d.ts +55 -7
  317. package/dist/protocol/locator.d.ts.map +1 -1
  318. package/dist/protocol/locator.js +99 -18
  319. package/dist/protocol/messages.d.ts +95 -0
  320. package/dist/protocol/messages.d.ts.map +1 -1
  321. package/dist/protocol/messages.js +63 -0
  322. package/dist/protocol/popups.d.ts +43 -0
  323. package/dist/protocol/popups.d.ts.map +1 -0
  324. package/dist/protocol/popups.js +27 -0
  325. package/dist/protocol/result.d.ts +5 -0
  326. package/dist/protocol/result.d.ts.map +1 -1
  327. package/dist/protocol/result.js +1 -0
  328. package/dist/protocol/routes.d.ts +136 -0
  329. package/dist/protocol/routes.d.ts.map +1 -0
  330. package/dist/protocol/routes.js +191 -0
  331. package/dist/protocol/screenshot.d.ts +219 -0
  332. package/dist/protocol/screenshot.d.ts.map +1 -0
  333. package/dist/protocol/screenshot.js +335 -0
  334. package/dist/reporters/actions.d.ts +6 -4
  335. package/dist/reporters/actions.d.ts.map +1 -1
  336. package/dist/reporters/actions.js +24 -6
  337. package/dist/reporters/agent.d.ts.map +1 -1
  338. package/dist/reporters/agent.js +4 -2
  339. package/dist/reporters/commands.d.ts +12 -3
  340. package/dist/reporters/commands.d.ts.map +1 -1
  341. package/dist/reporters/commands.js +29 -11
  342. package/dist/reporters/dialogs-popups.d.ts +22 -0
  343. package/dist/reporters/dialogs-popups.d.ts.map +1 -0
  344. package/dist/reporters/dialogs-popups.js +30 -0
  345. package/dist/reporters/failure-card.d.ts +10 -1
  346. package/dist/reporters/failure-card.d.ts.map +1 -1
  347. package/dist/reporters/failure-card.js +5 -1
  348. package/dist/reporters/format.d.ts +33 -0
  349. package/dist/reporters/format.d.ts.map +1 -1
  350. package/dist/reporters/format.js +42 -0
  351. package/dist/reporters/html/comparison-view.d.ts +12 -0
  352. package/dist/reporters/html/comparison-view.d.ts.map +1 -0
  353. package/dist/reporters/html/comparison-view.js +21 -0
  354. package/dist/reporters/html/diagnostics-view.js +8 -0
  355. package/dist/reporters/html/downloads-view.d.ts +10 -0
  356. package/dist/reporters/html/downloads-view.d.ts.map +1 -0
  357. package/dist/reporters/html/downloads-view.js +29 -0
  358. package/dist/reporters/html/style.d.ts.map +1 -1
  359. package/dist/reporters/html/style.js +3 -0
  360. package/dist/reporters/html/summary-view.d.ts.map +1 -1
  361. package/dist/reporters/html/summary-view.js +3 -2
  362. package/dist/reporters/html/test-view.d.ts.map +1 -1
  363. package/dist/reporters/html/test-view.js +6 -3
  364. package/dist/reporters/html/timeline-view.d.ts.map +1 -1
  365. package/dist/reporters/html/timeline-view.js +26 -2
  366. package/dist/reporters/human-card.js +11 -1
  367. package/dist/reporters/human.d.ts +3 -1
  368. package/dist/reporters/human.d.ts.map +1 -1
  369. package/dist/reporters/human.js +11 -9
  370. package/dist/reporters/routes.d.ts +9 -0
  371. package/dist/reporters/routes.d.ts.map +1 -0
  372. package/dist/reporters/routes.js +17 -0
  373. package/dist/reporters/style.d.ts +21 -2
  374. package/dist/reporters/style.d.ts.map +1 -1
  375. package/dist/reporters/style.js +11 -2
  376. package/dist/runner/app-server.d.ts +27 -7
  377. package/dist/runner/app-server.d.ts.map +1 -1
  378. package/dist/runner/app-server.js +74 -24
  379. package/dist/runner/child-program.js +10 -0
  380. package/dist/runner/child.js +6 -2
  381. package/dist/runner/contract.d.ts +5 -0
  382. package/dist/runner/contract.d.ts.map +1 -1
  383. package/dist/runner/dialogs.d.ts +71 -0
  384. package/dist/runner/dialogs.d.ts.map +1 -0
  385. package/dist/runner/dialogs.js +189 -0
  386. package/dist/runner/files.d.ts +79 -0
  387. package/dist/runner/files.d.ts.map +1 -0
  388. package/dist/runner/files.js +312 -0
  389. package/dist/runner/inbox-links.d.ts +19 -0
  390. package/dist/runner/inbox-links.d.ts.map +1 -0
  391. package/dist/runner/inbox-links.js +63 -0
  392. package/dist/runner/inbox.d.ts +87 -0
  393. package/dist/runner/inbox.d.ts.map +1 -0
  394. package/dist/runner/inbox.js +340 -0
  395. package/dist/runner/index.d.ts +2 -1
  396. package/dist/runner/index.d.ts.map +1 -1
  397. package/dist/runner/media-leftovers.d.ts +7 -3
  398. package/dist/runner/media-leftovers.d.ts.map +1 -1
  399. package/dist/runner/media-leftovers.js +27 -6
  400. package/dist/runner/native-pool.d.ts.map +1 -1
  401. package/dist/runner/native-pool.js +2 -0
  402. package/dist/runner/observations.d.ts +15 -2
  403. package/dist/runner/observations.d.ts.map +1 -1
  404. package/dist/runner/observations.js +109 -6
  405. package/dist/runner/popups.d.ts +82 -0
  406. package/dist/runner/popups.d.ts.map +1 -0
  407. package/dist/runner/popups.js +236 -0
  408. package/dist/runner/redactor.d.ts.map +1 -1
  409. package/dist/runner/redactor.js +10 -6
  410. package/dist/runner/resources.d.ts +8 -0
  411. package/dist/runner/resources.d.ts.map +1 -1
  412. package/dist/runner/resources.js +12 -1
  413. package/dist/runner/routes.d.ts +23 -0
  414. package/dist/runner/routes.d.ts.map +1 -0
  415. package/dist/runner/routes.js +128 -0
  416. package/dist/runner/run-media.d.ts +6 -0
  417. package/dist/runner/run-media.d.ts.map +1 -1
  418. package/dist/runner/run-media.js +21 -0
  419. package/dist/runner/run-session.d.ts.map +1 -1
  420. package/dist/runner/run-session.js +102 -12
  421. package/dist/runner/run.d.ts.map +1 -1
  422. package/dist/runner/run.js +2 -1
  423. package/dist/runner/running-test.d.ts +35 -0
  424. package/dist/runner/running-test.d.ts.map +1 -1
  425. package/dist/runner/running-test.js +333 -22
  426. package/dist/runner/screenshot-baselines.d.ts +159 -0
  427. package/dist/runner/screenshot-baselines.d.ts.map +1 -0
  428. package/dist/runner/screenshot-baselines.js +357 -0
  429. package/dist/runner/secrets.d.ts +13 -0
  430. package/dist/runner/secrets.d.ts.map +1 -1
  431. package/dist/runner/secrets.js +6 -4
  432. package/dist/runner/target-drivers.d.ts +5 -2
  433. package/dist/runner/target-drivers.d.ts.map +1 -1
  434. package/dist/runner/target-drivers.js +10 -1
  435. package/dist/runner/test-file-process.d.ts +8 -0
  436. package/dist/runner/test-file-process.d.ts.map +1 -1
  437. package/dist/runner/test-file-process.js +26 -3
  438. package/dist/runner/test-pages.d.ts +3 -1
  439. package/dist/runner/test-pages.d.ts.map +1 -1
  440. package/dist/runner/test-pages.js +9 -5
  441. package/dist/schemas/event-v1.schema.json +118873 -6311
  442. package/dist/schemas/result-v1.schema.json +4 -0
  443. package/dist/shared/environment.d.ts +17 -0
  444. package/dist/shared/environment.d.ts.map +1 -0
  445. package/dist/shared/environment.js +27 -0
  446. package/dist/shared/image-diff.d.ts +36 -0
  447. package/dist/shared/image-diff.d.ts.map +1 -0
  448. package/dist/shared/image-diff.js +242 -0
  449. package/dist/shared/metadata-process-worker.js +15 -7
  450. package/dist/shared/metadata-process.d.ts +9 -1
  451. package/dist/shared/metadata-process.d.ts.map +1 -1
  452. package/dist/shared/metadata-process.js +84 -12
  453. package/dist/shared/png.d.ts +35 -0
  454. package/dist/shared/png.d.ts.map +1 -0
  455. package/dist/shared/png.js +251 -0
  456. package/dist/shared/posix-path.d.ts +12 -0
  457. package/dist/shared/posix-path.d.ts.map +1 -1
  458. package/dist/shared/posix-path.js +16 -0
  459. package/dist/shared/private-file.d.ts +38 -0
  460. package/dist/shared/private-file.d.ts.map +1 -0
  461. package/dist/shared/private-file.js +132 -0
  462. package/dist/shared/process-ownership.d.ts +67 -6
  463. package/dist/shared/process-ownership.d.ts.map +1 -1
  464. package/dist/shared/process-ownership.js +227 -45
  465. package/dist/shared/process-supervisor.d.ts +309 -0
  466. package/dist/shared/process-supervisor.d.ts.map +1 -0
  467. package/dist/shared/process-supervisor.js +737 -0
  468. package/dist/shared/process-system.d.ts +113 -0
  469. package/dist/shared/process-system.d.ts.map +1 -0
  470. package/dist/shared/process-system.js +254 -0
  471. package/dist/shared/regular-file.d.ts +2 -2
  472. package/dist/shared/regular-file.d.ts.map +1 -1
  473. package/dist/shared/regular-file.js +19 -2
  474. package/dist/store/artifacts.d.ts +28 -6
  475. package/dist/store/artifacts.d.ts.map +1 -1
  476. package/dist/store/artifacts.js +58 -6
  477. package/dist/store/rebuild-result.d.ts.map +1 -1
  478. package/dist/store/rebuild-result.js +6 -0
  479. package/dist/store/run-store.d.ts +5 -2
  480. package/dist/store/run-store.d.ts.map +1 -1
  481. package/dist/store/run-store.js +48 -4
  482. package/media/Cargo.lock +16 -0
  483. package/media/Cargo.toml +16 -1
  484. package/media/src/encoder.rs +56 -12
  485. package/media/src/frame.rs +7 -1
  486. package/media/src/main.rs +20 -2
  487. package/media/src/place.rs +230 -11
  488. package/media/src/process_ownership_windows.rs +1058 -0
  489. package/media/src/recording.rs +15 -7
  490. package/media/src/replies.rs +55 -0
  491. package/media/src/server.rs +72 -2
  492. package/media/src/store.rs +71 -2
  493. package/package.json +9 -4
  494. package/src/cli/install/media-notices.txt +465 -1
  495. package/supervisor/Cargo.lock +25 -0
  496. package/supervisor/Cargo.toml +22 -0
  497. package/supervisor/NOTICES +464 -0
  498. package/supervisor/build.rs +44 -0
  499. package/supervisor/src/command.rs +612 -0
  500. package/supervisor/src/jobs.rs +1650 -0
  501. package/supervisor/src/main.rs +71 -0
  502. package/supervisor/src/reply.rs +367 -0
package/README.md CHANGED
@@ -25,7 +25,7 @@ There is no Playwright, Puppeteer or Selenium underneath. Retest is early, and t
25
25
 
26
26
  ## Quick start
27
27
 
28
- You need Node.js 24.12 or later, on macOS or Linux.
28
+ You need Node.js 24.12 or later, on macOS, Linux or Windows x64. Windows also needs Retest's process supervisor, which [the guide](docs/guide.md#windows) says how to install.
29
29
 
30
30
  ```sh
31
31
  npm install --save-dev @rehearsal-labs/retest typescript @types/node
@@ -72,22 +72,29 @@ npx retest install --list # what is pinned for this machine; downloads nothi
72
72
  npx retest install firefox # also chromium, webkit and electron
73
73
  ```
74
74
 
75
- On macOS on Apple silicon, Retest pins Chrome for Testing, Firefox 133, Playwright's WebKit build 2359 and Electron 44.5.1. On Linux x64 it pins Chrome for Testing only. A Firefox target finds the installed build by itself. Give a Chromium, WebKit or Electron target the path that `retest install` prints.
75
+ On macOS on Apple silicon, Retest pins Chrome for Testing, Firefox 158.0.1, WebKit build 2359 and Electron 44.5.1. On Windows x64 it pins Chrome for Testing, Firefox 158.0.1 and Electron 44.5.1. On Linux x64 it pins Chrome for Testing only. A Firefox target finds the installed build by itself. Give a Chromium, WebKit or Electron target the path that `retest install` prints.
76
76
 
77
77
  ## What runs today
78
78
 
79
79
  | | |
80
80
  | --- | --- |
81
- | Browsers | Chrome and Chromium. Firefox 133 and WebKit build 2359 on macOS on Apple silicon |
81
+ | Browsers | Chrome and Chromium. Firefox 158.0.1 on macOS on Apple silicon and on Windows x64. WebKit build 2359 on macOS on Apple silicon |
82
82
  | iOS simulator apps | Find, tap, fill and check elements through WebDriverAgent, built on your Mac from a pinned commit |
83
83
  | macOS apps | Find, click, fill and check elements through the macOS runner of appium-mac2-driver |
84
- | Electron apps | The app's first window, driven like a Chrome page. Checked with Electron 44.5.1 on macOS |
84
+ | Electron apps | The app's first window, driven like a Chrome page. Checked with Electron 44.5.1 on macOS and Windows |
85
85
  | One test across platforms | An iOS simulator app, a macOS app and web apps in the same test |
86
86
  | AI checks | `test.evaluate` asks a judge you choose whether a screenshot, text or recorded frames meet a requirement |
87
+ | Layout checks | Overlapping elements, cut-off text, an element past the viewport's right edge and sideways scroll, each measured in pixels. Checked on Chrome on macOS |
88
+ | Screenshot baselines | A page or an element compared to a saved image, pixel by pixel, with the difference in the report. Checked on Chrome on macOS |
89
+ | Test inboxes | A test reads a one-time code and a sign-in link from a mailbox your config reads, types and opens them, and never holds either. Checked on Chrome. [The guide](docs/guide.md#inboxes) says how |
90
+ | Files | Upload by path or content, intercept the file picker, save downloads as artifacts. Checked on Chrome on macOS |
91
+ | Dialogs and popups | Accept or dismiss alert, confirm, prompt and beforeunload; drive a page the app opens. Checked on Chrome on macOS |
92
+ | Mocked responses and drag | Answer a request with your own response or refuse it; drag an element onto another. Checked on Chrome on macOS |
87
93
  | Playwright test files | `retest run --playwright` runs `.spec.ts` files unchanged, for the methods [the guide](docs/guide.md#run-playwright-test-files) lists |
88
94
  | Linux | Chrome and Chromium only, checked inside Docker |
95
+ | Windows x64 | Chrome, Chromium, Firefox and Electron, with recordings on Chrome. Nothing a run starts outlives Retest. Checked on Windows Server 2025 on GitHub's runner |
89
96
 
90
- Not yet: Android apps, Windows, Safari, and real phones or tablets.
97
+ Not yet: Android apps, Safari, and real phones or tablets. [The guide](docs/guide.md#windows) says what Windows does not run yet.
91
98
 
92
99
  ## One test across platforms
93
100
 
@@ -1,6 +1,7 @@
1
1
  import type { InputDispatch, OwnedBrowser, OwnedPage, SessionIdentity, WebEngine, WebRuntimeIdentity } from '../browser/contract.ts';
2
2
  import type { FrameSource } from '../media/capture.ts';
3
3
  import type { CommandResult, Observation, PageCommand } from '../protocol/commands.ts';
4
+ import type { DialogAnswered, DialogType } from '../protocol/dialogs.ts';
4
5
  import type { Failure } from '../protocol/failures.ts';
5
6
  import type { HostCheck, HostCheckRecord } from '../protocol/host-check.ts';
6
7
  import type { LocatorRecipe } from '../protocol/locator.ts';
@@ -61,6 +62,18 @@ export type AgentAction = {
61
62
  readonly result: CommandResult;
62
63
  readonly input: InputDispatch;
63
64
  readonly locator?: LocatorRecipe;
65
+ readonly dialogs?: readonly AgentDialog[];
66
+ };
67
+ /**
68
+ * A JavaScript dialog the page showed that Retest answered, since an agent session takes no dialog: its kind, its text,
69
+ * redacted, how Retest answered it, and `words`, a sentence for the agent. One that showed between calls is named in the
70
+ * answer of the next action or look, under `dialogs`; one that showed during an action is named in its failure.
71
+ */
72
+ export type AgentDialog = {
73
+ readonly type: DialogType;
74
+ readonly message: string;
75
+ readonly answered: DialogAnswered;
76
+ readonly words: string;
64
77
  };
65
78
  /** An element a look listed: its reference, and its text and visibility as the look saw them, redacted. */
66
79
  export type LookedElement = {
@@ -81,12 +94,14 @@ export type AgentLook = {
81
94
  readonly page?: PageFacts;
82
95
  };
83
96
  /** A look's answer: the look, or why there is none. */
84
- export type AgentObserved = {
97
+ export type AgentObserved = ({
85
98
  readonly ok: true;
86
99
  readonly look: AgentLook;
87
100
  } | {
88
101
  readonly ok: false;
89
102
  readonly failure: Failure;
103
+ }) & {
104
+ readonly dialogs?: readonly AgentDialog[];
90
105
  };
91
106
  /** A look at the page itself: its id and session, and the page's address and title, redacted. It lists no element. */
92
107
  export type AgentPageLook = {
@@ -95,12 +110,14 @@ export type AgentPageLook = {
95
110
  readonly url: string | null;
96
111
  readonly title: string | null;
97
112
  };
98
- export type AgentObservedPage = {
113
+ export type AgentObservedPage = ({
99
114
  readonly ok: true;
100
115
  readonly page: AgentPageLook;
101
116
  } | {
102
117
  readonly ok: false;
103
118
  readonly failure: Failure;
119
+ }) & {
120
+ readonly dialogs?: readonly AgentDialog[];
104
121
  };
105
122
  /** A durable recipe made from a reference, or why a read could not prove it finds the referenced element. */
106
123
  export type AgentRecipe = {
@@ -258,6 +275,8 @@ export declare class AgentSession {
258
275
  /** The session whose saved state this one started from, when it started from one. */
259
276
  readonly restoredFrom: string | undefined;
260
277
  constructor(parts: SessionParts);
278
+ /** Every JavaScript dialog the session's page showed, which Retest answered, in order. */
279
+ get answeredDialogs(): readonly AgentDialog[];
261
280
  /** The session's id, which every look, reference and frame it serves carries. */
262
281
  get sessionId(): string;
263
282
  /** The app the session plays, as its host named it. */
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
+ import { withPickerAdvice } from "../browser/file-chooser.js";
1
2
  import { Deadline, smallestBudget } from "../protocol/deadline.js";
2
3
  import { describeCommand, pageCommandSchema } from "../protocol/commands.js";
4
+ import { unwaitedDialogMessage, withDialogWords } from "../protocol/dialogs.js";
3
5
  import { errorMessage, failure, failureSchema } from "../protocol/failures.js";
4
6
  import { parseKey } from "../protocol/keys.js";
5
- import { describeLocator, locatorProblem, locatorSteps } from "../protocol/locator.js";
7
+ import { describeLocator, everyStep, locatorProblem } from "../protocol/locator.js";
6
8
  import { selectCommandProblem } from "../protocol/option-choices.js";
7
9
  import { isPlainObject, parse } from "../protocol/schema.js";
8
10
  import { scrollProblem } from "../protocol/scroll-delta.js";
@@ -55,6 +57,11 @@ export class AgentSession {
55
57
  #running = new Set();
56
58
  #sources = new Set();
57
59
  #listeners = [];
60
+ // Every dialog Retest answered on the session's page, and those not named in an answer yet.
61
+ #answeredDialogs = [];
62
+ #dialogsSince = [];
63
+ // The command on the page now, as a dialog that shows meanwhile names it.
64
+ #onPage;
58
65
  #ended = Promise.withResolvers();
59
66
  #holdTimer;
60
67
  #leaseTimer;
@@ -81,13 +88,17 @@ export class AgentSession {
81
88
  this.#listeners.push(parts.page.onNavigation((navigation) => {
82
89
  if (navigation.document === 'new')
83
90
  this.#looks.nextDocument();
84
- }), parts.browser.onDisconnect((reason) => void this.#finish({ kind: 'lost', reason: failure('session_lost', `The browser of session ${parts.identity.sessionId} was lost: ${reason}`) })));
91
+ }), parts.browser.onDisconnect((reason) => void this.#finish({ kind: 'lost', reason: failure('session_lost', `The browser of session ${parts.identity.sessionId} was lost: ${reason}`) })), parts.page.onUnwaitedDialog?.((dialog) => this.#heardDialog(dialog)) ?? (() => undefined));
85
92
  this.#holdTimer = setTimeout(() => {
86
93
  const reason = failure('timeout', `Session ${parts.identity.sessionId} held its browser for its whole ${parts.holdMs} ms hold, so Retest ended it.`);
87
94
  void this.#finish({ kind: 'held_too_long', reason: { ...reason, details: { holdMs: parts.holdMs } } });
88
95
  }, timerMs(parts.holdMs));
89
96
  this.#renewLease();
90
97
  }
98
+ /** Every JavaScript dialog the session's page showed, which Retest answered, in order. */
99
+ get answeredDialogs() {
100
+ return [...this.#answeredDialogs];
101
+ }
91
102
  /** The session's id, which every look, reference and frame it serves carries. */
92
103
  get sessionId() {
93
104
  return this.identity.sessionId;
@@ -141,13 +152,13 @@ export class AgentSession {
141
152
  const startedOn = this.#looks.generation;
142
153
  const read = await this.#readOne(locator, timeoutMs, signal);
143
154
  if (!read.ok)
144
- return read;
155
+ return { ...read, ...this.#dialogsNamed() };
145
156
  // The look keeps a copy of the locator, so a caller that changes its own object later cannot move a reference.
146
157
  const look = this.#looks.serve(structuredClone(locator), read.observation, startedOn, read.keys);
147
158
  const observation = this.#host.redactor.redactObservation(look.observation);
148
159
  const elements = observation.items.map((item, element) => ({ ref: { sessionId: this.sessionId, observationId: look.observationId, element }, text: item.text, visible: item.visible }));
149
160
  const page = read.page === undefined ? {} : { page: this.#redactedPage(read.page) };
150
- return { ok: true, look: { sessionId: this.sessionId, observationId: look.observationId, locator: structuredClone(look.locator), observation, elements, ...page } };
161
+ return { ok: true, look: { sessionId: this.sessionId, observationId: look.observationId, locator: structuredClone(look.locator), observation, elements, ...page }, ...this.#dialogsNamed() };
151
162
  });
152
163
  }
153
164
  /** Reads the page's address and title once. */
@@ -155,11 +166,11 @@ export class AgentSession {
155
166
  return this.#inLane('look', (problem) => ({ ok: false, failure: problem }), async (signal) => {
156
167
  const answer = await this.#call({ kind: 'observePage' }, this.#budget(this.#host.timeouts.action, options), signal);
157
168
  if (!answer.result.ok)
158
- return { ok: false, failure: this.#host.redactor.redactFailure(answer.result.failure) };
169
+ return { ok: false, failure: this.#agentFailure(answer.result.failure), ...this.#dialogsNamed() };
159
170
  if (answer.result.kind !== 'observePage')
160
171
  return { ok: false, failure: failure('test_error', 'The page answered a look at the page with another kind of answer.') };
161
172
  const { url, title } = this.#host.redactor.redactPageLook(answer.result.observation);
162
- return { ok: true, page: { sessionId: this.sessionId, observationId: this.#looks.servePage(), url, title } };
173
+ return { ok: true, page: { sessionId: this.sessionId, observationId: this.#looks.servePage(), url, title }, ...this.#dialogsNamed() };
163
174
  });
164
175
  }
165
176
  /**
@@ -193,7 +204,10 @@ export class AgentSession {
193
204
  if (!browserCommand.ok)
194
205
  return { ...notSent(browserCommand.failure), ...located };
195
206
  const answer = pin === undefined ? await this.#call(browserCommand.command, deadline.commandTimeoutMs, signal) : await this.#callPinned(browserCommand.command, pin, deadline.commandTimeoutMs, signal);
196
- return { result: this.#host.redactor.redactCommandResult(answer.result), input: answer.input, ...located };
207
+ // A picker nobody waited for is answered by what an agent session can do, which gives no page files.
208
+ const advised = withPickerAdvice(answer.result, 'This agent session cannot give a page files.');
209
+ const result = advised.ok ? this.#host.redactor.redactCommandResult(advised) : { ok: false, failure: this.#agentFailure(advised.failure) };
210
+ return { result, input: answer.input, ...located, ...this.#dialogsNamed() };
197
211
  });
198
212
  }
199
213
  /**
@@ -395,7 +409,7 @@ export class AgentSession {
395
409
  async #freshLook(ref, look, deadline, signal) {
396
410
  const answer = await this.#call({ kind: 'observe', locator: look.locator }, deadline.commandTimeoutMs, signal);
397
411
  if (!answer.result.ok)
398
- return { ok: false, failure: this.#host.redactor.redactFailure(answer.result.failure) };
412
+ return { ok: false, failure: this.#agentFailure(answer.result.failure) };
399
413
  if (answer.result.kind !== 'observe')
400
414
  return { ok: false, failure: failure('test_error', 'The page answered a look with another kind of answer.') };
401
415
  if (this.#looks.generation !== look.generation)
@@ -454,7 +468,7 @@ export class AgentSession {
454
468
  }
455
469
  const answer = await this.#call({ kind: 'observe', locator }, timeoutMs, signal);
456
470
  if (!answer.result.ok)
457
- return { ok: false, failure: this.#host.redactor.redactFailure(answer.result.failure) };
471
+ return { ok: false, failure: this.#agentFailure(answer.result.failure) };
458
472
  if (answer.result.kind !== 'observe')
459
473
  return { ok: false, failure: failure('test_error', 'The page answered a look with another kind of answer.') };
460
474
  return { ok: true, observation: answer.result.observation, ...(answer.result.page === undefined ? {} : { page: answer.result.page }) };
@@ -483,11 +497,28 @@ export class AgentSession {
483
497
  if (command.kind === 'swipe' || command.kind === 'nativeKeyboard' || command.kind === 'nativeAlert' || command.kind === 'tap' || command.kind === 'observe' || command.kind === 'observePage') {
484
498
  return { ok: false, failure: failure('unsupported', `An agent session does not send ${describeCommand(command)}.`) };
485
499
  }
500
+ // A file input takes files only from a test, whose run keeps what it gives; an agent session keeps none.
501
+ if (command.kind === 'setInputFiles' || command.kind === 'setChooserFiles')
502
+ return { ok: false, failure: failure('unsupported', `An agent session does not send ${describeCommand(command)}.`) };
503
+ // An agent's action is pinned to the one element it read, and a drag acts on two.
504
+ if (command.kind === 'dragTo')
505
+ return { ok: false, failure: failure('unsupported', `An agent session does not send ${describeCommand(command)}.`) };
506
+ // An agent session holds the page it opened for its whole lease, so it never closes it.
507
+ if (command.kind === 'close')
508
+ return { ok: false, failure: failure('unsupported', `An agent session does not send ${describeCommand(command)}: its page stays open for its lease.`) };
509
+ // A screenshot comparison's picture belongs to a test's check, which keeps its baseline; an agent session keeps none.
510
+ if (command.kind === 'observeScreenshot')
511
+ return { ok: false, failure: failure('unsupported', `An agent session does not send ${describeCommand(command)}.`) };
512
+ // An agent session holds no inbox, so it has no message whose code or link a command could name.
513
+ if (command.kind === 'goto')
514
+ return typeof command.url === 'string' ? { ok: true, command: { kind: 'goto', url: command.url } } : { ok: false, failure: failure('unsupported', 'An agent session holds no inbox, so Retest opened no link from one.') };
486
515
  if (command.kind !== 'fill')
487
516
  return { ok: true, command };
488
517
  const { locator, value } = command;
489
518
  if (typeof value === 'string')
490
519
  return { ok: true, command: { kind: 'fill', locator, value } };
520
+ if (!('secret' in value))
521
+ return { ok: false, failure: failure('unsupported', 'An agent session holds no inbox, so Retest typed no code from one.') };
491
522
  const secrets = this.#host.secrets;
492
523
  if (secrets === undefined)
493
524
  return { ok: false, failure: failure('usage', `secret(${JSON.stringify(value.secret)}) needs a host that holds secrets. This agent host holds none.`) };
@@ -505,6 +536,7 @@ export class AgentSession {
505
536
  const page = this.#page;
506
537
  this.#tokens += 1;
507
538
  const token = this.#tokens;
539
+ this.#onPage = describeCommand(command);
508
540
  try {
509
541
  if (hasDispatch(page))
510
542
  return await page.dispatch(command, timeoutMs, signal, token);
@@ -516,6 +548,31 @@ export class AgentSession {
516
548
  const message = `The browser call for ${describeCommand(command)} failed: ${errorMessage(error)}`;
517
549
  return { result: { ok: false, failure: failure(looking ? 'session_lost' : 'outcome_unknown', message) }, input: looking ? 'not_sent' : 'unknown' };
518
550
  }
551
+ finally {
552
+ this.#onPage = undefined;
553
+ }
554
+ }
555
+ // A failure the page gave, redacted, with a dialog Retest answered meanwhile named in words for an agent, which can
556
+ // wrap nothing in page.dialog(): the dialog's text is redacted before it is quoted.
557
+ #agentFailure(problem) {
558
+ return this.#host.redactor.redactFailure(withDialogWords(problem, (text) => this.#host.redactor.redact(text), 'agent'));
559
+ }
560
+ // A dialog the page showed is kept for the session's record, and one that showed between calls waits to be named in
561
+ // the next answer; one that showed during an action is named in that action's own failure.
562
+ #heardDialog(dialog) {
563
+ const message = this.#host.redactor.redact(dialog.message);
564
+ const parts = { type: dialog.type, text: message, answered: dialog.answered, popup: dialog.popup === true, reader: 'agent' };
565
+ const words = unwaitedDialogMessage(dialog.during ? { ...parts, command: this.#host.redactor.redact(this.#onPage ?? 'act on the page') } : parts);
566
+ const told = { type: dialog.type, message, answered: dialog.answered, words };
567
+ this.#answeredDialogs.push(told);
568
+ if (!dialog.during)
569
+ this.#dialogsSince.push(told);
570
+ }
571
+ // The dialogs not named in an answer yet, for the answer being given, and none from then on.
572
+ #dialogsNamed() {
573
+ const named = this.#dialogsSince;
574
+ this.#dialogsSince = [];
575
+ return named.length === 0 ? {} : { dialogs: named };
519
576
  }
520
577
  // The driver's pinned call, with a throw read as the page's answer as for any other call.
521
578
  async #callPinned(command, key, timeoutMs, signal) {
@@ -523,12 +580,16 @@ export class AgentSession {
523
580
  if (identity === undefined)
524
581
  return { result: { ok: false, failure: failure('unsupported', `The ${this.engine} driver cannot pin an element.`) }, input: 'not_sent' };
525
582
  this.#tokens += 1;
583
+ this.#onPage = describeCommand(command);
526
584
  try {
527
585
  return await identity.dispatchTo(command, key, timeoutMs, signal, this.#tokens);
528
586
  }
529
587
  catch (error) {
530
588
  return { result: { ok: false, failure: failure('outcome_unknown', `The browser call for ${describeCommand(command)} failed: ${errorMessage(error)}`) }, input: 'unknown' };
531
589
  }
590
+ finally {
591
+ this.#onPage = undefined;
592
+ }
532
593
  }
533
594
  #locatorProblem(locator) {
534
595
  return locatorProblem(locator) ?? this.#secretLocatorProblem(locator);
@@ -657,9 +718,10 @@ function commandProblem(command) {
657
718
  return scrollProblem(command);
658
719
  return undefined;
659
720
  }
660
- // What each step of a locator matches against the page, as the runner reads it for the same guard.
721
+ // What each step of a locator matches against the page, the steps of its frames included, as the runner reads it for
722
+ // the same guard.
661
723
  function matchedTexts(locator) {
662
- return locatorSteps(locator).flatMap((step) => {
724
+ return everyStep(locator).flatMap((step) => {
663
725
  switch (step.by) {
664
726
  case 'testId':
665
727
  return [];
@@ -1,5 +1,7 @@
1
- import type { LocatorDialect, LocatorRecipe } from '../protocol/locator.ts';
2
- import type { Alert, Locator, NativeKeyboard, NativeLocatorStep, Page } from './page.ts';
1
+ import type { FrameRecipe, LocatorDialect, LocatorRecipe } from '../protocol/locator.ts';
2
+ import type { AppDialog } from './dialog.ts';
3
+ import type { InboxLink } from './inbox.ts';
4
+ import type { Alert, Download, FileChooser, Frame, Locator, NativeKeyboard, NativeLocatorStep, Page } from './page.ts';
3
5
  import type { TestRun } from './test-run.ts';
4
6
  import { Secret } from './secret.ts';
5
7
  /** The test, app and recipe behind a locator, for assertions. */
@@ -26,7 +28,7 @@ export declare class AppPage implements Page<true> {
26
28
  readonly keyboard: AppKeyboard;
27
29
  readonly alert: AppAlert;
28
30
  constructor(run: TestRun, app: string, dialect?: LocatorDialect);
29
- goto(url: string, options?: unknown): Promise<void>;
31
+ goto(url: string | InboxLink, options?: unknown): Promise<void>;
30
32
  getByTestId(id: string): AppLocator;
31
33
  getByRole(role: string, options?: unknown): AppLocator;
32
34
  getByLabel(text: string | RegExp, options?: unknown): AppLocator;
@@ -37,10 +39,42 @@ export declare class AppPage implements Page<true> {
37
39
  goBack(options?: unknown): Promise<void>;
38
40
  goForward(options?: unknown): Promise<void>;
39
41
  url(): Promise<string>;
42
+ frame(locator: unknown): AppFrame;
40
43
  title(): Promise<string>;
41
44
  scroll(delta: unknown, options?: unknown): Promise<void>;
45
+ fileChooser(action: unknown, options?: unknown): Promise<FileChooser>;
46
+ download(action: unknown, options?: unknown): Promise<Download>;
47
+ dialog(action: unknown, options?: unknown): Promise<AppDialog>;
48
+ popup(action: unknown, options?: unknown): Promise<AppPage>;
49
+ close(options?: unknown): Promise<void>;
50
+ route(pattern: unknown, answer: unknown): Promise<void>;
51
+ unroute(pattern: unknown): Promise<void>;
42
52
  swipe(direction: unknown, options?: unknown): Promise<void>;
43
53
  }
54
+ /** Where a frame is opened from: the test and app, the frames already on the way to it, and the rules it finds by. */
55
+ type FrameOwner = {
56
+ readonly run: TestRun;
57
+ readonly app: string;
58
+ readonly path: FrameRecipe[] | undefined;
59
+ readonly dialect: LocatorDialect | undefined;
60
+ };
61
+ /**
62
+ * A frame of one app's page, by the path of frames that leads to it from the page. Its locators carry that path, so
63
+ * every command finds the frame again on its way to the element, and find by the rules the page finds by.
64
+ */
65
+ export declare class AppFrame implements Frame<true> {
66
+ #private;
67
+ constructor(owner: FrameOwner & {
68
+ readonly path: FrameRecipe[];
69
+ });
70
+ getByTestId(id: string): AppLocator;
71
+ getByRole(role: string, options?: unknown): AppLocator;
72
+ getByLabel(text: string | RegExp, options?: unknown): AppLocator;
73
+ getByText(text: string | RegExp, options?: unknown): AppLocator;
74
+ getByPlaceholder(text: string | RegExp, options?: unknown): AppLocator;
75
+ locator(selector: string): AppLocator;
76
+ frame(locator: unknown): AppFrame;
77
+ }
44
78
  /** A locator on one app's page. */
45
79
  export declare class AppLocator implements Locator<true> {
46
80
  #private;
@@ -62,6 +96,8 @@ export declare class AppLocator implements Locator<true> {
62
96
  check(options?: unknown): Promise<void>;
63
97
  uncheck(options?: unknown): Promise<void>;
64
98
  scroll(delta: unknown, options?: unknown): Promise<void>;
99
+ dragTo(target: unknown, options?: unknown): Promise<void>;
100
+ setInputFiles(files: unknown, options?: unknown): Promise<void>;
65
101
  tap(options?: unknown): Promise<void>;
66
102
  swipe(direction: unknown, options?: unknown): Promise<void>;
67
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-page.d.ts","sourceRoot":"","sources":["../../src/api/app-page.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-page.d.ts","sourceRoot":"","sources":["../../src/api/app-page.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,19 @@ import { Deadline } from "../protocol/deadline.js";
3
3
  import { withLocation } from "../protocol/failures.js";
4
4
  import { parseKey } from "../protocol/keys.js";
5
5
  import { pageAddress } from "../protocol/locator-checks.js";
6
+ import { framePathOf, sameFramePath } from "../protocol/locator.js";
6
7
  import { recordedTitle } from "../protocol/page-facts.js";
7
8
  import { isPlainObject } from "../protocol/schema.js";
8
9
  import { listWords } from "../shared/list-words.js";
9
10
  import { readScrollArgument, readSelectArgument } from "./action-arguments.js";
11
+ import { readOpening, waitForDialog } from "./dialog.js";
12
+ import { readDragOptions } from "./drag.js";
13
+ import { download, fileChooser, setInputFiles } from "./files.js";
10
14
  import { formatValue } from "./format-value.js";
15
+ import { inboxCodeReference, inboxLinkReference } from "./inbox.js";
11
16
  import { cssRecipe, pickedRecipe, roleRecipe, scopedRecipe, testIdRecipe, textRecipe } from "./locator-recipes.js";
12
17
  import { misuse } from "./misuse.js";
18
+ import { route, unroute } from "./route.js";
13
19
  import { Secret } from "./secret.js";
14
20
  let readTarget;
15
21
  let readPageTarget;
@@ -39,6 +45,9 @@ export class AppPage {
39
45
  }
40
46
  goto(url, options) {
41
47
  const location = this.#run.location();
48
+ const link = inboxLinkReference(url);
49
+ if (link !== undefined)
50
+ return this.#run.action(this.#app, { kind: 'goto', url: link }, location, options);
42
51
  if (typeof url !== 'string')
43
52
  throw misuse(`goto() takes a URL string, received ${formatValue(url)}.`, this.#run);
44
53
  return this.#run.action(this.#app, { kind: 'goto', url }, location, options);
@@ -79,6 +88,10 @@ export class AppPage {
79
88
  return parsed === null ? '' : pageAddress(parsed);
80
89
  });
81
90
  }
91
+ // The frame's element is found from this page, so its locator must be one of this page's own.
92
+ frame(locator) {
93
+ return openFrame({ run: this.#run, app: this.#app, path: undefined, dialect: this.#dialect }, locator);
94
+ }
82
95
  title() {
83
96
  const location = this.#run.location();
84
97
  return this.#run.read(this.#app, 'page.title()', location, () => this.#title(location));
@@ -86,6 +99,31 @@ export class AppPage {
86
99
  scroll(delta, options) {
87
100
  return scroll({ run: this.#run, app: this.#app }, delta, options);
88
101
  }
102
+ fileChooser(action, options) {
103
+ return fileChooser({ run: this.#run, app: this.#app }, action, options);
104
+ }
105
+ download(action, options) {
106
+ return download({ run: this.#run, app: this.#app }, action, options);
107
+ }
108
+ dialog(action, options) {
109
+ return waitForDialog({ run: this.#run, app: this.#app }, action, options);
110
+ }
111
+ // A popup is an app's page of its own, by the name the parent gave it, and finds by the rules this page finds by.
112
+ popup(action, options) {
113
+ const location = this.#run.location();
114
+ const read = readOpening('popup', this.#run, action, options);
115
+ const wait = { app: this.#app, label: 'page.popup()', location, timeoutMs: read.timeoutMs, action: read.action };
116
+ return this.#run.waitForPopup(wait, (popup) => new AppPage(this.#run, popup.app, this.#dialect));
117
+ }
118
+ close(options) {
119
+ return this.#run.action(this.#app, { kind: 'close' }, this.#run.location(), options);
120
+ }
121
+ route(pattern, answer) {
122
+ return route({ run: this.#run, app: this.#app }, pattern, answer);
123
+ }
124
+ unroute(pattern) {
125
+ return unroute({ run: this.#run, app: this.#app }, pattern);
126
+ }
89
127
  swipe(direction, options) {
90
128
  return swipe({ run: this.#run, app: this.#app }, direction, options);
91
129
  }
@@ -122,6 +160,43 @@ export class AppPage {
122
160
  }
123
161
  }
124
162
  }
163
+ /**
164
+ * A frame of one app's page, by the path of frames that leads to it from the page. Its locators carry that path, so
165
+ * every command finds the frame again on its way to the element, and find by the rules the page finds by.
166
+ */
167
+ export class AppFrame {
168
+ #owner;
169
+ constructor(owner) {
170
+ this.#owner = owner;
171
+ }
172
+ getByTestId(id) {
173
+ return this.#locator(testIdRecipe(id));
174
+ }
175
+ getByRole(role, options) {
176
+ return this.#locator(roleRecipe(role, options));
177
+ }
178
+ getByLabel(text, options) {
179
+ return this.#locator(textRecipe('label', text, options));
180
+ }
181
+ getByText(text, options) {
182
+ return this.#locator(textRecipe('text', text, options));
183
+ }
184
+ getByPlaceholder(text, options) {
185
+ return this.#locator(textRecipe('placeholder', text, options));
186
+ }
187
+ locator(selector) {
188
+ return this.#locator(cssRecipe(selector));
189
+ }
190
+ frame(locator) {
191
+ return openFrame(this.#owner, locator);
192
+ }
193
+ #locator(built) {
194
+ const { run, app, path, dialect } = this.#owner;
195
+ if ('problem' in built)
196
+ throw misuse(built.problem, run);
197
+ return new AppLocator({ run, app, recipe: { ...built.recipe, ...(dialect === undefined ? {} : { dialect }), frame: path } });
198
+ }
199
+ }
125
200
  /** A locator on one app's page. */
126
201
  export class AppLocator {
127
202
  #target;
@@ -134,6 +209,10 @@ export class AppLocator {
134
209
  fill(value, options) {
135
210
  const { run, app, recipe } = this.#target;
136
211
  const location = run.location();
212
+ // A code from an inbox is a secret too, so it is told apart first.
213
+ const code = inboxCodeReference(value);
214
+ if (code !== undefined)
215
+ return run.action(app, { kind: 'fill', locator: recipe, value: code }, location, options);
137
216
  if (value instanceof Secret)
138
217
  return run.action(app, { kind: 'fill', locator: recipe, value: { secret: value.name } }, location, options);
139
218
  if (typeof value !== 'string')
@@ -197,6 +276,23 @@ export class AppLocator {
197
276
  scroll(delta, options) {
198
277
  return scroll(this.#target, delta, options);
199
278
  }
279
+ // The target is another locator of the same test's same app, whose recipe goes with the source's in one command.
280
+ dragTo(target, options) {
281
+ const { run, app, recipe } = this.#target;
282
+ const location = run.location();
283
+ const into = locatorTarget(target);
284
+ if (into === undefined)
285
+ throw misuse(`dragTo() takes the locator of the element to drop on, such as page.getByTestId('done'), received ${formatValue(target)}.`, run);
286
+ if (into.run !== run || into.app !== app)
287
+ throw misuse(`dragTo() drops on an element of the same page. The target is a locator of ${into.app === app ? 'another test' : `the app ${into.app}`}.`, run);
288
+ const read = readDragOptions(options);
289
+ if (!read.ok)
290
+ throw misuse(read.problem, run);
291
+ return run.action(app, { kind: 'dragTo', locator: recipe, target: into.recipe, ...read.steps }, location, read.call);
292
+ }
293
+ setInputFiles(files, options) {
294
+ return setInputFiles(this.#target, files, options);
295
+ }
200
296
  tap(options) {
201
297
  const { run, app, recipe } = this.#target;
202
298
  return run.action(app, { kind: 'tap', locator: recipe }, run.location(), options);
@@ -282,6 +378,18 @@ export function pageTarget(value) {
282
378
  export function withPlaywrightRules(value) {
283
379
  return value instanceof AppPage ? (pageByPlaywrightRules?.(value) ?? value) : value;
284
380
  }
381
+ // A frame is opened by the locator of its element, made on the page or frame `frame()` is called on, of the same app.
382
+ function openFrame(owner, value) {
383
+ const target = locatorTarget(value);
384
+ const { run, app } = owner;
385
+ if (target === undefined)
386
+ throw misuse(`frame() takes the locator of an <iframe> or a <frame>, such as page.locator('iframe#payment'), received ${formatValue(value)}.`, run);
387
+ if (target.run !== run || target.app !== app)
388
+ throw misuse(`frame() takes a locator of the page it is called on, and this one is of the app ${JSON.stringify(target.app)}.`, run);
389
+ if (!sameFramePath(target.recipe.frame, owner.path))
390
+ throw misuse('frame() takes a locator made on the page or frame it is called on, and this one was made on another frame.', run);
391
+ return new AppFrame({ run, app, path: framePathOf(target.recipe), dialect: owner.dialect });
392
+ }
285
393
  // A key `parseKey` refuses is never sent. The parent reads the key again, since it trusts nothing the test process checked.
286
394
  function press({ run, app, recipe }, key, options) {
287
395
  const location = run.location();