이 도움말에서는 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 106과 Firefox 102 모두 WebDriver BiDi 표준 지원을 출시했습니다.
그 이후로 WebDriver BiDi는 널리 사용되는 프레임워크에서 채택되어 로깅 지원과 같이 많이 요청된 기능을 활용하여 주요 개발자 문제를 해결했습니다.
WebDriver BiDi 기반 로깅
일반적인 사용 사례는 웹페이지가 콘솔 로그, 경고, 오류, 포착되지 않은 JavaScript 예외 없이 로드되는지 자동으로 확인하는 것입니다. 또 다른 사용 사례는 의도한 대로 웹페이지가 경고를 기록하거나 예외를 발생시키는지 확인하는 자동화 테스트를 작성하는 경우입니다. 이러한 문제는 양방향이 아니기 때문에 WebDriver Classic을 사용하여 해결할 수 없습니다. 이제 WebDriver BiDi를 통해 이 작업이 가능합니다.
다음은 Selenium의 JavaScript 언어 바인딩을 사용하는 두 번째 사용 사례의 구현 예입니다.
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 작업 그룹에 참여하는 다른 브라우저 공급업체 및 업계 이해관계자와 협력하여 WebDriver BiDi 사양을 계속해서 구체화하고 있습니다. 이 그룹은 최근 공유 로드맵에 동의하여 명확한 사용자 대상 엔드 투 엔드 사용 사례를 중심으로 향후 사양 및 구현 작업을 조정했습니다.
상호 운용성
작업 그룹에서 더 많은 기능을 공동으로 지정함에 따라 WebDriver BiDi 프로토콜의 웹 플랫폼 테스트도 생성됩니다. 이 공유 테스트 모음은 구현의 정확성과 상호 운용성을 확인하는 데 도움이 됩니다. WPT 대시보드에서 다양한 브라우저의 최신 테스트 결과를 확인할 수 있습니다.
WebDriver BiDi 지원: 어떻게 도와드릴 수 있나요?
WebDriver BiDi를 통한 브라우저 자동화의 미래가 기대되시나요? 다음과 같이 지원을 표시할 수 있습니다.
- 초기 테스터 및 채택자가 되어 WebDriver BiDi의 미래를 만들어 보세요.
- 소식을 전하세요 해시태그
#WebDriverBiDi
를 사용하여 소셜 미디어에 프로젝트를 공유합니다. - 지원을 요청합니다. 기능 요청을 제출하거나 좋아하는 도구에서 WebDriver BiDi 채택 계획을 확인하세요.
- 사양 토론에 참여합니다.