پرش به محتوای اصلی

اجرا کننده

یک اجرا کننده در WebdriverIO هماهنگ می‌کند که چگونه و کجا تست‌ها هنگام استفاده از testrunner اجرا می‌شوند. WebdriverIO در حال حاضر از دو نوع مختلف اجرا کننده پشتیبانی می‌کند: اجرا کننده محلی و اجرا کننده مرورگر.

اجرا کننده محلی

اجرا کننده محلی چارچوب شما (مانند Mocha، Jasmine یا Cucumber) را در یک فرآیند worker راه‌اندازی می‌کند و تمام فایل‌های تست شما را در محیط Node.js اجرا می‌کند. هر فایل تست در یک فرآیند worker جداگانه به ازای هر قابلیت اجرا می‌شود که امکان حداکثر همزمانی را فراهم می‌کند. هر فرآیند worker از یک نمونه مرورگر استفاده می‌کند و بنابراین جلسه مرورگر خود را اجرا می‌کند که اجازه حداکثر جداسازی را می‌دهد.

با توجه به اینکه هر تست در فرآیند مجزای خود اجرا می‌شود، امکان اشتراک داده‌ها بین فایل‌های تست وجود ندارد. دو راه برای دور زدن این محدودیت وجود دارد:

اگر مورد دیگری در wdio.conf.js تعریف نشده باشد، اجرا کننده محلی، اجرا کننده پیش‌فرض در WebdriverIO است.

نصب

برای استفاده از اجرا کننده محلی می‌توانید آن را از طریق زیر نصب کنید:

npm install --save-dev @wdio/local-runner

راه‌اندازی

اجرا کننده محلی، اجرا کننده پیش‌فرض در WebdriverIO است، بنابراین نیازی به تعریف آن در wdio.conf.js نیست. اگر می‌خواهید به صراحت آن را تنظیم کنید، می‌توانید آن را به شرح زیر تعریف کنید:

// wdio.conf.js
export const {
// ...
runner: 'local',
// ...
}

اجرا کننده مرورگر

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

در حالی که JSDOM به طور گسترده برای اهداف تست استفاده می‌شود، در نهایت یک مرورگر واقعی نیست و نمی‌توانید محیط‌های موبایل را با آن شبیه‌سازی کنید. با این اجرا کننده، WebdriverIO به شما امکان می‌دهد تا به راحتی تست‌های خود را در مرورگر اجرا کنید و از دستورات WebDriver برای تعامل با عناصر رندر شده در صفحه استفاده کنید.

در اینجا نمایی کلی از اجرای تست‌ها در JSDOM در مقابل اجرا کننده مرورگر WebdriverIO آمده است:

JSDOMاجرا کننده مرورگر WebdriverIO
1.تست‌های شما را در Node.js با استفاده از پیاده‌سازی مجدد استانداردهای وب، به ویژه استانداردهای DOM و HTML WHATWG اجرا می‌کندتست شما را در یک مرورگر واقعی اجرا می‌کند و کد را در محیطی که کاربران شما از آن استفاده می‌کنند، اجرا می‌کند
2.تعاملات با کامپوننت‌ها فقط می‌توانند از طریق JavaScript تقلید شوندمی‌توانید از API WebdriverIO برای تعامل با عناصر از طریق پروتکل WebDriver استفاده کنید
3.پشتیبانی از Canvas نیاز به وابستگی‌های اضافی دارد و محدودیت‌هایی داردشما به API Canvas واقعی دسترسی دارید
4.JSDOM برخی محدودیت‌ها و APIهای وب پشتیبانی نشده داردتمام APIهای وب پشتیبانی می‌شوند زیرا تست در یک مرورگر واقعی اجرا می‌شود
5.تشخیص خطاها در مرورگرهای مختلف غیرممکن استپشتیبانی از همه مرورگرها از جمله مرورگرهای موبایل
6.نمی‌تواند حالت‌های شبه عناصر را تست کندپشتیبانی از حالت‌های شبه مانند :hover یا :active

این اجرا کننده از Vite برای کامپایل کد تست شما و بارگذاری آن در مرورگر استفاده می‌کند. این با پیش‌تنظیمات برای چارچوب‌های کامپوننت زیر ارائه می‌شود:

  • React
  • Preact
  • Vue.js
  • Svelte
  • SolidJS
  • Stencil

هر فایل تست / گروه فایل تست در یک صفحه واحد اجرا می‌شود، به این معنی که بین هر تست، صفحه مجدداً بارگذاری می‌شود تا جداسازی بین تست‌ها تضمین شود.

نصب

برای استفاده از اجرا کننده مرورگر، می‌توانید آن را از طریق زیر نصب کنید:

npm install --save-dev @wdio/browser-runner

راه‌اندازی

برای استفاده از اجرا کننده مرورگر، باید یک ویژگی runner را در فایل wdio.conf.js خود تعریف کنید، به عنوان مثال:

// wdio.conf.js
export const {
// ...
runner: 'browser',
// ...
}

گزینه‌های اجرا کننده

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

preset

اگر کامپوننت‌ها را با استفاده از یکی از چارچوب‌های ذکر شده در بالا تست می‌کنید، می‌توانید یک پیش‌تنظیم تعریف کنید که همه چیز از قبل پیکربندی شده باشد. این گزینه نمی‌تواند همراه با viteConfig استفاده شود.

نوع: vue | svelte | solid | react | preact | stencil
مثال:

wdio.conf.js
export const {
// ...
runner: ['browser', {
preset: 'svelte'
}],
// ...
}

viteConfig

پیکربندی Vite خود را تعریف کنید. می‌توانید یک شیء سفارشی را وارد کنید یا یک فایل vite.conf.ts موجود را اگر از Vite.js برای توسعه استفاده می‌کنید، ایمپورت کنید. توجه داشته باشید که WebdriverIO پیکربندی‌های سفارشی Vite را برای راه‌اندازی تست حفظ می‌کند.

نوع: string یا UserConfig یا (env: ConfigEnv) => UserConfig | Promise<UserConfig>
مثال:

wdio.conf.ts
import viteConfig from '../vite.config.ts'

export const {
// ...
runner: ['browser', { viteConfig }],
// or just:
runner: ['browser', { viteConfig: '../vites.config.ts' }],
// or use a function if your vite config contains a lot of plugins
// which you only want to resolve when value is read
runner: ['browser', {
viteConfig: () => ({
// ...
})
}],
// ...
}

headless

اگر روی true تنظیم شود، اجرا کننده قابلیت‌ها را برای اجرای تست‌ها به صورت headless به‌روز می‌کند. به طور پیش‌فرض، این در محیط‌های CI که متغیر محیطی CI روی '1' یا 'true' تنظیم شده است، فعال است.

نوع: boolean
پیش‌فرض: false، اگر متغیر محیطی CI تنظیم شده باشد روی true تنظیم می‌شود

rootDir

دایرکتوری ریشه پروژه.

نوع: string
پیش‌فرض: process.cwd()

coverage

WebdriverIO از گزارش پوشش تست از طریق istanbul پشتیبانی می‌کند. برای جزئیات بیشتر به گزینه‌های پوشش مراجعه کنید.

نوع: object
پیش‌فرض: undefined

گزینه‌های پوشش

گزینه‌های زیر امکان پیکربندی گزارش پوشش را فراهم می‌کنند.

enabled

جمع‌آوری پوشش را فعال می‌کند.

نوع: boolean
پیش‌فرض: false

include

لیست فایل‌های شامل در پوشش به عنوان الگوهای glob.

نوع: string[]
پیش‌فرض: [**]

exclude

لیست فایل‌های خارج از پوشش به عنوان الگوهای glob.

نوع: string[]
پیش‌فرض:

[
'coverage/**',
'dist/**',
'packages/*/test{,s}/**',
'**/*.d.ts',
'cypress/**',
'test{,s}/**',
'test{,-*}.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}spec.{js,cjs,mjs,ts,tsx,jsx}',
'**/__tests__/**',
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*',
'**/.{eslint,mocha,prettier}rc.{js,cjs,yml}',
]

extension

لیست پسوندهای فایل که گزارش باید شامل آنها باشد.

نوع: string | string[]
پیش‌فرض: ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte']

reportsDirectory

دایرکتوری برای نوشتن گزارش پوشش.

نوع: string
پیش‌فرض: ./coverage

reporter

گزارش‌دهنده‌های پوشش برای استفاده. برای لیست دقیق تمام گزارش‌دهنده‌ها به مستندات istanbul مراجعه کنید.

نوع: string[]
پیش‌فرض: ['text', 'html', 'clover', 'json-summary']

perFile

بررسی آستانه‌ها برای هر فایل. برای آستانه‌های واقعی به lines، functions، branches و statements مراجعه کنید.

نوع: boolean
پیش‌فرض: false

clean

پاک کردن نتایج پوشش قبل از اجرای تست‌ها.

نوع: boolean
پیش‌فرض: true

lines

آستانه برای خطوط.

نوع: number
پیش‌فرض: undefined

functions

آستانه برای توابع.

نوع: number
پیش‌فرض: undefined

branches

آستانه برای شاخه‌ها.

نوع: number
پیش‌فرض: undefined

statements

آستانه برای دستورات.

نوع: number
پیش‌فرض: undefined

محدودیت‌ها

هنگام استفاده از اجرا کننده مرورگر WebdriverIO، باید توجه داشت که دیالوگ‌های مسدودکننده thread مانند alert یا confirm نمی‌توانند به صورت طبیعی استفاده شوند. این به دلیل آن است که آنها صفحه وب را مسدود می‌کنند، که به معنای آن است که WebdriverIO نمی‌تواند به ارتباط با صفحه ادامه دهد، و باعث می‌شود اجرا متوقف شود.

در چنین مواردی، WebdriverIO mock‌های پیش‌فرض با مقادیر برگشتی پیش‌فرض برای این APIها ارائه می‌دهد. این تضمین می‌کند که اگر کاربر به طور تصادفی از APIهای پاپ‌آپ وب همزمان استفاده کند، اجرا متوقف نخواهد شد. با این حال، هنوز توصیه می‌شود که کاربر این APIهای وب را برای تجربه بهتر mock کند. اطلاعات بیشتر در Mocking.

مثال‌ها

حتماً مستندات مربوط به تست کامپوننت را بررسی کنید و نگاهی به مخزن مثال برای مثال‌هایی با استفاده از این و سایر چارچوب‌های مختلف داشته باشید.

Welcome! How can I help?

WebdriverIO AI Copilot