رفتن به محتوای اصلی

اجرا کننده

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

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

Local Runner فریمورک شما (مثلاً Mocha، Jasmine یا Cucumber) را در یک پروسه worker آغاز می کند و تمام فایل های تست شما را در محیط Node.js شما اجرا می کند. هر فایل تست در یک فرآیند worker جداگانه در هر capability اجرا می شود که حداکثر همزمانی را امکان‌پذیر می کند. هر پروسه worker از یک نمونه browser استفاده می‌کند و بنابراین session مرورگر خود را اجرا می‌کند که اجازه می‌دهد حداکثر ایزوله شدن را داشته باشد.

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

اگر چیز دیگری در 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 است

JSDOMWebdriverIO Browser Runner
1.تست های شما را در Node.js با استفاده از پیاده‌سازی مجدد استانداردهای وب، به ویژه استانداردهای WHATWG DOM و HTML اجرا می کندتست شما را در یک مرورگر واقعی اجرا می کند و کد را در محیطی که کاربران شما استفاده می کنند اجرا می کند
2.تعامل با مؤلفه ها فقط از طریق جاوا اسکریپت قابل تقلید استمی توانید از WebdriverIO API برای تعامل با عناصر از طریق پروتکل WebDriver استفاده کنید
3.پشتیبانی از Canvas به وابستگی های اضافی نیاز دارد و دارای محدودیت استشما به Canvas APIواقعی دسترسی دارید
4.JSDOM دارای caveats و Web 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استفاده کرد.

Type: vue | svelte | solid | react | preact | stencil
Example:

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

viteConfig

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

Type: string or UserConfig or (env: ConfigEnv) => UserConfig | Promise<UserConfig>
Example:

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'تنظیم شده است.

Type: boolean
Default: false, set to true if CI environment variable is set

rootDir

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

Type: string
Default: process.cwd()

coverage

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

Type: object
Default: undefined

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

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

enabled

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

Type: boolean
Default: false

include

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

Type: string[]
Default: [**]

exclude

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

Type: string[]
Default:

[
'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

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

Type: string | string[]
Default: ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte']

reportsDirectory

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

Type: string
Default: ./coverage

reporter

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

Type: string[]
Default: ['text', 'html', 'clover', 'json-summary']

perFile

آستانه های هر فایل را بررسی کنید. خط، توابع، شاخه ها و عبارات را برای آستانه های حال حاضر ببینید.

Type: boolean
Default: false

clean

قبل از اجرای آزمایش نتایج پوشش تمیز شود.

Type: boolean
Default: true

lines

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

Type: number
Default: undefined

functions

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

Type: number
Default: undefined

branches

Threshold for branches.

Type: number
Default: undefined

statements

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

Type: number
Default: undefined

محدودیت ها

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

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

مثال‌ها

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

Welcome! How can I help?

WebdriverIO AI Copilot