ใน Selenium WebDriver นั้นมีความสามารถใหม่ออกมาคือ Selenium WebDriver BiDi
เป็นการนำเอาความสามารถของ
Selenium WebDriver มาผสมเข้ากัน CDP (Chrome DevTools Protocol)
นั่นคือ ทำการผ่าน websocket (JSON-over-WebSocket) ไม่ทำการแบบ synchronous เหมือนเดิมแล้ว
ทำให้การทำงานเร็วขึ้น ปัญหา flaky test น้อยลงไป
ควบคุม Web browser ได้ดีและมากขึ้น
โดยในความสามารถที่รอมานาน ซึ่ง Cypress และ Playwright ทำได้นานแล้ว
คือ Network Intercepter

โครงสร้างการทำงานแบบคร่าว ๆ ของ WebDriver แบบเดิม กับ WebSocket

มาดูตัวอย่างการใช้งาน BiDi ใน Selenium กัน

มีขั้นตอนการทำงานดังนี้

  • Enable BiDi ด้วยการเพิ่ม webSockerUrl=true เข้าไปใน option ของ web browser
  • ต้องการ intercept หรือ ดักจับ request ที่ออกจาก web browser เพื่อทำการควบคุม response ให้เป็นไปตามที่ต้องการ ทั้ง success และ failure case ต่าง ๆ

ตัวอย่างเขียนด้วยภาษา Java + Chrome for Testing

  • ทำการ enable BiDi
  • ทำการดักจับ request และส่ง response ที่ต้องการคือ Mock Hello World! กลับไปแทนของจริง
  • ทำการตรวจสอบผลการแสดงผลในหน้า web ว่าเป็นไปตามที่คาดหวังหรือไม่

เพียงเท่านี้ก็สามารถใช้งาน Selenium WebDriver BiDi แบบง่าย ๆ ได้แล้ว
ลองใช้งานกันดู

สามารถดู code ตัวอย่างได้ที่ GitHub:Up1

รูปแสดงการทำงานของ BiDi