หนึ่งในเหตุผลที่ Selenium Test Script ไม่เสถียร เกิดจาก animation บางอย่างมีความเร็วสูงมาก และไม่สามารถตรวจจับจาก Function Synchronous ได้ วิธีที่เราจัดการกับ Loading Screen ใน Selenium คือเรามักใช้ Wait Until Element… ส่วนนี้เองที่เป็นต้นเหตุของการทดสอบที่ไม่เสถียร

 

ตัวอย่าง flaky test

ลองนึกภาพที่คุณมี Form ที่ต้องกดปุ่มเพื่อ verify ข้อมูล ก่อนที่จะทำงานขั้นตอนถัดไปได้
Image for post

ตัวอย่าง Selenium Test Script:


หากคุณรันเทส ข้อนี้ซ้ำๆ คุณจะพบ Test fail line ที่ 11 เนื่องจากบางครั้ง Loading screen อาจแสดงผลเร็ว หรือช้า ซึ่งหากแสดงผลเร็วมากๆ อาจทำให้ Test script เข้าใจว่า Loading screen โหลดเสร็จแล้ว และพยายามทำงานขั้นตอนต่อๆไป ส่งผลให้ Script Fail นั่นเอง

 

Puppeteer มาแก้ปัญหานี้ยังไง

Puppeteer Library เราสามารถใช้งาน Async function ที่จะช่วยให้เราดักจับ Event หรือ Animation ต่างๆที่เกิดขึ้นได้ทันที ต่างจากการทำงานแบบ Sync function ครับ


ที่เจ๋งมากๆคือ Wait until Element Is Visible จะถูกรอตั้งไปพร้อมๆกับการกดปุ่ม verify
ซึ่งหมายความว่า Loading screen จะไวแค่ไหน Test script ก็สามารถตรวจจับได้นั่นเอง