英語から自動翻訳されています。

英語で読む
Proxy Mail QA

複数ページのサインアップフォームをレビューする

多くのサインアップでは、メールとパスワードを求めた後、「次へ」の後の画面で名前、会社、チーム規模、プランを尋ねます。画面が増えるたびに、アカウントがおかしくなる箇所が増えます。

更新日:

最初に私たちの推奨を述べます。 私たちは Proxy Mail QA の開発元なので、中立ではありません。複数の画面にわたるサインアップでは、各画面の欄に合う値で 1 つのテストアカウントをすべての画面で使い続けること、そしてフローのどこで送られても確認メールに対応することにおすすめします。現在、これは AI エージェントや自動テストを通すと最もうまく動きます。手動の場合、Proxy Mail QA for Chrome はメール欄のある最初の画面を入力し、以降の画面はご自身で入力します。Proxy Mail QA は「次へ」を押したり送信したりせず、会社規模や「どこで知りましたか?」など、あなたのアプリにしかない欄に何を入れるかも知りません。それらはエージェントやテストが入力します。

複数ページのサインアップが壊れる理由

確認する内容

  1. すべての画面が同じアカウントに属している:最後の画面の名前が最初の画面と一致する。
  2. 後の画面の必須の質問は飛ばせず、ページがその理由を示す。
  3. 戻ると入力内容が残り、戻った後に「次へ」を押しても 2 つ目のアカウントは作られない。
  4. 後の画面で更新したり、離れて戻ったりすると、続きから再開するか、きれいに最初からやり直すかのどちらかになる。作りかけのアカウントが、そのメールアドレスでの再サインアップを妨げてはいけません。
  5. ステップ表示(「ステップ 2/3」)が正しく、後の画面の URL を入力して先に進むことはできない。
  6. 確認メールは、どの画面から送信されても1回だけ届きます。
  7. 確認は済ませたものの登録を完了していない人は、サインインすると未完了の画面に戻されます。
  8. 後の画面での回答は保持されます。アカウントに表示されるか、それを使うウェルカムメールに表示されます。

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 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.

上の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)では次のとおりです。

  1. サイトで拡張機能をオンにし、最初の画面でメールフィールドの Proxy Mail QA ボタンをクリックします。そこにあるメール、氏名、ユーザー名、生年月日、パスワードが入力されます。
  2. 後の画面にはメールフィールドがないため、テストアカウントを入力するボタンは表示されません。アプリ でアドレスからテストアカウントの名前、ユーザー名、生年月日をコピーして入力してください。それぞれにコピーボタンがあります。
  3. 確認メールが届くと、1画面のフォームと同様に、そのコードまたはリンクが Fill または Open とともにページに表示されます。

ここで Proxy Mail QA が行わないこと

最初の画面だけについては、シンプルなサインアップフォームを確認するをご覧ください。

次のサインアップテストで試してみてください

無料プラン、クレジットカード不要。アドレスを作成して、コードやリンクが届くのを確かめてください。

無料アカウントを作成アプリを開く

AI ツールでアプリを作りましたか?使ったツールを選んでください

このページについて質問がありますか?

質問はどの言語でもかまいません。ドキュメントからすぐに回答を得ることも、Proxy Mail QA チームに質問を送ることもできます。チームからの返信は英語です。