WebDriver BiDi: Bản cập nhật trạng thái năm 2023

Bài viết này cung cấp thông tin tổng quan về các tính năng mới trong WebDriver BiDi năm 2023.

WebDriver BiDi là gì?

WebDriver là một giao thức tự động hoá trình duyệt, được xác định là một tiêu chuẩn W3C, với các phương thức triển khai trong ChromeDriver, GeckoDriver và WebKitDriver.

Chromium cũng có giao thức tự động hoá trình duyệt độc quyền riêng: Giao thức Công cụ của Chrome cho nhà phát triển, hay CDP.

Có một số điểm khác biệt cơ bản giữa hai giao thức này: WebDriver là một tiêu chuẩn có khả năng tương tác, nhưng giao thức này kém hiệu quả hơn và thiếu các tính năng mà CDP có. Ngược lại, CDP hiệu quả và mạnh mẽ hơn, nhưng khả năng tương tác kém hơn.

Đó là lý do tại sao vào năm 2020, Nhóm công tác về công cụ và kiểm thử trình duyệt của W3C bắt đầu làm việc trên WebDriver BiDi, một giao thức tự động hoá trình duyệt tiêu chuẩn mới giúp thu hẹp khoảng cách giữa giao thức WebDriver Classic và CDP. Kết hợp cả hai ưu điểm! Đọc bài viết Nhìn lại quá khứ: quá trình phát triển của tính năng tự động hoá kiểm thửWebDriver BiDi – tương lai của tính năng tự động hoá trên nhiều trình duyệt để biết thêm thông tin cơ bản.

Nỗ lực của WebDriver BiDi liên quan đến công việc tiêu chuẩn hóa, tạo Kiểm tra nền tảng web và triển khai cho các công cụ trình duyệt khác nhau.

Chúng ta đang ở đâu?

Trong năm 2022, cả Chrome/ChromeDriver 106Firefox 102 đều hỗ trợ tiêu chuẩn WebDriver BiDi.

Kể từ đó, WebDriver BiDi đã được áp dụng trong các khung phổ biến, giải quyết các vấn đề hàng đầu của nhà phát triển bằng cách mở khoá các tính năng được yêu cầu nhiều như hỗ trợ ghi nhật ký.

Tính năng ghi nhật ký do WebDriver BiDi cung cấp

Một trường hợp sử dụng phổ biến là tự động xác minh rằng một trang web tải mà không có nhật ký, cảnh báo hoặc lỗi trên bảng điều khiển và không có trường hợp ngoại lệ nào về JavaScript chưa nắm bắt được. Một trường hợp sử dụng khác là bạn có thể muốn viết một chương trình kiểm thử tự động để kiểm tra xem một trang web có ghi lại cảnh báo hoặc gửi một ngoại lệ khi dự định hay không. Không thể giải quyết các vấn đề này bằng WebDriver phiên bản cũ vì đây không phải là hai chiều. WebDriver BiDi hiện giúp điều này trở nên khả thi.

Dưới đây là ví dụ về cách triển khai trường hợp sử dụng thứ hai bằng cách sử dụng các liên kết ngôn ngữ JavaScript của 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();

Sau đây là ví dụ về cách sử dụng tính năng hỗ trợ WebDriver BiDi thử nghiệm của 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();

Bạn cũng có thể sử dụng chức năng tương tự thông qua các lớp trừu tượng khác như WebdriverIO.

Một lộ trình công khai chung

Chúng tôi vẫn đang hoàn thiện thông số kỹ thuật WebDriver BiDi bằng cách cộng tác với các nhà cung cấp trình duyệt khác và các bên liên quan trong ngành tham gia Nhóm làm việc W3C. Gần đây, nhóm này đã đồng ý về một lộ trình chung, điều chỉnh thông số kỹ thuật sắp tới và công việc triển khai xung quanh các trường hợp sử dụng toàn diện, rõ ràng dành cho người dùng.

Khả năng tương tác

Do Nhóm công tác chỉ định chung thêm các tính năng khác, nên chúng tôi cũng tạo Kiểm thử nền tảng web cho giao thức WebDriver BiDi. Bộ kiểm thử dùng chung này giúp chúng tôi xác minh tính chính xác và khả năng tương tác của các hoạt động triển khai. Bạn có thể xem kết quả kiểm thử mới nhất cho nhiều trình duyệt trên Trang tổng quan WPT.

Hỗ trợ WebDriver BiDi: Bạn có thể giúp gì?

Bạn có hào hứng với tương lai của hoạt động tự động hoá trình duyệt với WebDriver BiDi không? Sau đây là cách thể hiện sự ủng hộ:

  • Hãy là người thử nghiệm và sử dụng sớm và giúp định hình tương lai của WebDriver BiDi.
  • Hãy lan toả thông tin này! Chia sẻ dự án trên mạng xã hội bằng hashtag #WebDriverBiDi.
  • Yêu cầu hỗ trợ. Gửi yêu cầu về tính năng hoặc kiểm tra với các công cụ bạn yêu thích về kế hoạch sử dụng WebDriver BiDi.
  • Tham gia các cuộc thảo luận về thông số kỹ thuật.