Frequently asked questions.

Playwright and Selenium setup, Test Run Diffs, security and plans.

Product Basics

What is TestMap?
TestMap is a Risk-Based Test Coverage tool built for Playwright and Selenium teams. It maps every interactive element in your app from the tests you already run, then overlays real GA4 traffic on top, so coverage is weighted by what users actually do, not by how many lines of code your tests execute.
Is TestMap built for Playwright?
Yes. TestMap is Playwright-native: the plugin plugs into Playwright’s own fixture and reporter model, so you install @appsurify-testmap/rrweb-playwright-plugin, add its reporter in playwright.config.ts and import test and expect from the plugin. Your Playwright config, projects and CI stay as they are. Playwright Test 1.50 and later on Node 18 or later is supported.
How is TestMap different from traditional code coverage?
Code coverage tools such as Istanbul and JaCoCo count source lines executed during tests. TestMap counts the buttons, links and inputs on the rendered page and whether a test interacted with them, then weights each one by real user traffic. A suite can execute 94% of lines and still never click the submit button on mobile checkout; TestMap shows that gap, code coverage cannot.
What is Risk-Based Test Coverage?
Risk-Based Test Coverage measures how well your tests cover the parts of the product users actually use. Instead of treating every element as equally important, it weights each interactive element by real traffic and compares that with how many tests exercise it. The result is a ranked list of gaps where an escaped bug would hurt most, and a Test Efficiency Score from 0 to 100.
What is the Test Efficiency Score?

The Test Efficiency Score (TES) is a 0–100 number for a page, a run or a project. It rises when tests sit where users are and falls when high-traffic elements go untested or tests pile up on elements nobody uses. It needs Google Analytics 4 connected and is included on Pro and above.

Integrations

Which Playwright versions and languages are supported?

Playwright Test 1.50 and later for Node.js (TypeScript and JavaScript), on Node 18 or later. The plugin is an npm package, so Playwright for Python, Java and .NET are not supported at launch.

Does TestMap work with Selenium?

Yes, as a first-class framework. The @appsurify-testmap/rrweb-selenium-plugin supports Selenium 4 with the JavaScript (Node.js) bindings over classic WebDriver — no BiDi session needed — and produces the same heatmap, priority buckets, Test Efficiency Score and Test Run Diffs as the Playwright plugin.

Which Selenium language bindings are supported?

The plugin is an npm package, so Selenium 4 with the JavaScript (Node.js) bindings is supported at launch. Java, Python and C# bindings have not shipped; email sales@appsurify.com if that is your stack and we will tell you where it sits on the roadmap.

Does TestMap work with Cypress?

Yes. The @appsurify-testmap/rrweb-cypress-plugin supports Cypress 14 and 15; reports upload the same way as Playwright reports.

Which analytics platforms are supported?

 Google Analytics 4 at launch, through a read-only service account with the Viewer role and a lightweight event tracker on your site. TestMap never writes to your GA4 property.

Which CI systems are supported?

GitHub Actions, GitLab CI and Jenkins. GitHub Actions has a ready-made upload action, appsurify/testmap-upload-action, on the GitHub Marketplace; GitLab CI, Jenkins and any CI system that can run a curl command upload reports to the import endpoint with a personal access token.

Does TestMap have an API or MCP server?
Reports upload through a REST endpoint (POST /api/v1/reports/import) with a personal access token. TestMap also publishes an MCP server, @appsurify-testmap/mcp-server, now in beta: it gives coding agents such as Claude Code, Cursor and Copilot read-only access to your coverage data — untested elements ranked by real traffic, zero-coverage pages, the Test Efficiency Score and Test Run Diffs. The agent writes the test; TestMap tells it where. Beta features can change before general availability.
Does TestMap work with Playwright Test Agents and AI-generated tests?

Yes. TestMap does not care who wrote the test. Generated tests tend to pile up on easy elements and skip hard ones; the Over-Tested and Not Tested buckets show both, and the Test Run Diff shows what a generated change added or dropped.

About Test Run Diffs

What is a Test Run Diff?
A Test Run Diff compares two Playwright, Selenium or Cypress runs and lists every element whose coverage changed: Lost (was covered, now untested), Gained (now covered), New (appeared in the snapshot) and Removed (gone from the page). Each row shows usage and test percentages before and after, so a lost test on a high-traffic button stands out.
Do I need Google Analytics to see Test Run Diffs?
No. Diffs work from DOM coverage alone. With GA4 connected, each changed element also shows its real usage, which is how you tell a lost test on the checkout button from a lost test on a footer link.
Which plans include Test Run Diffs?
Every plan, including Free.
How are diffs surfaced?
In the dashboard: open any run, choose a run to compare with, and the Diff tab lists lost, gained, new and removed elements with the affected area highlighted on the page snapshot.
Can I catch a coverage drop before it merges?
Yes. Upload a run from your pull-request pipeline and compare it with the latest run from your main branch. Anything in the Lost bucket is coverage the PR removed, including a .only left in a spec file or a test that stopped clicking an element after a refactor.

Setup, data, and security.

How long does setup take?
About 10 minutes for DOM coverage: create a workspace, create a project, install the plugin, run your suite and upload the report. Add about 5 minutes if you administer the GA4 property, or send the access request on the Installation page to whoever does; GA4 then needs 24–48 hours before the traffic overlay fills in. (link “access request on the Installation page” to /installation/#ga4-request)
Does TestMap change my app code?
DOM coverage needs no change to the application: the plugin lives in your test project and records the rendered DOM during tests. Behavioral coverage adds one tracker tag to your site (a script tag or a Google Tag Manager tag) so GA4 receives element-level interaction events. Nothing is injected into your build.
Where is TestMap hosted?
TestMap is a hosted SaaS; each workspace runs at its own subdomain of testmap.cloud and data is encrypted in transit and at rest.
Do you see my source code?
No. The plugin records rendered DOM snapshots and test interactions from your test runner. It does not read, upload or store source files.
Is the test agent open source?
The framework plugins and the GA4 event tracker are published publicly on npm under the @appsurify-testmap scope, so you can inspect exactly what they record. The dashboard, scoring and alerting are proprietary.
What data does the GA4 tracker send?
A ui_event for each interaction with the event type, the element tag, a stable element selector (sent as a SHA-256 hash by default), a timestamp, and the element’s visible text clipped to 100 characters. Form fields are always sent as [redacted], as is any element marked data-gce-private. It sends no form values. Hashing stays on; text capture can be turned off in the tracker options.

Pricing & Plans

How much does TestMap cost?

Free covers 1 user, 3 projects and 5 runs a month with the DOM coverage heatmap and Test Run Diffs. Solo is $59 a month and adds the GA4 traffic overlay; Pro is $149 with full Behavioral Coverage, the Test Efficiency Score and CI alerts; Max is $299 with priority support; Team is custom-priced with SSO, SCIM and audit logs. There are no overage bills. Full tier comparison on the pricing page.

Does the Free tier expire?
No. Free includes 1 user, 3 projects, 5 runs a month, Test Run Diffs and the full DOM coverage heatmap for Playwright, Selenium and Cypress, and it never expires.
Can I try a paid tier before paying?
Start on Free with no card and upgrade from inside the dashboard whenever you are ready. Changes apply from the next billing cycle, and you can downgrade at any time.
What happens when I reach my monthly run limit?
Uploads pause until your next billing cycle or until you upgrade. Nothing is deleted and your dashboard keeps showing the latest run.

When tests pass but bugs ship.

Why do my Playwright tests pass but bugs still ship?
Tests that pass green often miss the elements users actually hit. 100% code coverage means every line ran during a test, not that every interactive element was exercised. Use TestMap to map your actual UI, weight it by traffic, and rank what needs tests next.
What does 100% coverage actually mean?
For code coverage it means every line executed at least once during the suite, with no guarantee that anything was asserted or that any real user path was followed. For UI coverage it would mean every interactive element was touched by a test. Neither guarantees the absence of bugs; traffic-weighted coverage tells you which gaps are worth closing first.
How do I find which parts of my UI aren't tested?
Run your suite with the TestMap plugin, upload the report and open the heatmap. Each page shows every interactive element marked tested or untested, with its selector. Connect GA4 and the untested elements are ranked by real usage.
What should I test in Playwright when I don't know where to start?
Start with the elements that carry the most user traffic and have no tests. In TestMap that is the Not Tested bucket sorted by usage. Write one test per element from the top of the list and the Test Efficiency Score rises with each one.
Can my coding agent ask TestMap which UI elements are untested?
Yes, through the TestMap MCP server (beta). Connect it to Claude Code, Cursor, Copilot or any MCP client with a personal access token and the agent can ask for the untested elements on a page ranked by real user traffic, the pages with zero coverage, and what the last run lost or gained, then write or fix the tests itself. The server is read-only: it never changes your tests or your application.
THE BOTTOM LINE

Still have questions?

The fastest answer is usually in the product. Start free and poke around — or email us.