Read browser-use's own DOM code (dom/service.py, is_element_visible_according_to_all_parents) and it decides visibility on CSS alone: display, visibility, opacity, plus bounds existence and a viewport intersection with 1000px of slack. There is NO minimum size gate anywhere. Ours had `r.width >= 80 && r.height >= 16`, and that floor was the entire reason ACE / CodeMirror-5 / Monaco composers were unreachable: their real input is a ~1x1 offscreen textarea that paints into a sibling div, so it fails a size test by construction while being the correct fill target. Measured: w3schools and onlinegdb scored 0/3 while every contenteditable editor (CodeMirror 6, Quill, TinyMCE, CKEditor) passed -- the input MECHANISM split the suite, not the site. This replaces the proxyHost patch from the previous commit, which reached the same sites by walking up to a composer-sized ancestor. Their rule is simpler, more general, and needs no ancestor heuristic, so proxyHost is deleted rather than kept alongside. The floor was also doing less work than it looked: junk is excluded by requiring a rich role or a nearby submit AND score >= 2, and a honeypot is display:none / opacity:0, which still fails. Measured on the merged tree, same lane (OSW_MODEL=opus-4-8-cc): - anon w3schools 3/3, i.e. ACE still reached with proxyHost gone - holdout 18/20 = 90%, byte-identical to before: no regression - other_ms unchanged at 1211ms deepl regressed to not_measurable in the same sweep and it is NOT this change: A/B'd by restoring the old floor and re-running, it fails identically. deepl now redirects to /en/translator/l/en/pt-BR and serves one textbox; the redirect predates the change in the logs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
End-to-end tests (packaged app, macOS + Windows)
Playwright tests that launch the packaged OpenSwarm desktop app (the real built binary, asar + bundled python-env + real paths) and drive it the way a user would. The same specs run unchanged on macOS and Windows; CI builds the artifact per-OS, then runs these. No provider API key is needed (no agent turn), so the suite is hermetic and deterministic on a clean machine.
What it checks (per OS)
- Main window paints the React shell (first meaningful paint).
- The preload bridge (
window.openswarm) is exposed. - The real backend the app spawned reaches HTTP-ready (
/api/health/check-> 200). - Provenance: the running app's
getBuildInfo()sha matcheselectron/build-info.json. - App version is reported.
Run locally
- Build the app first (produces
electron/dist/...):- Windows:
pwsh scripts/build-app-win.ps1 - macOS:
bash scripts/build-app.sh
- Windows:
- Then:
cd e2e PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm ci # Electron ships its own Chromium npm test
Override the binary location with E2E_APP_PATH=/path/to/app if your build
output lives elsewhere. Auto-detection covers win-unpacked/OpenSwarm.exe and the
mac OpenSwarm.app variants.
CI
.github/workflows/e2e.yml runs this on a windows-latest + macos-latest
matrix: it builds the unsigned app, then runs the suite. Tag-driven signed
releases are covered separately by release-windows.yml / release-macos.yml.