---
title: "Review a multi-page sign-up form · Proxy Mail QA"
description: "Check a sign-up that goes over several screens: one test account across all of them, and the verification email wherever it is sent."
url: https://proxymail.qa/solve/review-a-multi-page-sign-up-form
---

1. [Home](https://proxymail.qa/)
2. [What we solve](https://proxymail.qa/solve)

# Review a multi-page sign-up form

Many sign-ups ask for an email and a password, then for a name, a company, a team size or a plan on the screens after Next. Each extra screen is a place for the account to go wrong.

Updated 5 November 2026

> **Our recommendation, up front.** We make Proxy Mail QA, so we’re not neutral. For a sign-up that goes over several screens, we recommend it for keeping one test account across all of them, with values that fit each screen’s fields, and for the verification email wherever in the flow it’s sent. Today that works best through an AI agent or an automated test. By hand, Proxy Mail QA for Chrome fills the first screen, the one with the email field, and you type the later ones. Proxy Mail QA never presses Next or submits, and it doesn’t know what goes in fields only your app has, such as company size or “How did you hear about us?”: your agent or test fills those.

## Why multi-page sign-ups break

- **The account has to carry over.** Screen 2 belongs to the account made on screen 1\. A test that uses a new name or address on each screen makes an account no real person would have.
- **Later screens ask what only your app asks.** Typing the same answers every run is slow, and every tester picks different ones, so results can’t be compared.
- **Some screens come after the account exists.** Onboarding questions often appear after the verification email, so the test has to cover the email and the screens around it.
- **People leave halfway.** They press Back, refresh, close the tab and come back tomorrow.
- **The screens change.** A question moves from screen 3 to screen 2, and a test that lists each screen’s fields goes stale.

## What to check

1. Every screen belongs to the same account: the name on the last screen matches the first.
2. A required question on a later screen can’t be skipped, and the page says why.
3. Back keeps what was typed, and Next after Back doesn’t make a second account.
4. Refreshing a later screen, or leaving and coming back, either picks up where the person was or starts again cleanly. A half-made account mustn’t block the email address from signing up again.
5. The step indicator (“Step 2 of 3”) is right, and you can’t skip ahead by typing a later screen’s URL.
6. The verification email arrives once, whichever screen sends it.
7. Someone who verified but didn’t finish can sign in and is taken back to the unfinished screen.
8. Answers from later screens are kept: they show on the account, or in the welcome email that uses them.

## With an AI agent

`form_values` answers one screen at a time. On the first screen it makes a new test address and returns values for the email, names, username, password, date of birth and country. On each later screen, the agent sends that screen’s fields with the same `address`, so the account carries over. Fields it doesn’t recognise come back empty with a note, and the agent fills those itself.

With Proxy Mail QA connected in Qoder ([Marketplace](https://qoder.com/en/marketplace/connector?id=proxymail-qa)):

Prompt

```text
Sign up at https://staging.acme.dev/signup with Proxy Mail QA and go through every
screen of the sign-up. Start a run.
On the first screen, use form_values with the page's fields. On every later screen,
use form_values again with the same address. For fields it leaves empty, use these
answers: company size "11-50", role "Engineering", heard about us "Search".
Note the time before each Next, and when the verification email comes, finish it with
the code or link and carry on.
Then check the list below, finish the run and give me the report.

```

Paste the eight checks above under the prompt. Giving the answers for your own fields in the prompt keeps them the same on every run.

## In a Playwright test

With the [proxymail-qa](https://proxymail.qa/docs/node) npm package, call `formValues` on each screen and pass the first screen’s address to the rest:

TypeScript

```ts
import { expect, test, type Locator } from '@playwright/test';
import { ProxyMailQA } from 'proxymail-qa';

const qa = new ProxyMailQA(); // reads PROXYMAIL_QA_API_KEY

// What the page says about each field, as formValues expects it.
const readFields = (form: Locator) =>
  form.locator('input, select').evaluateAll((elements) =>
    elements.map((el, i) => {
      const input = el as HTMLInputElement & HTMLSelectElement;
      input.dataset.field = String(i);
      return {
        id: String(i),
        type: input.tagName === 'SELECT' ? 'select' : input.type,
        name: input.name,
        label: input.labels?.[0]?.textContent ?? input.getAttribute('aria-label') ?? '',
        autocomplete: input.getAttribute('autocomplete') ?? '',
        pattern: input.pattern || undefined,
        minLength: input.minLength > 0 ? input.minLength : undefined,
        maxLength: input.maxLength > 0 ? input.maxLength : undefined,
        options: input.tagName === 'SELECT' ? Array.from(input.options, (o) => ({ value: o.value, label: o.text })) : undefined,
      };
    }),
  );

const fill = async (form: Locator, values: { id: string; value: string | null }[]) => {
  for (const { id, value } of values) {
    if (value === null) continue;
    const field = form.locator(`[data-field="${id}"]`);
    if (await field.evaluate((el) => el.tagName === 'SELECT')) await field.selectOption(value);
    else await field.fill(value);
  }
};

test('one account across every screen of the sign-up', async ({ page }) => {
  await page.goto('/signup');
  const form = page.locator('form');

  const first = await qa.formValues({ fields: await readFields(form) });
  await fill(form, first.values);
  const submitted = new Date();
  await page.getByRole('button', { name: 'Continue' }).click();

  await page.waitForURL('**/signup/about-you');
  const second = await qa.formValues({ fields: await readFields(form), address: first.address });
  await fill(form, second.values);
  await form.getByLabel('Company size').selectOption('11-50'); // your app's own field
  await page.getByRole('button', { name: 'Finish' }).click();

  const { value: code } = await qa.waitForCode(first.address, { since: submitted });
  await page.getByLabel('Code').fill(code);
  await expect(page).toHaveURL(/welcome/);

  expect((await qa.countEmails(first.address, { since: submitted, type: 'code' })).count).toBe(1);
  await qa.deleteAddress(first.address);
});

```

The same account gets the same name and date of birth on every screen, so a failure on screen 2 is about your app, not the test data.

## By hand, with Proxy Mail QA for Chrome

In the version in the Chrome Web Store today (0.8.0):

1. Turn the extension on for your site, and on the first screen click the Proxy Mail QA button in the email field. It fills the email, names, username, date of birth and password there.
2. Later screens have no email field, so they don’t get the button that fills the test account. Type them, copying the test account’s name, username or date of birth from its address in [the app](https://app.proxymail.qa/?mode=signup), where each has a Copy button.
3. When the verification email arrives, its code or link shows in the page, with **Fill** or **Open**, as on a one-screen form.

## What Proxy Mail QA doesn’t do here

- **Press Next or submit.** You, your agent or your test decide what’s tested on each screen.
- **Fill your own fields, today.** Company size, plan and similar questions are filled by the agent or the test, or typed by hand.
- **SMS or phone verification** on a later screen: it receives email only. Use your SMS provider’s test numbers.
- **A payment screen.** Use your payment provider’s test mode and test cards. Proxy Mail QA never fills card fields.

For the first screen on its own, see [Review a simple sign-up form](https://proxymail.qa/solve/review-a-simple-sign-up-form).

## Try it on your next sign-up test

Free plan, no credit card. Create an address and watch the code or link arrive.

[Create a free account](https://app.proxymail.qa/?mode=signup&from=site-solve-review-a-multi-page-sign-up-f)

## Related guides

- [Test sign-up and email verificationA fresh, private address for every sign-up test, with the verification link or code ready the moment it lands.](https://proxymail.qa/solve/email-verification-testing)
- [Test OTP and one-time login codesCodes pulled out of the email with a Copy button and a countdown when the email says how long they last.](https://proxymail.qa/solve/otp-code-testing)
- [Test magic links and passwordless sign-inSingle-use links that are never opened or prefetched on our side, so they still work when you click them.](https://proxymail.qa/solve/magic-link-testing)
- [Test password reset emailsRequest, receive and use reset links, and keep the new password saved next to the test account.](https://proxymail.qa/solve/password-reset-testing)
- [Stop sharing one Gmail inbox for QAPrivate, disposable addresses for every tester instead of one shared mailbox and a pile of plus-addresses.](https://proxymail.qa/solve/shared-test-inbox)
- [Take QA notes by voice with Wispr FlowDictate what each test account is for, its state and what you found, straight into its notes, in seconds.](https://proxymail.qa/solve/voice-notes-wispr-flow)
- [Verification link points to localhost:3000Why emails from staging link to localhost, how to fix it in Supabase, Firebase and other stacks, and how we flag it.](https://proxymail.qa/solve/localhost-links)
- [Common Supabase sign-up and login problemsEmails that never arrive, links that expire or sign nobody in, and sign-ups that fail, with the fix for each.](https://proxymail.qa/solve/supabase-auth-problems)
- [Common Firebase sign-up and login problemsMissing verification and reset emails, verified users who still look unverified, failing links and sign-up limits, with the fix for each.](https://proxymail.qa/solve/firebase-auth-problems)
- [Sign-up and login problems in vibe-coded appsThe login bugs AI-built apps usually ship with: emails only you receive, links to the preview, missing pages, and what to ask the builder.](https://proxymail.qa/solve/vibe-coded-login-problems)
- [Test sign-up emails in PlaywrightA complete Playwright test for sign-up codes and links, from a fresh inbox to the report on the pull request.](https://proxymail.qa/solve/playwright-email-tests)
- [Test sign-up emails in CypressA complete Cypress test for sign-up links and codes, with the email waits running as Cypress tasks.](https://proxymail.qa/solve/cypress-email-tests)
- [Test sign-up emails with pytestA complete pytest test for sign-up codes and links, with Playwright for Python or Selenium and a one-file helper.](https://proxymail.qa/solve/pytest-email-tests)
- [Test coupon codes and welcome offersThe coupon with its discount, end date and arrival time, what checkout did with it, and a failure when an expired or reused one is accepted.](https://proxymail.qa/solve/coupon-code-testing)
- [Test unsubscribe links and one-click unsubscribeThe unsubscribe headers and link checked on every marketing email, and a watch that flags any marketing after unsubscribing, with no time limit.](https://proxymail.qa/solve/unsubscribe-testing)
- [Test that a welcome offer can't be claimed twiceVersions of one address that reach the same inbox, and a check that fails when the same person got the offer more than once.](https://proxymail.qa/solve/welcome-offer-abuse)
- [AI sign-up page reviewLet an agent check the sign-up through to the email: delivery, the link, how it was sent, and that only one arrives.](https://proxymail.qa/solve/ai-sign-up-page-review)
- [AI registration page reviewAn agent tries every field with values made for it, then finishes the registration through the email.](https://proxymail.qa/solve/ai-registration-page-review)
- [Review a sign-up page by handA checklist for your browser and phone, in the order that finds the most problems.](https://proxymail.qa/solve/how-to-review-my-sign-up-page)
- [Review a simple sign-up form12 checks for a form with an email, a password and perhaps a name.](https://proxymail.qa/solve/review-a-simple-sign-up-form)
- [Review a financial sign-up formThe emails, age and country rules and awkward values in a financial sign-up, and what needs other tools.](https://proxymail.qa/solve/review-a-financial-website-sign-up-form)
- [An email address for testing registrationA new, real address for every registration try, with the code or link ready to use.](https://proxymail.qa/solve/email-for-checking-my-registration-form)
- [An email address for testing sign-inTest accounts with saved passwords and an inbox for codes, magic links and resets.](https://proxymail.qa/solve/email-for-checking-my-sign-in-form)
- [How long should a password be?NIST's numbers for password length and rules, and test passwords to check yours.](https://proxymail.qa/solve/how-long-should-my-registration-form-password-be)
- [No error for a password that breaks the rulesThe eight usual causes of a silent password field, and how to tell which one it is.](https://proxymail.qa/solve/why-is-my-registration-form-not-showing-password-errors)
- [Help me check my websiteA whole-site check in an afternoon, in the order that finds the costliest problems first.](https://proxymail.qa/solve/help-me-check-my-website)
- [Tools to build and check a websiteA toolkit by area, most of it free and none of it ours, except for account emails.](https://proxymail.qa/solve/tools-to-help-build-and-check-my-website)
- [What tools do I need for a website?The full list, then which parts a simple site can skip.](https://proxymail.qa/solve/what-tools-do-i-need-when-building-a-website)

[Built your app with an AI tool? Pick yours](https://proxymail.qa/built-with)
