Playwright นอกจากเปิดให้เราเทสกับ Browser ที่หลากหลาย ยังมีออฟชั่นให้เราสามารถเทสโหมด Mobile ได้ด้วย โดย Playwright จะรองรับการเทส Mobile แบบ Simulator โหมด หรือก็คือการปรับ view port และ user agent

วิธีการเทสแบบ Mobile Simulator จะไม่ได้เหมือนกับแบบ Mobile Emulator ซะทีเดียว เนื่องจาก Mobile Emulator จะเป็นการรัน Emulator ของ Android/iOS แล้วค่อยใช้ Browser บน Emulator เครื่องนั้นๆ ซึ่งผลลัพธ์จะเหมือนกับการใช้งานจริงมากกว่า แต่ก็ต้องแลกมากับการรันที่ช้ามาก และพึ่งพิง OS ที่จะเทสนั่นเอง ซึ่งการใช้ Mobile Simulator จะช่วยให้การเทส Mobile Web เป็นเรื่องงาน เพราะไม่ต้องพึ่งพา OS และรันได้เร็วมากๆเลย

Config Mobile โหมด

เราสามารถกำหนด Mobile โหมดได้ผ่าน Playwright Config ได้เลย โดยเพิ่มเป็น Project ย่อยๆ เพื่อให้สามารถ รันได้หลายๆโหมดก็ได้เช่นกัน

ตัวอย่าง

    
projects: [
  {
    name: 'Chrome',
    use: {
      ...devices['Desktop Chrome'],
      headless: false,
    },
  },
  {
    name: 'Mobile',
    use: {
      channel: 'chrome',
      ...devices['Pixel 5'],
      headless: false,
    },
  },
],
    

จากตัวอย่างโค้ดข้างบน เป็นการประกาศ test project ขึ้นมาคือ Chrome และ Mobile โดยกำหนดให้มีขนาดหน้าจอเท่ากับ Pixel 5

การรันเทส

เราสามารถสั่งรันเทสด้วยคำสั่งปกติได้เลย npx playwright test ซึ่งก็จะเป็นการเทสทั้ง 2 Project เป็น 2 รอบ ซึ่งผลที่ได้ก็จะประมาณนี้ครับ

นอกจากนี้เรายังสามารถรันเทส เฉพาะแต่ละ test project ได้โดยใช้คำสั่ง –project เช่น
npx playwright test --project Mobile
เพื่อรันเทสเฉพาะ Mobile project นั่นเอง

การเลือกเทสที่จะรันบน Mobile

เรามักต้องการเลือกเทสเคสบางข้อเท่านั้นมารันบน Mobile Mode โดยสามารถ config ได้ตามนี้เลย

เช็คจาก Mobile โหมด

test('should allow me to add todo items', async ({ page, isMobile }) => {
  test.skip(isMobile, 'This feature is not implemented for Mobile');

  // Create 1st todo.
  await page.locator('.new-todo').fill(TODO_ITEMS[0]);
  await page.locator('.new-todo').press('Enter');
}

จากตัวอย่างโค้ด เป็นการให้ข้ามเทสข้อนี้ไป ถ้าเจอว่าเทสรันด้วย Mobile mode

เช็คจาก Project Name

test('should allow me to add todo items', async ({ page }, workerInfo) => {
  test.skip(workerInfo.project.name === 'Mobile', 'This feature is not implemented for Mobile');

  // Create 1st todo.
  await page.locator('.new-todo').fill(TODO_ITEMS[0]);
  await page.locator('.new-todo').press('Enter');
}

จากตัวอย่างโค้ด เป็นการให้ข้ามเทสข้อนี้ไป ถ้าเจอว่าเทสรันด้วย project ที่ชื่อว่า Mobile

Playwright Web Automated Test

เรียนรู้การทดสอบ Web Application ด้วย

Playwright และ TypeScript

บทความก่อนหน้านี้Timeout ในแบบของ Playwright
บทความถัดไปPlaywright Web-First Assertions
Quality On Top