WebDriver BiDi: การอัปเดตสถานะปี 2023

บทความนี้จะแสดงภาพรวมของมีอะไรใหม่ใน 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
  • เข้าร่วมการพูดคุยเรื่องข้อกำหนด