آموزش‌های کلادفلر به‌زودی در این بخش قرار داده می‌شود.

پلی‌رایت Playwright، راهنمای اتوماسیون و تست مرورگرها

پلی‌رایت (Playwright). احتمالا اسمش رو شنیدید یا دیدید که توی شرکت‌ها و تیم‌های مختلف، بحث بین استفاده از این ابزار و ابزارهای قدیمی‌تر مثل سلنیوم (Selenium) یا حتی رقبای جدیدترش مثل سایپرس (Cypress) داغه. مثلا یه جا ممکنه یه توسعه‌دهنده جوون و تازه‌نفس بیاد و بگه «بیاید فریم‌ورک Robot Framework رو با پلی‌رایت جایگزین کنیم» و کل تیم رو به چالش بکشه. هدف ما اینجا اینه که ببینیم این پلی‌رایت اصلا چی هست، چطور کار میکنه، و چه چیزهایی رو باید در موردش بدونیم. پس آماده باشید که میخوایم قدم به قدم این ابزار رو کالبدشکافی کنیم.

پلی‌رایت چیه و به چه دردی میخوره؟

پلی‌رایت یه فریم‌ورک اوپن‌سورس برای اتوماسیون و تست وب هست که توسط مایکروسافت توسعه داده شده. فکر کن میخوای مطمئن بشی که وبسایتت روی همه مرورگرها درست کار میکنه. به جای اینکه خودت دستی بری و دونه دونه دکمه‌ها رو کلیک کنی و فرم‌ها رو پر کنی، میتونی به پلی‌رایت بگی این کار رو برات انجام بده.

این ابزار با یه API واحد، بهت اجازه میده که تعاملات کاربر رو توی مرورگرهای کرومیوم (Chromium)، فایرفاکس (Firefox) و وب‌کیت (WebKit) شبیه‌سازی کنی.

مهمترین کاربردهای پلی‌رایت اینها هستن:

  • تست End-to-End: از اول تا آخر یه سناریوی کاربری رو تست میکنه. مثلا از لاگین کردن گرفته تا اضافه کردن محصول به سبد خرید و پرداخت.
  • وب اسکرپینگ (Web Scraping): برای استخراج اطلاعات از وبسایت‌ها به صورت خودکار استفاده میشه.
  • مانیتورینگ عملکرد: عملکرد وبسایت رو زیر نظر میگیره تا ببینه همه چیز روان و سریع اجرا میشه یا نه.

پلی‌رایت یه ویژگی خیلی مهم داره و اونم اینه که میتونه تست‌ها رو در حالت headless اجرا کنه. یعنی مرورگر باز میشه و کارها رو انجام میده، اما شما هیچ رابط کاربری گرافیکی یا پنجره‌ای ازش نمیبینید. همه چیز توی پس‌زمینه و از طریق خط فرمان اتفاق میفته. البته اگه بخواید، میتونید تنظیمش کنید که مرورگر رو به صورت کامل (non-headless) هم نشون بده.

این ابزار روی پلتفرم‌های مختلف مثل ویندوز، لینوکس و macOS کار میکنه و میتونی با زبان‌های برنامه‌نویسی مختلفی مثل TypeScript، جاوااسکریپت، پایتون، دات‌نت و جاوا ازش استفاده کنی.

ویژگی‌هایی که پلی‌رایت رو متمایز میکنه

  • Auto-wait (انتظار خودکار): یکی از دلایل اصلی که تست‌ها شکننده (flaky) میشن و گاهی کار میکنن و گاهی نه، اینه که اسکریپت تست زودتر از آماده شدن یه دکمه یا یه بخش از صفحه، میخواد روش کلیک کنه. پلی‌رایت به طور خودکار منتظر میمونه تا اون عنصر «قابل استفاده» بشه و بعد کارش رو انجام میده. اینطوری نیاز به استفاده از تایم‌اوت‌های مصنوعی که باعث دردسر میشن، از بین میره.
  • Web-first assertions (ادعاهای وب-محور): دستورات بررسی (assertions) توی پلی‌رایت مخصوص دنیای وب طراحی شدن. یعنی به طور خودکار یه شرط رو چک میکنن و اگه درست نبود، چند بار دیگه هم تلاش میکنن تا شاید اون شرط برقرار بشه.
  • Tracing (ردیابی): میتونی تست‌ها رو طوری تنظیم کنی که اگه شکست خوردن، یه گزارش کامل شامل ویدیو، اسکرین‌شات و تمام اتفاقاتی که افتاده رو بهت بده. اینجوری پیدا کردن دلیل مشکل خیلی راحت‌تر میشه.
  • ایزوله‌سازی کامل: پلی‌رایت برای هر تست، یه «کانتکست مرورگر» (browser context) جدید میسازه که مثل یه پروفایل کاملا نو و دست‌نخورده مرورگر میمونه. این کار باعث میشه تست‌ها روی هم اثر نذارن و کاملا از هم جدا باشن. ساختن این کانتکست‌ها هم خیلی سریعه و فقط چند میلی‌ثانیه طول میکشه.
  • پشتیبانی از سناریوهای پیچیده: میتونی سناریوهایی رو تست کنی که شامل چند تب، چند کاربر مختلف یا حتی چند مبدا (origin) متفاوت هستن.
  • رویدادهای قابل اعتماد (Trusted events): پلی‌رایت از پایپ‌لاین ورودی واقعی مرورگر استفاده میکنه. یعنی وقتی میگه روی یه چیزی کلیک کرده، اون کلیک از نظر مرورگر با کلیک یه کاربر واقعی هیچ فرقی نداره.

نصب و راه‌اندازی اولیه پلی‌رایت

خب، حالا که فهمیدیم پلی‌رایت چیه، بریم ببینیم چطور باید نصبش کنیم. قبل از هر چیز، باید Node.js نسخه ۲۰، ۲۲ یا ۲۴ روی سیستمت نصب باشه. سیستم‌عاملت هم میتونه ویندوز ۱۰ به بالا، macOS 14 به بالا، یا توزیع‌های لینوکس مثل دبیان ۱۲/۱۳ و اوبونتو ۲۲.۰۴/۲۴.۰۴ باشه.

برای شروع، میتونی از دستور زیر توی ترمینال پروژه‌ات استفاده کنی:

# با استفاده از npm
npm init playwright@latest

# با استفاده از yarn
yarn create playwright

# با استفاده از pnpm
pnpm create playwright

وقتی این دستور رو اجرا میکنی، چند تا سوال ازت میپرسه:

  • میخوای از TypeScript استفاده کنی یا JavaScript؟
  • اسم پوشه تست‌هات چی باشه؟ (معمولا tests یا e2e)
  • میخوای یه فایل workflow برای GitHub Actions اضافه بشه؟ (برای اجرای تست‌ها به صورت خودکار در محیط CI/CD خوبه)
  • مرورگرهای پلی‌رایت نصب بشن؟ (که معمولا جواب «بله» هست)

بعد از اینکه این مراحل تموم شد، این فایل‌ها و پوشه‌ها به پروژه‌ات اضافه میشن:

  • playwright.config.ts: فایل اصلی تنظیمات پلی‌رایت. اینجا مشخص میکنی تست‌ها روی چه مرورگرهایی، با چه تنظیماتی و … اجرا بشن.
  • package.json: وابستگی‌های پروژه اینجا اضافه میشه.
  • tests/example.spec.ts: یه فایل تست نمونه خیلی ساده.
  • tests-examples/demo-todo-app.spec.ts: یه فایل تست نمونه کامل‌تر که میتونی ازش الگو بگیری.

بعد از نصب اولیه، باید مرورگرها رو نصب کنی. این دستور هر سه مرورگر اصلی (کرومیوم، فایرفاکس و وب‌کیت) رو دانلود میکنه:

npx playwright install

اجرای تست نمونه

حالا که همه چیز آماده‌ست، میتونی تست نمونه رو اجرا کنی. به طور پیش‌فرض، تست‌ها به صورت موازی و در حالت headless روی هر سه مرورگر اجرا میشن.

# با استفاده از npm
npx playwright test

# با استفاده از yarn
yarn playwright test

# با استفاده از pnpm
pnpm exec playwright test

چند تا نکته برای اجرای تست‌ها:

  • اگه میخوای پنجره مرورگر رو ببینی، از فلگ --headed استفاده کن.
  • اگه میخوای تست‌ها فقط روی یه مرورگر خاص اجرا بشن، از --project=chromium استفاده کن.
  • برای اجرای فقط یه فایل تست خاص: npx playwright test tests/example.spec.ts
  • برای باز کردن رابط کاربری گرافیکی تست: --ui

گزارش تست HTML

بعد از اینکه تست‌ها تموم شدن، میتونی گزارش HTML رو ببینی. این گزارش بهت یه داشبورد کامل میده که میتونی تست‌ها رو بر اساس مرورگر، وضعیت (موفق، ناموفق، رد شده) فیلتر کنی. اگه تستی شکست خورده باشه، میتونی روش کلیک کنی و خطاها، فایل‌های ضمیمه و مراحل اجرا رو ببینی. این گزارش معمولا فقط وقتی تستی شکست بخوره به طور خودکار باز میشه، اما میتونی با دستور زیر هم به صورت دستی بازش کنی:

npx playwright show-report

مدیریت مرورگرها: قلب تپنده پلی‌رایت

یکی از مهمترین مفاهیم توی پلی‌رایت، مدیریت مرورگرهاست. هر نسخه از پلی‌رایت برای کار کردن به نسخه‌های خیلی مشخصی از باینری‌های مرورگر نیاز داره. این یعنی هر بار که خود پلی‌رایت رو آپدیت میکنی، احتمالا باید دستور install رو دوباره اجرا کنی تا مرورگرهای سازگار با اون نسخه هم دانلود بشن.

نصب مرورگرها و وابستگی‌ها

همونطور که گفتیم، دستور اصلی برای نصب مرورگرها اینه:

npx playwright install

اما میتونی کارهای دیگه‌ای هم انجام بدی:

  • نصب یک مرورگر خاص:
    npx playwright install webkit
  • دیدن لیست تمام مرورگرهای قابل نصب:
    npx playwright install --help
  • نصب وابستگی‌های سیستمی: این دستور مخصوصا توی محیط‌های CI (Continuous Integration) خیلی به درد میخوره، چون تمام پکیج‌های مورد نیاز روی سیستم‌عامل رو نصب میکنه.
    npx playwright install-deps
  • نصب وابستگی‌های یک مرورگر خاص:
    npx playwright install-deps chromium
  • ترکیب نصب مرورگر و وابستگی‌ها:
    npx playwright install --with-deps chromium

انواع مرورگرها و تنظیماتشون

پلی‌رایت میتونه تست‌ها رو روی موتورهای اصلی رندر وب (کرومیوم، وب‌کیت، فایرفاکس) و همچنین مرورگرهای برنددار مثل گوگل کروم (Google Chrome) و مایکروسافت اج (Microsoft Edge) اجرا کنه.

کرومیوم (Chromium)

به طور پیش‌فرض، پلی‌رایت از بیلد اوپن‌سورس کرومیوم استفاده میکنه. یه نکته جالب اینه که پروژه کرومیوم همیشه از نسخه‌های نهایی مرورگرهایی مثل کروم جلوتره. یعنی وقتی نسخه N گوگل کروم تازه منتشر شده، پلی‌رایت już از کرومیوم نسخه N+1 پشتیبانی میکنه. این بهت کمک میکنه که مشکلات احتمالی وبسایتت با نسخه‌های آینده کروم رو زودتر پیدا کنی.

پلی‌رایت دو تا بیلد از کرومیوم رو ارائه میده:

  1. بیلد معمولی کرومیوم: برای عملیات headed (با رابط کاربری).
  2. پوسته headless کرومیوم (chromium headless shell): یه نسخه سبک‌تر که فقط برای اجرای headless استفاده میشه.

اگه تست‌هات رو فقط در حالت headless اجرا میکنی (مثلا روی CI)، میتونی موقع نصب با اضافه کردن فلگ --only-shell از دانلود کردن بیلد کامل کرومیوم جلوگیری کنی و در فضا صرفه‌جویی کنی.

npx playwright install --with-deps --only-shell
حالت headless جدید کروم:

یه حالت headless جدید هم وجود داره که میتونی با استفاده از کانال «chromium» فعالش کنی. طبق مستندات خود کروم:

حالت Headless جدید، در واقع خود مرورگر واقعی کروم هست و به همین دلیل معتبرتر، قابل اعتمادتر و با امکانات بیشتره. این باعث میشه برای تست‌های end-to-end با دقت بالا یا تست افزونه‌های مرورگر مناسب‌تر باشه.

برای استفاده از این حالت، باید فلگ --no-shell رو موقع نصب بزنی تا پوسته headless قدیمی دانلود نشه.

npx playwright install --with-deps --no-shell
گوگل کروم و مایکروسافت اج

پلی‌رایت میتونه با نسخه‌های برنددار کروم و اج که روی سیستم شما نصب هستن هم کار کنه (البته به طور پیش‌فرض اونها رو نصب نمیکنه). پلی‌رایت از کانال‌های Stable و Beta این مرورگرها پشتیبانی میکنه.

کانال‌های موجود اینها هستن: chrome, msedge, chrome-beta, msedge-beta, chrome-dev, msedge-dev, chrome-canary, msedge-canary.

اگه این مرورگرها روی سیستمت نصب نیستن، میتونی با خود پلی‌رایت نصبشون کنی:

npx playwright install msedge

یه نکته مهم: این دستور، مرورگر رو در مسیر پیش‌فرض سیستم‌عامل نصب میکنه و ممکنه نسخه فعلی مرورگر شما رو بازنویسی کنه.

چه زمانی از کروم/اج استفاده کنیم و چه زمانی نه؟
  • حالت پیش‌فرض (کرومیوم): در بیشتر موارد، استفاده از کرومیوم پیش‌فرض پلی‌رایت بهترین گزینه‌ست. چون جلوتر از نسخه‌های پایدار هست، بهت این اطمینان رو میده که آپدیت‌های آینده کروم وبسایتت رو خراب نمیکنه.
  • تست رگرسیون (Regression testing): بعضی وقت‌ها سیاست‌های تست شرکت ایجاب میکنه که تست‌ها حتما روی نسخه‌های عمومی و پایدار فعلی مرورگرها اجرا بشن. در این حالت، میتونی از کانال‌های chrome یا msedge استفاده کنی.
  • کدک‌های مدیا (Media codecs): کرومیوم به خاطر مسائل لایسنس، همه کدک‌های ویدیویی و صوتی که کروم و اج دارن رو شامل نمیشه. اگه وبسایتت به این کدک‌های خاص وابسته هست، باید از نسخه‌های رسمی استفاده کنی.
  • سیاست‌های سازمانی (Enterprise policy): کروم و اج به سیاست‌های سازمانی احترام میذارن. این سیاست‌ها ممکنه محدودیت‌هایی مثل پروکسی شبکه یا افزونه‌های اجباری ایجاد کنن که جلوی تست رو میگیرن. در این شرایط، راحت‌ترین کار اینه که برای تست‌های lokal از کرومیوم باندل شده استفاده کنی و روی سرورهای CI که معمولا این محدودیت‌ها رو ندارن، از کانال‌های پایدار استفاده کنی.
فایرفاکس (Firefox)

نسخه فایرفاکس پلی‌رایت با آخرین بیلد پایدار فایرفاکس مطابقت داره. پلی‌رایت با نسخه برنددار و نصب شده فایرفاکس روی سیستم شما کار نمیکنه، چون به یه سری پچ‌های خاص نیاز داره که خودش اعمال میکنه.

وب‌کیت (WebKit)

وب‌کیت پلی‌رایت هم از آخرین سورس‌های وب‌کیت گرفته میشه، حتی قبل از اینکه این تغییرات توی مرورگر سافاری اپل اعمال بشن. این هم بهت زمان میده تا برای آپدیت‌های احتمالی آینده آماده باشی. پلی‌رایت با نسخه برنددار سافاری هم کار نمیکنه و به پچ‌های خودش متکیه.

چالش‌های پیشرفته: داکر، فایروال و مشکلات رایج

وقتی از سطح مبتدی فراتر میریم، با یه سری چالش‌های واقعی روبرو میشیم. بیا چند تاشون رو بررسی کنیم.

پیش‌نصب مرورگرها در داکر برای CI

یکی از مشکلات رایج اینه: یه نفر میخواد یه کانتینر داکر برای محیط CI بسازه که مرورگرها و وابستگی‌های پلی‌رایت از قبل روش نصب باشن تا مراحل تست سریع‌تر اجرا بشه. اون شخص دستور playwright install-deps رو توی Dockerfile اجرا میکنه و به نظر میاد مرورگر نصب میشه. اما وقتی به مرحله تست میرسه و دستور npx playwright install chromium رو توی پروژه اجرا میکنه، میبینه که مرورگر داره دوباره از اول دانلود میشه!

این سوال مطرح میشه: چطور میشه مرورگرها رو در یک کانتینر داکر پیش‌نصب کرد بدون اینکه در مرحله تست دوباره دانلود بشن؟

مستندات پلی‌رایت به طور خاص میگن که install-deps برای محیط‌های CI مفیده، اما باید مطمئن بشیم که مسیر نصب مرورگرها در مرحله ساخت ایمیج داکر و مرحله اجرای تست یکی باشه تا پلی‌رایت بتونه پیداشون کنه.

ایمیج رسمی داکر پلی‌رایت:

برای حل این مشکل، خود پلی‌رایت یه ایمیج رسمی داکر ارائه میده که روی اوبونتو ۲۴.۰۴ ساخته شده. توصیه میشه که از نسخه‌ای از این ایمیج استفاده کنید که با نسخه پلی‌رایت پروژه‌تون یکی باشه. اگه نسخه پلی‌رایت توی ایمیج داکر با نسخه پروژه‌تون نخونه، پلی‌رایت نمیتونه فایل‌های اجرایی مرورگر رو پیدا کنه.

docker pull mcr.microsoft.com/playwright:v1.50.0-noble

نصب پشت فایروال یا پروکسی

به طور پیش‌فرض، پلی‌رایت مرورگرها رو از CDN مایکروسافت دانلود میکنه. بعضی شرکت‌ها یه پروکسی داخلی دارن که دسترسی مستقیم به اینترنت رو میبنده. در این حالت، باید پلی‌رایت رو تنظیم کنی که از طریق پروکسی دانلود کنه:

# در Bash (لینوکس/macOS)
HTTPS_PROXY=https://192.0.2.1 npx playwright install

# در PowerShell (ویندوز)
$Env:HTTPS_PROXY="https://192.0.2.1"
npx playwright install

اگه پروکسی شما از گواهی‌های دیجیتال (CA) نامعتبر استفاده میکنه و با خطای self signed certificate in certificate chain مواجه میشید، باید متغیر محیطی NODE_EXTRA_CA_CERTS رو تنظیم کنید.

مدیریت مسیر نصب مرورگرها

پلی‌رایت مرورگرها رو توی پوشه‌های کش مخصوص سیستم‌عامل ذخیره میکنه:

  • ویندوز: %USERPROFILE%\AppData\Local\ms-playwright
  • macOS: ~/Library/Caches/ms-playwright
  • لینوکس: ~/.cache/ms-playwright

اگه بخوای این مسیر رو تغییر بدی، میتونی از متغیر محیطی PLAYWRIGHT_BROWSERS_PATH استفاده کنی. این کار بهت اجازه میده که مرورگرها رو توی یه پوشه اشتراکی نصب کنی و همه پروژه‌ها از همون استفاده کنن.

# موقع نصب
PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers npx playwright install

# موقع اجرای تست
PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers npx playwright test

مشکل در NixOS: داستان کتابخانه‌های داینامیک

یه چالش خیلی خاص برای کاربرای توزیع لینوکس NixOS پیش میاد. وقتی میخوان یه اسکریپت ساده پلی‌رایت رو اجرا کنن، با خطا مواجه میشن که میگه یه سری کتابخانه‌های اشتراکی (shared objects) پیدا نشدن.

مشکل چیه؟

کرومیومی که پلی‌رایت به طور پیش‌فرض دانلود میکنه، به صورت داینامیک لینک شده. یعنی برای اجرا شدن به یه سری کتابخانه روی سیستم‌عامل نیاز داره. NixOS به دلایل امنیتی و مدیریتی، جلوی اجرای این نوع فایل‌های اجرایی رو که برای لینوکس‌های عمومی طراحی شدن، میگیره.

راه حل چیه؟

چند تا راه وجود داره، اما بهترین و ساده‌ترین راه اینه:

  1. استفاده از playwright-core: به جای پکیج کامل playwright، از پکیج playwright-core استفاده کنید. این پکیج مرورگرها رو به صورت خودکار دانلود نمیکنه.
  2. استفاده از کرومیوم خود NixOS: کرومیومی که از طریق Nixpkgs نصب میشه، به صورت استاتیک لینک شده و به کتابخانه‌های خارجی نیازی نداره.
  3. مشخص کردن مسیر اجرایی: توی کدتون، به پلی‌رایت بگید که به جای استفاده از کرومیوم خودش، از کرومیومی که روی سیستم نصب هست استفاده کنه.
// به جای require('playwright')
const { chromium } = require('playwright-core');

const browser = await chromium.launch({
  // مسیر کرومیومی که با which chromium پیدا کردید
  executablePath: '/home/jack/.nix-profile/bin/chromium',
  headless: false
});

اینطوری پلی‌رایت دیگه دنبال وابستگی‌های داینامیک نمیگرده و مشکل حل میشه.

اون روی سکه: شناسایی و بلاک کردن پلی‌رایت

با اینکه پلی‌رایت یه ابزار قدرتمند برای تست هست، اما میشه ازش برای کارهای دیگه‌ای مثل کلاهبرداری خودکار، پر کردن اعتبارنامه‌ها (credential stuffing) و جمع‌آوری داده هم سوءاستفاده کرد. به همین دلیل، خیلی از وبسایت‌ها سعی میکنن ربات‌هایی که با پلی‌رایت ساخته شدن رو شناسایی و بلاک کنن.

چطور پلی‌رایت در حالت headless شناسایی میشه؟

  • ویژگی Navigator WebDriver: پلی‌رایت در حالت headless، مقدار navigator.webdriver رو توی جاوااسکریپت true میکنه.
  • الگوهای زمانی و تعاملی غیرعادی: اسکریپت‌های پلی‌رایت خیلی سریع‌تر از یه کاربر واقعی کار میکنن. کلیک‌های سریع، زمان بارگذاری صفحه غیرطبیعی و نبود هیچ زمان بیکاری (idle time)، نشونه‌های ربات هستن.
  • نبود حرکات واقعی موس: تعاملات پلی‌رایت حرکات ارگانیک موس یا اسکرول کردن طبیعی رو تولید نمیکنه.
  • هدرهای HTTP سفارشی: درخواست‌های ارسالی توسط پلی‌رایت ممکنه هدرهای ناقص یا ناهماهنگی مثل sec-ch-ua یا user-agent داشته باشن.
  • انگشت‌نگاری (Fingerprinting): تست‌های انگشت‌نگاری از طریق WebGL، Canvas و Audio API در حالت headless نتایج متفاوتی نسبت به یه مرورگر واقعی تولید میکنن.

چطور میشه پلی‌رایت رو بلاک کرد؟

  • چالش‌های مبتنی بر جاوااسکریپت: استفاده از تکنیک‌های انگشت‌نگاری برای ردیابی حرکات موس یا رندر WebGL.
  • تشخیص ناهنجاری رفتاری: تحلیل رفتار کاربر مثل لاگین‌های متوالی سریع یا حجم بالای درخواست.
  • کپچا (CAPTCHA) و محدودیت نرخ (Rate Limiting): استفاده از کپچاهای پیشرونده و محدود کردن تعداد درخواست‌ها در یک بازه زمانی.
  • بررسی درخواست در سمت سرور: مانیتور کردن هدرهای HTTP غیر استاندارد و الگوهای ترافیک انبوه.

یک بحث مهم: موتور مرورگر در برابر خود مرورگر

یه بحث جالبی که توسط یکی از متخصصان به اسم Maaret Pyhäjärvi مطرح شده اینه که وقتی میگیم «پلی‌رایت همه مرورگرهای اصلی رو اتوماتیک میکنه»، داریم یه کم ماجرا رو ساده‌سازی میکنیم.

موتورهای مرورگر، خود مرورگرها نیستن.

لوگوی کرومیوم با لوگوی کروم فرق داره و این تفاوت‌ها مهمن. مرورگرها نسخه‌های مختلفی دارن و اینکه ما بتونیم فقط روی کروم (که در واقع کرومیوم هست) اتوماسیون انجام بدیم، به این معنی نیست که همه نسخه‌های مختلف کروم که کاربران واقعی ازش استفاده میکنن رو پوشش دادیم. نسخه‌های توسعه‌دهنده مرورگرها هم اون چیزی نیستن که کاربران نهایی شما اجرا میکنن.

ایشون اشاره میکنه که با اومدن WebDriver Bidi برای همه مرورگرها، این پروتکل جایگزین CDP میشه و ممکنه شرایط رو تغییر بده.

پرسش و پاسخ

سوال ۱: آیا حتما باید هر سه مرورگر کرومیوم، فایرفاکس و وب‌کیت رو نصب کنم؟

نه، اجباری نیست. شما میتونید موقع نصب مشخص کنید که فقط یک یا دو مرورگر خاص نصب بشن. مثلا با دستور npx playwright install chromium فقط کرومیوم نصب میشه. این کار به خصوص در محیط‌های CI برای صرفه‌جویی در فضا و زمان خیلی مفیده.

سوال ۲: فرق بین playwright و playwright-core چیه؟

پکیج playwright نسخه کامل هست که شامل خود کتابخانه و اسکریپت‌های دانلود خودکار مرورگرهاست. اما playwright-core یه نسخه سبک‌تره که فقط API اصلی پلی‌رایت رو داره و مرورگرها رو به صورت خودکار دانلود نمیکنه. این پکیج برای سناریوهای خاصی مثل کار با NixOS یا وقتی که میخواید از یه مرورگر از قبل نصب شده روی سیستم استفاده کنید، کاربرد داره.

سوال ۳: آیا میتونم از نسخه فایرفاکسی که خودم روی کامپیوترم نصب کردم با پلی‌رایت استفاده کنم؟

نه. همونطور که توی متن اشاره شد، پلی‌رایت برای کار با فایرفاکس به یه سری پچ‌های خاص نیاز داره. به همین دلیل، شما باید از نسخه فایرفاکسی استفاده کنید که خود پلی‌رایت دانلود و مدیریت میکنه و نمیتونید بهش بگید از نسخه برنددار و نصب شده روی سیستم استفاده کنه. این موضوع برای سافاری (وب‌کیت) هم صدق میکنه.

سوال ۴: headless mode دقیقا یعنی چی؟

حالت headless یعنی مرورگر تمام کارهای یک مرورگر عادی رو انجام میده (صفحات رو باز میکنه، جاوااسکریپت رو اجرا میکنه، روی دکمه‌ها کلیک میکنه)، اما هیچ پنجره یا رابط کاربری گرافیکی به شما نشون نمیده. همه این اتفاقات در پس‌زمینه رخ میده. این حالت برای اجرای تست‌ها روی سرورها (مثل محیط CI) که رابط گرافیکی ندارن، عالیه و معمولا سریع‌تر و سبک‌تر هم هست.

سوال ۵: چرا تست‌های من روی CI شکست میخورن ولی روی کامپیوتر خودم درست کار میکنن؟

این یکی از رایج‌ترین مشکلاته و دلایل زیادی میتونه داشته باشه. یکی از دلایل اصلی که به پلی‌رایت مرتبطه، میتونه مربوط به وابستگی‌های سیستمی باشه. ممکنه روی سیستم عامل سرور CI شما، پکیج‌ها و کتابخانه‌هایی که مرورگرها برای اجرا شدن بهشون نیاز دارن، نصب نباشه. به همین دلیله که دستور npx playwright install-deps خیلی مهمه و باید قبل از اجرای تست‌ها در محیط CI اجرا بشه. دلیل دیگه میتونه تفاوت در نسخه مرورگرها یا خود پلی‌رایت بین دو محیط باشه.

سوال ۶: آپدیت کردن پلی‌رایت چطوریه و چه نکته‌ای داره؟

برای آپدیت کردن پلی‌رایت، از دستور npm install -D @playwright/test@latest (یا معادلش در yarn/pnpm) استفاده میکنید. نکته بسیار مهم اینه که بعد از آپدیت خود پکیج پلی‌رایت، تقریبا همیشه باید مرورگرها رو هم آپدیت کنید. چون هر نسخه جدید پلی‌رایت برای نسخه‌های جدیدتر و مشخصی از مرورگرها طراحی شده. اگه این کار رو فراموش کنید و تست‌ها رو اجرا کنید، خود پلی‌رایت یه خطای واضح بهتون میده و میگه که فایل اجرایی مرورگر رو پیدا نکرده و ازتون میخواد که npx playwright install رو اجرا کنید.

“`

منابع

  • [2] Robot Framework – Selenium vs. Playwright – Robot Framework – Robot Framework
  • [4] Running playwright tests – Help – NixOS Discourse
  • [6] Supported Playwright versions, browsers and OSes for Playwright tests on BrowserStack Automate | BrowserStack Docs
  • [8] Sharding Playwright tests by browser – Brian Birtles’ Blog
  • [10] Fast and reliable end-to-end testing for modern web apps | Playwright
  • [12] Use Playwright to automate and test in Microsoft Edge – Microsoft Edge Developer documentation | Microsoft Learn
  • [14] Running playwright with the local firefox – Stack Overflow
  • [16] GitHub – microsoft/playwright: Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.
  • [18] Browsers | Playwright .NET
  • [20] Browsers | Playwright
  • [1] Pre-installing Playwright Browsers and Dependencies in a Docker Container for CI
  • [3] Failed to install the browsers – Playwright Automation tool – Stack Overflow
  • [5] microsoft/playwright – Docker Image | Docker Hub
  • [7] Browsers | Playwright Python
  • [9] Listened to yet another “playwright automates all the main browsers” and ended up collecting logos for sketch. | Maaret Pyhäjärvi
  • [11] node.js – How to update / upgrade Playwright? – Stack Overflow
  • [13] Browser | Playwright
  • [15] What is Playwright headless browser ? How to identify and block it
  • [17] Cypress vs Playwright : r/QualityAssurance
  • [19] Installation | Playwright

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *