WebDriver BiDi: 2023년 상태 업데이트

이 도움말에서는 2023년 WebDriver BiDi의 새로운 기능을 간략하게 설명합니다.

WebDriver BiDi란 무엇인가요?

WebDriver는 W3C 표준으로 정의되는 브라우저 자동화 프로토콜로 ChromeDriver, GeckoDriver 및 WebKitDriver에서 구현됩니다.

Chromium에는 자체 브라우저 자동화 프로토콜인 Chrome DevTools 프로토콜(CDP)도 있습니다.

이 두 프로토콜 사이에는 몇 가지 근본적인 차이점이 있습니다. WebDriver는 상호 운용 가능한 표준이지만 프로토콜의 효율성이 낮고 CDP의 기능이 없습니다. 반면에 CDP는 더 효율적이고 강력하지만 상호 운용이 어렵습니다.

그래서 2020년에 W3C 브라우저 테스트 및 도구 실무 그룹은 WebDriver Classic과 CDP 프로토콜 간의 격차를 해소하는 새로운 표준 브라우저 자동화 프로토콜인 WebDriver BiDi 관련 작업을 시작했습니다. 두 가지 모두의 최고 장점 자세한 내용은 시간 돌아보기: 테스트 자동화의 진화WebDriver BiDi — 교차 브라우저 자동화의 미래를 읽어 보세요.

WebDriver BiDi에는 표준화 작업, 웹 플랫폼 테스트 생성 및 다양한 브라우저 엔진의 구현이 포함됩니다.

여기가 어디죠?

2022년에는 Chrome/ChromeDriver 106Firefox 102 모두에서 WebDriver BiDi 표준이 지원됩니다.

그 이후로 WebDriver BiDi가 인기 프레임워크에서 채택되면서 로깅 지원과 같이 많은 요청이 있었던 기능을 활용하여 개발자의 주요 문제를 해결했습니다.

WebDriver BiDi 기반 로깅

일반적인 사용 사례는 웹페이지가 콘솔 로그, 경고 또는 오류 및 포착되지 않은 JavaScript 예외 없이 로드되는지 자동으로 확인하는 것입니다. 또 다른 사용 사례로는 자동 테스트를 작성하여 웹페이지에서 경고를 기록하거나 의도한 경우 예외를 발생시키는지 확인할 수 있습니다. WebDriver Classic은 양방향이 아니므로 이러한 문제는 해결할 수 없습니다. WebDriver BiDi가 이제 가능합니다.

다음은 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();

다음은 Puppeteer의 실험용 WebDriver BiDi 지원을 사용하는 예입니다.

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와 같은 다른 추상화를 통해 동일한 기능을 사용할 수 있습니다.

공유된 공개 로드맵

Google은 W3C Working Group에 참여하는 다른 브라우저 공급업체 및 업계 이해관계자와 협력하여 WebDriver BiDi 사양을 더욱 세분화하고 있습니다. 이 그룹은 최근 사용자를 대상으로 하는 명확한 엔드 투 엔드 사용 사례를 중심으로 예정된 사양과 구현 작업을 조정하는 로드맵 공유에 합의했습니다.

상호 운용성

실무 그룹이 전체적으로 더 많은 기능을 지정하므로 WebDriver BiDi 프로토콜에 대한 웹 플랫폼 테스트도 만듭니다. 이 공유 테스트 모음을 사용하면 구현의 정확성과 상호 운용성을 확인할 수 있습니다. WPT 대시보드에서 여러 브라우저의 최신 테스트 결과를 확인할 수 있습니다.

WebDriver BiDi 지원: 무엇을 도와드릴까요?

WebDriver BiDi가 포함된 브라우저 자동화의 미래에 대해 기대하고 계신가요? 후원하는 방법은 다음과 같습니다.

  • 사전 테스터 및 어답터가 되어 WebDriver BiDi의 미래를 함께 만들어 주세요.
  • 기쁜 소식을 전하세요. 해시태그 #WebDriverBiDi를 사용해 소셜 미디어에서 프로젝트를 공유하세요.
  • 지원을 요청합니다. 기능 요청을 제출하거나 자주 사용하는 도구를 통해 WebDriver BiDi 채택 계획을 확인하세요.
  • 사양 논의에 참여합니다.