บทความนี้จะแสดงภาพรวมของมีอะไรใหม่ใน WebDriver BiDi ในปี 2023
WebDriver BiDi คืออะไร
WebDriver เป็นโปรโตคอลการทำงานอัตโนมัติของเบราว์เซอร์ มีการกำหนดเป็นมาตรฐาน W3C โดยที่มีการใช้งานใน ChromeDriver, GeckoDriver และ WebKitDriver
Chromium ยังมีโปรโตคอลการทำงานอัตโนมัติของเบราว์เซอร์ที่เป็นกรรมสิทธิ์ของตนเอง ซึ่งก็คือโปรโตคอล Chrome DevTools หรือ CDP
โปรโตคอลทั้งสองนี้มีความแตกต่างโดยพื้นฐานบางอย่าง นั่นคือ WebDriver เป็นมาตรฐานที่ทำงานร่วมกันได้ แต่โปรโตคอลนี้มีประสิทธิภาพน้อยกว่าและไม่มีฟีเจอร์ที่ CDP มี ในทางตรงกันข้าม CDP นั้นมีประสิทธิภาพและประสิทธิผลมากกว่า แต่ทำงานร่วมกันน้อยกว่า
ด้วยเหตุนี้ในปี 2020 คณะทำงานด้านการทดสอบและเครื่องมือเบราว์เซอร์ W3C ได้เริ่มทำงานใน WebDriver BiDi ซึ่งเป็นโปรโตคอลมาตรฐานใหม่สำหรับเบราว์เซอร์แบบอัตโนมัติที่ลดช่องว่างระหว่างโปรโตคอล WebDriver แบบคลาสสิกกับ CDP เจ๋งสุดๆ ไปเลย อ่านย้อนเวลากลับไป: วิวัฒนาการของการทำงานอัตโนมัติในการทดสอบและ WebDriver BiDi อนาคตของการทำงานอัตโนมัติแบบข้ามเบราว์เซอร์
ความพยายามของ WebDriver BiDi เกี่ยวข้องกับงานการสร้างมาตรฐาน การสร้างการทดสอบแพลตฟอร์มเว็บ และการใช้งานสำหรับเครื่องมือเบราว์เซอร์ต่างๆ
ตอนนี้เราอยู่ที่ไหน
ในปี 2022 ทั้ง Chrome/ChromeDriver 106 และ Firefox 102 ได้รองรับมาตรฐาน WebDriver BiDi แล้ว
ตั้งแต่นั้นมา WebDriver BiDi ก็มีการใช้งานในเฟรมเวิร์กที่ได้รับความนิยมมากขึ้น โดยจัดการกับปัญหาอันดับต้นๆ ของนักพัฒนาซอฟต์แวร์ด้วยการปลดล็อกฟีเจอร์ที่เป็นที่ต้องการอย่างมาก เช่น การสนับสนุนการบันทึก
การบันทึกขับเคลื่อนโดย WebDriver BiDi
กรณีการใช้งานทั่วไปคือการยืนยันโดยอัตโนมัติว่าหน้าเว็บโหลดโดยไม่มีบันทึกของคอนโซล คำเตือน หรือข้อผิดพลาด และไม่มีข้อยกเว้น JavaScript ที่ตรวจไม่พบ กรณีใช้งานอีกกรณีหนึ่ง คือ คุณอาจต้องการเขียนการทดสอบอัตโนมัติเพื่อตรวจสอบว่าหน้าเว็บบันทึกคำเตือนหรือมีการส่งข้อยกเว้นเมื่อจำเป็น ปัญหาเหล่านี้ไม่สามารถแก้ไขด้วย WebDriver แบบคลาสสิกได้เพราะปัญหาไม่ได้เป็นแบบ 2 ทิศทาง และ WebDriver BiDi ก็ทำให้เรื่องนี้เป็นจริงได้
ตัวอย่างการใช้งานกรณีการใช้งานที่ 2 ที่ใช้การเชื่อมโยงภาษา JavaScript ของ Selenium มีดังนี้
import * as assert from 'node:assert';
import { Builder, LogInspector } from 'selenium-webdriver';
import chrome from 'selenium-webdriver/chrome.js';
const driver = new Builder()
.forBrowser('chrome')
.setChromeOptions(new chrome.Options().enableBidi())
.build();
const inspector = await LogInspector(driver);
await inspector.onConsoleEntry((entry) => {
console.log(`Console message received: [${
entry.type}][${entry.level}] ${entry.text}`);
});
await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html');
await driver.findElement({ id: 'consoleLog' }).click();
await driver.quit();
ตัวอย่างการใช้การรองรับ WebDriver BiDi เวอร์ชันทดลองของ Puppeteer
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({
protocol: 'webDriverBiDi',
headless: 'new',
});
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();
page.on('console', (message) => {
console.log(`Console message received: [${
message.type()
}] ${message.text()}`);
});
await page.goto(`https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html`);
await page.evaluate(() => {
document.querySelector('#consoleLog').click();
});
await browser.close();
ฟังก์ชันเดียวกันนี้มีอยู่ในนามธรรมอื่นๆ เช่น WebdriverIO
แผนกลยุทธ์สาธารณะที่แชร์ไว้
เรายังคงปรับปรุงข้อกำหนด WebDriver BiDi โดยร่วมมือกับผู้ให้บริการเบราว์เซอร์และผู้มีส่วนเกี่ยวข้องอื่นๆ ในอุตสาหกรรมที่เข้าร่วมคณะทำงาน W3C เมื่อเร็วๆ นี้ทางกลุ่มได้ตกลงเกี่ยวกับแผนกลยุทธ์ที่ใช้ร่วมกัน โดยปรับข้อกำหนดเฉพาะและการใช้งานที่กำลังจะเปิดตัวให้เป็นไปตามกรณีการใช้งานที่ชัดเจนตั้งแต่ต้นจนจบ
ความสามารถในการทำงานร่วมกัน
เมื่อคณะทำงานระบุฟีเจอร์เพิ่มเติมเข้าด้วยกัน เราจึงสร้างการทดสอบแพลตฟอร์มเว็บสำหรับโปรโตคอล WebDriver BiDi ด้วย ชุดทดสอบที่ใช้ร่วมกันนี้ช่วยให้เรายืนยันความถูกต้องและความสามารถในการทำงานร่วมกันของการติดตั้งใช้งาน คุณดูผลการทดสอบล่าสุดสำหรับเบราว์เซอร์ต่างๆ ได้ในแดชบอร์ด WPT
การสนับสนุน WebDriver BiDi: คุณจะช่วยได้อย่างไร
คุณสนใจอนาคตของการทำงานอัตโนมัติของเบราว์เซอร์ด้วย WebDriver BiDi ไหม วิธีแสดงการสนับสนุนมีดังนี้
- ร่วมเป็นผู้ทดสอบและเริ่มใช้งานจริง และช่วยสร้างอนาคตของ WebDriver BiDi
- กระจายข่าวเลย แชร์โปรเจ็กต์บนโซเชียลมีเดียโดยใช้แฮชแท็ก
#WebDriverBiDi
- ขอความช่วยเหลือ ส่งคำขอฟีเจอร์หรือตรวจสอบกับเครื่องมือที่คุณชื่นชอบเกี่ยวกับแผนในการปรับใช้ WebDriver BiDi
- เข้าร่วมการพูดคุยเรื่องข้อกำหนด