
ใน 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
