最初に私たちの推奨を述べます。 私たちは Proxy Mail QA の開発元なので、中立ではありません。複数の画面にわたるサインアップでは、各画面の欄に合う値で 1 つのテストアカウントをすべての画面で使い続けること、そしてフローのどこで送られても確認メールに対応することにおすすめします。現在、これは AI エージェントや自動テストを通すと最もうまく動きます。手動の場合、Proxy Mail QA for Chrome はメール欄のある最初の画面を入力し、以降の画面はご自身で入力します。Proxy Mail QA は「次へ」を押したり送信したりせず、会社規模や「どこで知りましたか?」など、あなたのアプリにしかない欄に何を入れるかも知りません。それらはエージェントやテストが入力します。
複数ページのサインアップが壊れる理由
- アカウントを引き継ぐ必要がある。 画面 2 は画面 1 で作られたアカウントのものです。画面ごとに新しい名前やアドレスを使うテストは、実在の人が持つことのないアカウントを作ります。
- 後の画面では、あなたのアプリ固有の質問がある。 毎回同じ回答を入力するのは時間がかかり、テスターごとに選ぶ回答が違うため、結果を比較できません。
- アカウント作成後に来る画面がある。 オンボーディングの質問は確認メールの後に出ることが多いため、テストはメールとその前後の画面をカバーする必要があります。
- 途中で離脱する人がいる。 戻るを押したり、更新したり、タブを閉じて翌日戻ってきたりします。
- 画面は変わる。 質問が画面 3 から画面 2 に移ると、各画面の欄を列挙したテストは古くなります。
確認する内容
- すべての画面が同じアカウントに属している:最後の画面の名前が最初の画面と一致する。
- 後の画面の必須の質問は飛ばせず、ページがその理由を示す。
- 戻ると入力内容が残り、戻った後に「次へ」を押しても 2 つ目のアカウントは作られない。
- 後の画面で更新したり、離れて戻ったりすると、続きから再開するか、きれいに最初からやり直すかのどちらかになる。作りかけのアカウントが、そのメールアドレスでの再サインアップを妨げてはいけません。
- ステップ表示(「ステップ 2/3」)が正しく、後の画面の URL を入力して先に進むことはできない。
- 確認メールは、どの画面から送信されても1回だけ届きます。
- 確認は済ませたものの登録を完了していない人は、サインインすると未完了の画面に戻されます。
- 後の画面での回答は保持されます。アカウントに表示されるか、それを使うウェルカムメールに表示されます。
AI エージェントで
form_values は1画面ずつ回答します。最初の画面では新しいテスト用アドレスを作成し、メール、氏名、ユーザー名、パスワード、生年月日、国の値を返します。後の各画面では、エージェントがその画面のフィールドを同じ address とともに送信するため、アカウントが引き継がれます。認識できないフィールドは注記付きで空のまま返され、エージェントが自分で入力します。
Qoder で Proxy Mail QA を接続している場合(Marketplace):
Sign up at https://staging.acme.dev/signup with Proxy Mail QA and go through everyscreen 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 theseanswers: company size "11-50", role "Engineering", heard about us "Search".Note the time before each Next, and when the verification email comes, finish it withthe code or link and carry on.Then check the list below, finish the run and give me the report.上の8つのチェックをプロンプトの下に貼り付けてください。独自のフィールドの回答をプロンプトで指定すると、毎回の実行で同じ値になります。
Playwright のテストで
proxymail-qa npm パッケージを使い、各画面で formValues を呼び出して、最初の画面のアドレスを残りの画面に渡します。
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);});同じアカウントはどの画面でも同じ名前と生年月日になるため、画面2での失敗はテストデータではなくアプリの問題です。
手動で、Proxy Mail QA for Chrome を使って
現在 Chrome Web Store にあるバージョン(0.8.0)では次のとおりです。
- サイトで拡張機能をオンにし、最初の画面でメールフィールドの Proxy Mail QA ボタンをクリックします。そこにあるメール、氏名、ユーザー名、生年月日、パスワードが入力されます。
- 後の画面にはメールフィールドがないため、テストアカウントを入力するボタンは表示されません。アプリ でアドレスからテストアカウントの名前、ユーザー名、生年月日をコピーして入力してください。それぞれにコピーボタンがあります。
- 確認メールが届くと、1画面のフォームと同様に、そのコードまたはリンクが Fill または Open とともにページに表示されます。
ここで Proxy Mail QA が行わないこと
- 「次へ」や送信を押す。 各画面で何をテストするかは、あなた、エージェント、またはテストが決めます。
- 独自のフィールドの入力(現時点)。 会社の規模やプランなどの質問は、エージェントやテストが入力するか、手で入力します。
- 後の画面での SMS や電話による確認:受信できるのはメールのみです。SMS プロバイダーのテスト用番号を使ってください。
- 支払い画面。 決済プロバイダーのテストモードとテストカードを使ってください。Proxy Mail QA がカードのフィールドを入力することはありません。
最初の画面だけについては、シンプルなサインアップフォームを確認するをご覧ください。