0Pricing
React Academy · บทเรียน

การทดสอบฟอร์มและขั้นตอนการใช้งานตั้งแต่ต้นจนจบ

ทำให้การส่งฟอร์มหลายขั้นตอนและลำดับการนำทางเป็นอัตโนมัติด้วยออบเจ็กต์หน้าเว็บของ Playwright

การทดสอบฟอร์มและขั้นตอนการใช้งานตั้งแต่ต้นจนจบ เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

กลยุทธ์การทดสอบแบบฟอร์มตั้งแต่ต้นจนจบ

การทดสอบแบบฟอร์มตั้งแต่ต้นจนจบจำลองเส้นทางการใช้งานทั้งหมดของผู้ใช้ ได้แก่ เข้าสู่หน้า กรอกช่องข้อมูล ส่งแบบฟอร์ม จัดการข้อผิดพลาดจากการตรวจสอบความถูกต้อง และยืนยันผลลัพธ์เมื่อสำเร็จ

รูปแบบออบเจ็กต์หน้า

รูปแบบออบเจ็กต์หน้า (POM) รวมตัวเลือกและการโต้ตอบสำหรับหน้าไว้ในคลาส ทำให้การทดสอบอ่านเข้าใจง่ายและลดการทำซ้ำ

class LoginPage {
  constructor(private page: Page) {}

  async goto() { await this.page.goto('/login'); }
  async fillEmail(email: string) { await this.page.getByLabel('Email').fill(email); }
  async fillPassword(pw: string) { await this.page.getByLabel('Password').fill(pw); }
  async submit() { await this.page.getByRole('button', { name: /log in/i }).click(); }
  async getError() { return this.page.getByRole('alert').textContent(); }
}

การใช้วัตถุหน้าในการทดสอบ

เมื่อใช้วัตถุหน้า การทดสอบจะกลายเป็นคำอธิบายการกระทำของผู้ใช้ในระดับเจตนา ซึ่งอ่านและดูแลรักษาได้ง่าย

test('successful login redirects to dashboard', async ({ page }) => {
  const loginPage = new LoginPage(page);
  await loginPage.goto();
  await loginPage.fillEmail('alice@example.com');
  await loginPage.fillPassword('password123');
  await loginPage.submit();
  await expect(page).toHaveURL('/dashboard');
  await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible();
});

การทดสอบข้อผิดพลาดจากการตรวจสอบความถูกต้อง

ส่งข้อมูลที่ไม่ถูกต้องหรือว่างเปล่า แล้วตรวจสอบข้อความข้อผิดพลาดที่ส่วนติดต่อผู้ใช้แสดง

test('shows validation errors on empty submit', async ({ page }) => {
  await page.goto('/register');
  await page.getByRole('button', { name: 'Create account' }).click();
  await expect(page.getByText('Email is required')).toBeVisible();
  await expect(page.getByText('Password must be at least 8 characters')).toBeVisible();
});

การทดสอบแบบฟอร์มหลายขั้นตอน

สำหรับตัวช่วยสร้างหลายขั้นตอน ให้ดำเนินการผ่านแต่ละขั้น พร้อมยืนยันว่าแบบฟอร์มเลื่อนไปข้างหน้าและยังคงข้อมูลที่ป้อนไว้ก่อนหน้า

test('completes 3-step signup', async ({ page }) => {
  await page.goto('/signup');
  // Step 1
  await page.getByLabel('First Name').fill('Alice');
  await page.getByRole('button', { name: 'Next' }).click();
  // Step 2
  await page.getByLabel('Plan').selectOption('pro');
  await page.getByRole('button', { name: 'Next' }).click();
  // Step 3
  await page.getByLabel('Card Number').fill('4242424242424242');
  await page.getByRole('button', { name: 'Complete' }).click();
  await expect(page.getByText('Welcome, Alice!')).toBeVisible();
});

การจำลอง API ใน Playwright

ใช้ page.route() เพื่อดักจับการเรียก API และส่งการตอบกลับจำลอง ซึ่งมีประโยชน์สำหรับการทดสอบกรณีขอบโดยไม่ต้องใช้แบ็กเอนด์จริง

await page.route('/api/register', async route => {
  await route.fulfill({
    status: 200,
    contentType: 'application/json',
    body: JSON.stringify({ token: 'fake-token' }),
  });
});

await page.goto('/register');
// ...fill and submit form
await expect(page).toHaveURL('/dashboard');

การทดสอบการอัปโหลดไฟล์

ใช้ setInputFiles() เพื่อจำลองการอัปโหลดไฟล์ใน Playwright

test('uploads a profile photo', async ({ page }) => {
  await page.goto('/profile');
  const fileInput = page.getByLabel('Profile photo');
  await fileInput.setInputFiles('./fixtures/avatar.png');
  await page.getByRole('button', { name: 'Upload' }).click();
  await expect(page.getByAltText('Profile photo')).toBeVisible();
});

การนำสถานะการยืนยันตัวตนกลับมาใช้

เข้าสู่ระบบเพียงครั้งเดียว บันทึกสถานะพื้นที่จัดเก็บของเบราว์เซอร์ และนำกลับมาใช้ในการทดสอบหลายครั้งเพื่อข้ามขั้นตอนการเข้าสู่ระบบซ้ำ

// auth.setup.ts
test('authenticate', async ({ page }) => {
  await page.goto('/login');
  await page.getByLabel('Email').fill('alice@example.com');
  await page.getByLabel('Password').fill('password');
  await page.getByRole('button', { name: 'Log in' }).click();
  await page.context().storageState({ path: 'e2e/.auth/user.json' });
});

// playwright.config.ts — use storageState in other tests
use: { storageState: 'e2e/.auth/user.json' }

การทดสอบการกู้คืนจากข้อผิดพลาด

จำลองความล้มเหลวของเครือข่าย และตรวจสอบว่าผู้ใช้สามารถลองใหม่หรือเห็นข้อความข้อผิดพลาดที่เป็นประโยชน์

await page.route('/api/submit', route => route.abort());
await page.getByRole('button', { name: 'Submit' }).click();
await expect(page.getByText('Network error. Please try again.')).toBeVisible();
await page.unroute('/api/submit');
// Now the real request goes through
await page.getByRole('button', { name: 'Retry' }).click();

การทดสอบการนำทางด้วยแป้นพิมพ์

ทดสอบว่าแบบฟอร์มสามารถเข้าถึงได้ด้วยแป้นพิมพ์อย่างสมบูรณ์ โดยกด Tab ผ่านช่องข้อมูลต่าง ๆ และส่งแบบฟอร์มด้วย Enter

test('submits form with keyboard only', async ({ page }) => {
  await page.goto('/contact');
  await page.keyboard.press('Tab'); // focus name
  await page.keyboard.type('Alice');
  await page.keyboard.press('Tab'); // focus email
  await page.keyboard.type('alice@example.com');
  await page.keyboard.press('Tab'); // focus submit
  await page.keyboard.press('Enter');
  await expect(page.getByText('Message sent!')).toBeVisible();
});

ชุดตั้งต้นสำหรับข้อมูลการทดสอบ

ใช้ชุดตั้งต้นของ Playwright เพื่อใช้ตรรกะการตั้งค่าร่วมกันอย่างเป็นระเบียบระหว่างการทดสอบหลายรายการ เช่น การสร้างผู้ใช้ทดสอบ

// fixtures.ts
const test = base.extend<{ testUser: User }>({ 
  testUser: async ({}, use) => {
    const user = await createTestUser();
    await use(user);
    await deleteTestUser(user.id);
  },
});

// In a test file:
test('edits profile', async ({ page, testUser }) => {
  await page.goto(`/users/${testUser.id}/edit`);
});

การเรียกใช้การทดสอบแบบขนาน

Playwright เรียกใช้การทดสอบแบบขนานโดยค่าเริ่มต้นผ่านตัวทำงานหลายตัว ใช้ test.describe.serial เฉพาะกับการทดสอบที่ต้องเรียกใช้ตามลำดับ

ตรวจสอบอย่างรวดเร็ว

ประโยชน์หลักของรูปแบบออบเจ็กต์หน้า (POM) ในการทดสอบตั้งแต่ต้นจนจบคืออะไร

สรุปทบทวน

การทดสอบแบบฟอร์มตั้งแต่ต้นจนจบใช้วัตถุหน้าเพื่อให้ดูแลรักษาได้ง่าย ใช้ page.route() เพื่อจำลอง API ใช้ setInputFiles() สำหรับการอัปโหลด และใช้สถานะพื้นที่จัดเก็บเพื่อนำเซสชันการยืนยันตัวตนกลับมาใช้ ทดสอบการตรวจสอบความถูกต้อง ลำดับการทำงานหลายขั้นตอน และการนำทางด้วยแป้นพิมพ์เพื่อครอบคลุมเส้นทางการใช้งานจริงของผู้ใช้

คำถามที่พบบ่อย

บทเรียน “การทดสอบฟอร์มและขั้นตอนการใช้งานตั้งแต่ต้นจนจบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทดสอบฟอร์มและขั้นตอนการใช้งานตั้งแต่ต้นจนจบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทดสอบฟอร์มและขั้นตอนการใช้งานตั้งแต่ต้นจนจบ”

ทำให้การส่งฟอร์มหลายขั้นตอนและลำดับการนำทางเป็นอัตโนมัติด้วยออบเจ็กต์หน้าเว็บของ Playwright คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การทดสอบฟอร์มและขั้นตอนการใช้งานตั้งแต่ต้นจนจบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การทดสอบแบบผสานรวมด้วย React Testing Library
  2. การทดสอบ UI แบบอะซิงก์และการเรียก API ด้วย MSW
  3. เริ่มต้นใช้งาน Playwright สำหรับ React
  4. การทดสอบฟอร์มและขั้นตอนการใช้งานตั้งแต่ต้นจนจบ
← กลับไปที่ React Academy