Skip to content

v27.0.1

Choose a tag to compare

@soulgalore soulgalore released this 02 May 09:12
· 135 commits to main since this release

Fixed

  • commands.click now falls back to a JavaScript click when the Actions API can't reach the element. Hidden elements have a zero-size bounding box, so the Actions API click that became the default in #2381 silently moved the pointer to (0,0) and clicked nothing instead of triggering the handler. The click command now pre-checks isDisplayed() and uses a JS click when the element isn't displayed, and otherwise catches any Actions API failure and retries with a JS click. Each fallback is logged at info level so it's visible without --verbose. Restores the documented "hide everything before clicking" pattern used by visual-metric scripts #2452.
  • engineDelegate.afterBrowserStopped() is no longer called twice per iteration on the happy path. #2432 added a safety-net cleanup call in the iteration finally block so failure paths still release long-lived helpers, but in the happy path _stopBrowser had already invoked the cleanup, so it ran twice. The visible symptom on Chrome was a spurious ENOENT error from the second cleanUserDataDir (the first call had already removed the directory). It could also double-terminate the iOS simulator's Safari and the ios-capture server. The safety-net now runs only when _stopBrowser didn't already reach the cleanup #2453.
  • cleanUserDataDir cleanup now uses rm(..., { recursive: true, force: true }) so a missing directory is treated as already-cleaned. Defense in depth alongside #2453: if anything in the future double-calls the Chrome cleanup, or if Chrome failed to create the directory in the first place, the cleanup stays quiet instead of logging a spurious ENOENT #2454.