การรันเทสสิ่งหนึ่งที่ขาดไม่ได้เลยก็คือ Timeout ครับ เพราะสำหรับการเทสแล้ว เราจำเป็นต้องมีการกำหนด Timeout ในทุกๆ action เช่น กดปุ่ม กรอกข้อมูล ตรวจสอบข้อความบนหน้าจอ เพราะถ้าเราไม่มี Timeout ลองนึกภาพว่าถ้าเราสั่งให้ script กดปุ่ม login แล้ว Developer มีการปรับเปลี่ยน UI ใหม่ script เราก็จะค้างอยู่อย่างนั้นไม่สามารถทำงานต่อไปได้นั่นเอง

Timeout ประเภทต่างๆ

ใน Playwright เราแบ่ง Timeout ออกเป็นประเภทหลักๆได้ดังนี้

TimeoutDefaultDescription
Test timeout30 วินาทีเป็น timeout ในการรันเทสแต่ละข้อ
Expect timeout5 วินาทีเป็น timeout เวลาที่เราใช้ function expect ต่างๆ ในการตรวจสอบค่า
Action timeoutไม่มี timeoutAction ต่างๆเช่น การกดปุ่ม, การรอให้ element แสดง/ซ่อน
Navigation timeoutไม่มี timeoutการ Navigate ไปยังเพจต่างๆ
Global timeoutไม่มี timeoutเป็น timeout รวมสำหรับการรันเทสทั้งหมด

Timeout ที่เหมาะสม

คำถามนี้ เชื่อว่าทุกคนที่อ่านมาถึงตรงนี้ น่าจะมีคำถามนี้ในใจกันแล้ว ผมอาจไม่ได้มีตัวเลขตรงๆไว้ให้ แต่แนะนำว่าเราใช้ ค่า default ของ Playwright ก่อน แต่ถ้ามีปัญหาลองปรับตามนี้ดูครับ

  • Test timeout ให้เราดูค่าเฉลี่ย Test script แต่ละข้อของเราเป็นหลัก แล้วเพิ่มเวลาไว้อีกประมาณ 30 เปอร์เซนต์ เผื่อ server ตอนนั้นโหลดหนัก
    กรณีที่เทสข้อไหนใช้เวลารันนานเป็นพิเศษ เราสามารถ override ที่ต้นเทสเคสได้โดยใช้คำสั่ง
    test.setTimeout(120000) // กำหนด timeout เป็น 120 วินาที
  • Expect timeout ให้เราใช้ค่า default ที่ 5 วินาที แต่ถ้าบางครั้งจำเป็นต้องรอผลจากฝั่ง Server ก็ให้ใช้วิธีการ override เป็นครั้งๆไปครับ
    expect(locator).toBeVisible({ timeout: 10000 }); // กำหนด timeout เป็น 10 วินาที
  • Action timeout ผมแนะนำว่าให้ใช้ default no timeout
    แต่ว่าต้องระวัง บางกรณีเช่น การใช้ try-catch มาครอบ function wait ต่างๆ ถ้าจะเขียนแนวนี้ แนะนำว่า function ใน try catch ควรใส่ timeout ไว้ด้วยครับ ไม่งั้นจะกลายเป็น timeout เท่ากับ Test timeout แล้วเทสจะรันผ่านบ้างไม่ผ่านบ้าง เพราะเวลารันเทสเกินลิมิตนั่นเอง
    locator.click({ timeout: 10000 }); // กำหนด timeout เป็น 10 วินาที

ในส่วน Timeout อื่นก็แนะนำว่าให้กำหนดเป็นกรณีไปครับ และอยากให้ระวังในเรื่องการกำหนด timeout หลายๆแบบพร้อมกัน อาจทำให้เทสของเรา Fail timeout ได้นะ

References

Playwright Web Automated Test

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

Playwright และ TypeScript

บทความก่อนหน้านี้เช็คผลเทสให้ครบด้วย Playwright Soft Assertions
บทความถัดไปเทส Mobile Web ด้วย Playwright
Quality On Top