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 trong năm 2023.

WebDriver BiDi là gì?

WebDriver là giao thức tự động hoá trình duyệt, được xác định theo tiêu chuẩn W3C, đượ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ố khác biệt cơ bản giữa 2 giao thức này: WebDriver là một tiêu chuẩn tương tác, nhưng giao thức 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 ít hơn.

Đó là lý do vào năm 2020, Nhóm công tác về công cụ và thử nghiệm trình duyệt W3C đã bắt đầu phát triển WebDriver BiDi, một giao thức tự động hoá trình duyệt chuẩn mới giúp thu hẹp khoảng cách giữa các giao thức WebDriver Classic và CDP. Điều tuyệt nhất ở cả hai thế giới! Đọc bài viết Nhìn lại quá khứ: sự phát triển của tính năng tự động hoá thử nghiệmWebDriver 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.

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?

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

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

Ghi nhật ký được cung cấp bởi WebDriver BiDi

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ý bảng điều khiển, cảnh báo hoặc lỗi nào và không có bất kỳ 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 nên viết một quy trình kiểm thử tự động để kiểm tra xem một trang web có ghi lại cảnh báo hay không hoặc gửi ra một ngoại lệ khi dự định. Không thể giải quyết những 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 tính năng 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();

Chức năng tương tự cũng được cung cấp thông qua các mô hình 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 hợp 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 có tham gia vào Nhóm làm việc W3C. Gần đây, tập đoàn này đã thống nhất về một lộ trình dùng chung, thống nhất các quy cách và công việc triển khai sắp tới xoay quanh các trường hợp sử dụng rõ ràng dành cho người dùng từ đầu đến cuối.

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 mô-đun triển khai. Bạn có thể xem các kết quả thử nghiệm 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 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.
  • Thông báo tin vui cho mọi người! Chia sẻ dự án lê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ụ yêu thích của bạn trong kế hoạch triển khai WebDriver BiDi.
  • Tham gia các cuộc thảo luận về thông số kỹ thuật.