Tags: devicelab-dev/maestro-runner
Tags
fix(record): keep screenrecord alive after the launching adb shell exits A backgrounded screenrecord that inherits the adb shell's stdio either dies with the session or holds it open, so --record's start-verification found no process and every recording silently skipped on real devices. Redirect stdio to /dev/null at all four launch sites — the standalone startRecording step had the same latent bug. Caught validating the 1.1.24 build on a Pixel 4a; both Android drivers now pull a playable MP4 into the flow's report assets.
docs: add CHANGELOG entry for v1.1.16 Release notes for 1.1.16 — cropOn, --artifacts, experimental iOS DeviceLab driver, iOS setLocation, Android DeviceLab tap reliability + lazy-retry timing fix, iOS startup resilience, AWS Device Farm support. Credits issue reporters.
Fix web actionability gate regressions and AX-tree non-Element returns
Three closely-related regressions surfaced by the desktop browser suites
on 1.1.15:
1. The actionability gate's `_isElementVisible` re-check was stricter
than the finder cascade's own visibility logic, so legitimately
visible elements got rejected. The worst case was `<input type=
checkbox style="opacity:0">` covered by a styled `<label>` (TodoMVC
pattern) — clicking it works in real browsers, but the gate's
opacity-zero rejection blocked the dispatch. Dropped the visibility
re-check from `_isActionable`. The gate keeps its unique
contributions: `disabled` / `aria-disabled` / `pointer-events: none`.
2. `findByAXTree` returned `#text` node handles when the AX node's
accessible name came from a single text child (saucedemo "Back to
products", demoblaze "Home"). Rod's `Click()` can't dispatch on
non-Element nodes, so the tap failed silently. `axNodeToElement`
now walks up to the nearest ancestor Element when the resolved
handle has `nodeType !== 1`.
3. SPAs that put the route label into `document.title` (saucedemo
again) had their accessible name surfaced by the AX-tree query
against `<title>` — an off-screen metadata element. Both
`findByAXTree` and the JS `findByText` resolver now filter out
non-renderable tags (`<title>`, `<script>`, `<style>`, `<meta>`,
`<link>`, `<base>`, `<head>`, `<noscript>`, `<template>`).
Bonus: when the actionability gate does time out, the error message
now includes the specific rejection reason
(`last rejection: pointer-events-none`, `last rejection: disabled-prop`,
etc.) read from a `__maestroLastRejection` global the gate maintains.
Helps users debug their own flows without re-running with -v.
Verified on the desktop browser suites:
saucedemo: 9/12 → 10/12 (Browse Products fixed)
demoblaze: 10/12 → 11/12 (Home Navigation fixed)
todomvc: 3/10 → 4/10 in suite, 10/10 when run in isolation
(remaining suite failures are localStorage carry-over
between flows — pre-existing test infrastructure
issue, not a 1.1.15 regression)
the-internet 13/15, expandtesting 12/15: unchanged (pre-existing
site quirks, not 1.1.15-related)
PreviousNext