با Puppeteer از قدرت WebDriver BiDi استفاده کنید: اتوماسیون کروم و فایرفاکس

Puppeteer اکنون با Firefox صحبت می کند! 🎉 اما صبر کنید، اینطور نبود؟ 🤔 بیایید به WebDriver BiDi، پروتکل جدید در Puppeteer شیرجه بزنیم و بفهمیم که این توسعه هیجان انگیز برای گردش کار اتوماسیون فایرفاکس چه معنایی دارد.

WebDriver BiDi یک پروتکل جدید اتوماسیون بین مرورگرهای استاندارد شده است که بهترین پروتکل WebDriver Classic و Chrome DevTools Protocol (CDP) را ترکیب می کند. این نوید ارتباط دو طرفه را می دهد که امکان اتوماسیون کارآمدتر و توانمندتر و کنترل دانه ای را فراهم می کند. شما می توانید پیشرفت آن را در نقشه راه رسمی پیگیری کنید.

از زمان به‌روزرسانی وضعیت قبلی ، ما به همکاری نزدیک با گروه کاری ابزار و تست مرورگر W3C ادامه داده‌ایم. Puppeteer اکنون به لطف پیشرفت های WebDriver BiDi، ویژگی هایی مانند ورود به سیستم ، رویدادهای شبکه، و ارسال فرم ها را پیاده سازی می کند.

کد را به من نشان بده

اسکریپت Puppeteer زیر WebDriver BiDi را در عمل به نمایش می گذارد و به طور یکپارچه در Chrome و Firefox کار می کند:

  1. مرورگر انتخابی خود را با تنظیمات پروتکل راه اندازی کنید.
  2. پیام های کنسول را برای خطاها کنترل کنید.
  3. به یک صفحه وب بروید، ابعاد ویوپورت را تنظیم کنید و روی یک دکمه کلیک کنید.
  4. محتوای متن را تأیید کنید و برابری را بیان کنید.
import * as assert from 'node:assert'; 
import puppeteer from 'puppeteer';

// Arrange: Launch browser with WebDriver BiDi
const browser = await puppeteer.launch({
  protocol: 'webDriverBiDi',
     product: 'firefox', // or 'chrome'
});
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();

// Arrange: Monitor console messages
page.on('console', message => {
  if (message.type() != 'error') return;
  console.log('RECEIVED: %s', message.text());
});

// Action
await page.setViewport({width: 600, height: 1041});
await page.goto('https://coffee-cart.app/?breakable=1');

const coffee = await page.waitForSelector('[data-test="Espresso"]');
await coffee.click();

// Assert 
const checkout = await page.$('[data-test="checkout"]');
const total = await checkout.evaluate(el => el.textContent);
assert.equal(total, 'Total: $10.00');

browser.close();

پیشرفت WebDriver BiDi در Puppeteer

برای سنجش قابلیت‌های WebDriver BiDi در Puppeteer، از مجموعه تست جامع Puppeteer استفاده کردیم. در حالی که اجرای Puppeteer و WebDriver BiDi هنوز در حال انجام است و هنوز همه زنگ‌ها و سوت‌های Puppeteer با Chrome و CDP را ندارد، می‌خواهیم تصویر واضحی از وضعیت وضعیت به شما ارائه دهیم.

فایرفاکس:

  • WebDriver BiDi به سطحی از کیفیت مناسب برای کارهای اتوماسیون عملی رسیده است. موزیلا با موفقیت تست های Puppeteer را برای pdf.js از فایرفاکس و CDP به فایرفاکس و WebDriver BiDi منتقل کرده است.
  • بیش از 55 درصد از تست ها با WebDriver BiDi با موفقیت انجام می شود و عملکرد رو به رشد آن را نشان می دهد.
  • قابل ذکر است که بیش از 82 تست جدید از WebDriver BiDi به طور موثر استفاده می کنند و راه را برای پیشرفت های بیشتر هموار می کنند.

کروم:

  • Chrome در حال حاضر با WebDriver BiDi به نرخ عبور 68 درصدی دست می یابد که عملکرد قابل اعتمادی را نشان می دهد. در حالی که در مقایسه با رویکرد مبتنی بر CDP، فضایی برای بهینه‌سازی بیشتر وجود دارد، این پیشرفت‌های آینده هیجان‌انگیز را امیدوار می‌کند.

برخی ویژگی‌ها مانند دسترسی به کوکی، رهگیری درخواست شبکه، ویژگی‌های شبیه‌سازی خاص، و مجوزها هنوز تحت استانداردسازی فعال هستند. آنها پس از آماده شدن در Puppeteer ادغام خواهند شد. در عین حال، فهرست کامل ویژگی‌های Puppeteer را که توسط WebDriver BiDi پشتیبانی می‌شود، بررسی کنید.

آیا Puppeteer قبلاً از فایرفاکس پشتیبانی نمی کرد؟

در حالی که Puppeteer قبلاً با استفاده از اجرای محدود و غیر متقابل CDP از فایرفاکس پشتیبانی آزمایشی ارائه می‌کرد، از محدودیت‌هایی رنج می‌برد و راه‌حلی پایدار نبود.

اجرای آزمایشی جدید فایرفاکس و WebDriver BiDi به این مسائل می پردازد.

ما می دانیم که ممکن است سوالات دیگری مانند:

  • آیا پشتیبانی از CDP فایرفاکس از بین می رود؟
  • آیا همه ویژگی های Puppeteer پشتیبانی می شوند؟

برای پاسخ های دقیق و اطلاعات بیشتر، اطلاعیه اختصاصی فایرفاکس را بررسی کنید!

زمان های هیجان انگیزی در پیش است

آزمایش بین مرورگرها یکی از نیازهای اصلی توسعه دهندگان بوده است، بنابراین ما هیجان زده هستیم که ادغام WebDriver BiDi را در Puppeteer انجام دهیم، که نقطه عطفی به سمت تجربه اتوماسیون بین مرورگرهای یکپارچه تر و کارآمدتر است. ما شما را تشویق می کنیم که WebDriver BiDi را با Puppeteer کاوش کنید.

با نگاهی به آینده، WebDriver BiDi در نهایت به پروتکل پیش‌فرض Puppeteer تبدیل خواهد شد و راه را برای یک تجربه اتوماسیون سازگار و قدرتمند هموار می‌کند.

برای هر مشکلی که هنگام اجرای تست‌های Puppeteer با WebDriver BiDi با آن مواجه می‌شوید، مسائل را در ردیاب Puppeteer ما باز کنید.