All checks were successful
Generalize patterns from LinkedIn automation: aria-label regex locators, dialog reopen-retry, contenteditable typing, persistent flag-file sessions, and a default noise exclude preset for NetworkErrorMonitor.
4.0 KiB
4.0 KiB
Changelog
Unreleased
- Resilient UI automation helpers — for driving third-party/adversarial SPAs (no stable test ids, occasional bot walls) rather than your own instrumented app:
byAriaLabel()/clickByAriaLabel()— find/click by a regex overaria-label, scoped to aPageor a narrowerLocator(e.g. one dialog)withDialog()— retry an action against a modal that might have silently closed, reopening it first via a caller-suppliedreopen()fillContentEditable()— type intocontenteditablerich-text fields (not just<textarea>), splitting on blank lines so multi-paragraph/bulleted text renders as separate blocks instead of collapsingrunPersistentSession()— keep one browser session open across many runs viaRUN/READY/CLOSEflag files instead of relaunching (and re-authenticating) every time; auto-relaunches on an unexpected crashNetworkErrorMonitor:useDefaultExcludes+ exportedCOMMON_NOISE_PATTERNS(ad/telemetry pixel hosts) so consumers stop hand-rolling the same exclude list per project
- Ops: npm publish is hard-required in the tag release job (removed soft-fail);
NPM_PUBLISH_TOKEN+ Outline update scopes documented as done indocs/OPS.md/ROADMAP.md
0.4.0 — 2026-07-15
- CLI —
playkit initscaffoldse2e/+ CI snippet;playkit smokepost-deploy public-host + health ping - Retry presets —
PLAYKIT_RETRY_PRESET=strictCi|flakyNetwork|defaultwired throughloadConfig(RETRY_PRESETSexport) - Gitea npm registry —
publishConfig+ release-jobnpm publish; consumer docs indocs/NPM_REGISTRY.md - Docs: CONSUMER/ROADMAP updated for v0.4; selftest + Outline sync remain as of 0.3.x line
0.3.1 — 2026-07-14
- Network interception / error monitor —
interceptNetworkCall(),startNetworkErrorMonitor()(seedocs/NETWORK.md) - Tests: expand coverage for network helpers —
NetworkErrorMonitor(record/dedupe/exclude/minStatus/assert),interceptNetworkCall(spy/fulfill/handler/method continue/non-JSON), plusglobToRegExp/responseMatchesFilter - Docs:
docs/OUTLINE.mdchecklist (update Outline QA & Dev Playkit page on each release);docs/IDEAS.mdfor OSS-borrowed backlog; adoption pause (no new consumer repos until soak) - CI: add tag-triggered
releasejob (.gitea/workflows/ci.yml) — re-runs build/test, verifies tag matchespackage.jsonversion andCHANGELOG.mddocuments it, creates a Gitea release with annpm packtarball attached. Requires a one-timeRELEASE_TOKENActions secret. - Docs: bump install pin examples from
v0.1.0tov0.3.0(README, CONSUMER.md) - Docs: lead with Mailpit (homelab default) instead of Mailtrap in README email section; use
createMailInbox()+readMailHtml()in the example instead of a provider-specific client - Ops: Pushgateway +
live-playkitGrafana board now provisioned via ansibledeploy/observability/ - Self-test suite —
selftest/fake site + Playwright CI job (docs/SELFTEST.md) - Outline sync —
scripts/outline-sync-playkit.py
0.3.0 — 2026-07-14
- Zod schema asserts —
assertSchema()+ optionalschemaonApiClientrequests - storageState helpers —
saveStorageState(),storageStateUse() - Trace-on-failure preset —
playkitFailureArtifacts()for Playwrightuse - Mailpit adapter marked shipped (was in 0.2.1)
0.2.1 — 2026-07-14
- Mailpit client +
createMailInbox()(prefer homelab Mailpit, else Mailtrap SaaS)
0.2.0 — 2026-07-14
- Mailtrap Email Testing client:
MailtrapClient,waitForEmail,extractLinks/firstLinkMatching - Export path
@levkin/playkit/mail
0.1.1 — 2026-07-14
- Add
preparescript so git installs builddist/for consumers
0.1.0 — 2026-07-14
Initial release.
- Browser:
BasePage,click,fill,safeGoto, visibility waits,waitForUrlHost,assertPublicHost - API:
ApiClientwith status expectations and secret redaction - Metrics:
TimingCollector+ Pushgateway helper - Config/logging helpers + consumer docs