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 là chuẩn W3C, có các triển khai trong ChromeDriver, GeckoDriver và WebKitDriver.

Chromium cũng có giao thức tự động hoá trình duyệt thuộc quyền sở hữu riêng của mình: Giao thức Công cụ của Chrome cho nhà phát triển (CDP).

Có một số khác biệt cơ bản giữa hai giao thức này: WebDriver là tiêu chuẩn có thể 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 kém 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 hoạt động 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 các giao thức WebDriver Classic và CDP. Điều tuyệt nhất ở cả hai thế giới! Hãy đọc bài viết Nhìn lại quá khứ: sự phát triển của tự động hoá thử nghiệmWebDriver BiDi – tương lai của tự động hoá trên nhiều trình duyệt để có thêm thông tin.

Nỗ lực WebDriver BiDi liên quan đến công việc tiêu chuẩn hoá, tạo các Thử nghiệm Nền tảng web và việc 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 áp dụng trong các khung phổ biến, giúp giải quyết những vấn đề mà nhà phát triển chưa hài lòng nhất 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ý 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ó bất kỳ 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ỳ ngoại lệ JavaScript nào chưa được nắm bắt. Một trường hợp sử dụng khác là bạn nên viết quy trình kiểm thử tự động để kiểm tra nhằm đảm bảo rằng một trang web ghi lại cảnh báo hoặc đưa ra 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ì không phải hai chiều. WebDriver BiDi hiện có thể thực hiện việc này.

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();

Dưới đây là ví dụ về nội dung 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 qua các mô-đun trừu tượng khác như WebdriverIO.

Có chung lộ trình công khai

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

Khả năng tương thích

Vì Nhóm công tác đã chỉ định chung nhiều tính năng hơn, nên chúng tôi cũng tạo các Bài 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 phương thức 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 bằng cách nào?

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ộ của bạn:

  • Trở thành 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 báo tin vui cho mọi người! Chia sẻ dự án này lên mạng xã hội kèm theo hashtag #WebDriverBiDi.
  • Yêu cầu hỗ trợ. Gửi yêu cầu về tính năng hoặc tham khảo các công cụ mà bạn yêu thích để lên kế hoạch sử dụng WebDriver BiDi.
  • Tham gia các phiên thảo luận về thông số kỹ thuật.