สำหรับใครที่ใช้ Selenium ในการเทสเว็บ การเปิดปิด Browser ระหว่างการรันเทส ซึ่งนับเป็นเรื่องปกติที่จำเป็นต้องทำกัน โดยเรามักจำเป็นต้องเปิดปิด browser เมื่อรันเทสเสร็จแต่ละข้อ เพื่อเป็นการ Clear Cookie, Cache ของเบราเซอร์ป้องกันไม่ให้เทสแต่ละข้อส่งผลกระทบกันเอง

เปิด / ปิด Browser มีปัญหาหลักๆคือ ขั้นตอนนี้ที่ใช้เวลาพอสมควรเลย โดยเปิด browser ครั้งแรกกินเวลาประมาณ 6 วินาที เปิด tab เพิ่มใช้ประมาณ 4 วินาที ลองดูตัวอย่าง code กัน

Image for post

แล้วทำไม Selenium ถึงช้า

Image for post

เราต้องมาดูที่ Architecture ของ Selenium ครับ จากรูปด้านบน จะเห็นว่า Test Script ที่เราเขียนจะมีการใช้งาน Selenium client library เพื่อไปคุยกับ Web Driver หลังจากนั้น Web Driver ถึงจะเป็นคนแปลงคำสั่งไปควบคุม browser ของเราอีกทีครับ

Image for post

เนื่องจาก Puppeteer ใช้การควบคุม Browser โดยตรงผ่าน Devtools protocol นั่นทำให้ overhead ต่างๆหายไปนั่นเอง แถมโค้ดยังเหมือนกันด้วยนะ

Image for post

จากตัวอย่างจะเห็นว่า Puppeteer เร็วกว่าถึง 2 เท่า ใช้เวลาไปเพียง ~11 วินาที เทียบกับ Selenium ที่ ~21 วินาที

หากเราเทียบเฉพาะ Open browser step ผลจะออกมาตามนี้ครับ
Puppeteer เปิด Browser รอบแรกใช้เวลาไป 3 วินาที และ รอบสอบที่ 2 วินาที
Selenium เปิด Browser รอบแรกใช้เวลาไป 6 วินาที และ รอบสอบที่ 4 วินาที

ใครสนใจอยากลองใช้งาน https://qahive.github.io/robotframework-puppeteer.github.io/