پیکربندی
بر اساس تنظیم نوع (مثلاً با استفاده از اتصال پروتکل خام، WebdriverIO به عنوان بسته مستقل و اجرا کننده تست WDIO) مجموعه متفاوتی از گزینه ها برای کنترل محیط وجود دارد.
گزینه های WebDriver
هنگام استفاده از بسته پروتکل webdriver
گزینه های زیر تعریف می شوند:
protocol
پروتکل مورد استفاده در هنگام برقراری ارتباط با سرور درایور.
Type: String
Default: http
hostname
میزبان سرور درایور شما.
Type: String
Default: localhost
port
پورتی که سرور درایور شما روی آن است.
Type: Number
Default: 4444
path
مسیری به سرور درایور شما.
Type: String
Default: /
queryParams
پارامترهای درخواست که به سرور درایور انتشار می یابند.
Type: Object
Default: null
user
نام کاربری سرویس ابری شما (فقط برای اکانت های Sauce Labs, Browserstack, TestingBot, CrossBrowserTesting or LambdaTest کار می کند). در صورت تنظیم، WebdriverIO به طور خودکار ویژگی های اتصال را برای شما تنظیم می کند. اگر از ارائهدهنده ابری استفاده نمیکنید، میتوان از آن برای احراز هویت هر بک اند WebDriver دیگری استفاده کرد.
Type: String
Default: null
key
کلید دسترسی به سرویس ابری یا کلید مخفی شما (فقط برای اکانت های Sauce Labs, Browserstack, TestingBot, CrossBrowserTesting or LambdaTest کار می کند). در صورت تنظیم، WebdriverIO به طور خودکار ویژگی های اتصال را برای شما تنظیم می کند. اگر از ارائهدهنده ابری استفاده نمیکنید، میتوان از آن برای احراز هویت هر بک اند WebDriver دیگری استفاده کرد.
Type: String
Default: null
capabilities
قابلیت(Capability) هایی را که می خواهید در جلسه WebDriver خود اجرا کنید ر ا تعریف می کند. برای جزئیات بیشتر، پروتکل WebDriver را بررسی کنید. اگر درایور قدیمیتری را اجرا میکنید که از پروتکل WebDriver پشتیبانی نمیکند، برای اجرای موفقیتآمیز یک جلسه، باید از قابلیتهای JSONWireProtocol استفاده کنید.
در کنار قابلیتهای مبتنی بر WebDriver، میتوانید گزینههایی که خاص یک مرورگر و یا سازنده خاصی است را اعمال کنید که امکان پیکربندی عمیقتر را برای مرورگر یا دستگاه در راه دور فراهم میکند. اینها در اسناد سازنده مربوطه مستند شده اند، به عنوان مثال:
goog:chromeOptions
: for Google Chromemoz:firefoxOptions
: for Mozilla Firefoxms:edgeOptions
: for Microsoft Edgesauce:options
: for Sauce Labsbstack:options
: for BrowserStackselenoid:options
: for Selenoid
علاوه بر این، یک ابزار مفید Sauce Labs Automated Test Configurator است که به شما کمک می کند این شی را با کلیک کردن روی قابلیت های مورد نظر خود ایجاد کنید.
Type: Object
Default: null
مثال:
{
browserName: 'chrome', // options: `chrome`, `edge`, `firefox`, `safari`
browserVersion: '27.0', // browser version
platformName: 'Windows 10' // OS platform
}
اگر تست های وب یا بومی را روی دستگاه های تلفن همراه اجرا می کنید، قابلیت(Capability)
با پروتکل WebDriver متفاوت است. برای جزئیات بیشتر به Appium Docs مراجعه کنید.
logLevel
سطح و میزان لاگ.
Type: String
Default: info
Options: trace
| debug
| info
| warn
| error
| silent
outputDir
دایرکتوری برای ذخیره همه فایلهای لاگ اجرا کننده تست (از جمله لاگهای گزارشدهنده ها و لاگ wdio
). اگر تنظیم نشود، همه گزارشها به stdout
ارسال میشوند. از آنجایی که اکثر گزارشدهنده ها برای لاگ در stdout
ساخته شده اند، توصیه می شود از این گزینه فقط برای گزارشدهنده های خاصی استفاده شود که در آن انتقال گزارش به یک فایل منطقی تر است (مثلاً گزارشدهنده junit
).
هنگامی که در حالت مستقل اجرا می شود، تنها گزارشی که توسط WebdriverIO ایجاد می شود، گزارش wdio
خواهد بود.
Type: String
Default: null
connectionRetryTimeout
مهلت زمانی برای هر درخواست WebDriver به درایور یا شبکه.
Type: Number
Default: 120000
connectionRetryCount
حداکثر تعداد درخواستهای مجدد به سرور سلنیوم.
Type: Number
Default: 3
agent
به شما امکان می دهد از یک عامل سفارشی http
/https
/http2
برای درخواست استفاده کنید.
Type: Object
Default:
{
http: new http.Agent({ keepAlive: true }),
https: new https.Agent({ keepAlive: true })
}
headers
مشخص کردن headers
های سفارشی برای ارسال با هر درخواست WebDriver و هنگام اتصال به مرورگر از طریق Puppeteer با استفاده از پروتکل CDP.
این header ها به درخواست مرورگر منتقل نمی شوند. اگر به دنبال اصلاح هدر درخواست، برای درخواست های مرورگر هستید، لطفاً در #6361 شرکت کنید!
Type: Object
Default: {}
transformRequest
تابعی برای intercept کردن ویژگی های درخواست HTTP قبل از درخواست WebDriver
Type: (RequestOptions) => RequestOptions
Default: none
transformResponse
تابعی برای intercept اشیاء در پاسخ HTTP پس از رسیدن پاسخ WebDriver. تابع به شیء پاسخ اصلی به عنوان اولین و RequestOptions
مربوطه به عنوان آرگومان دوم ارسال می شود.
Type: (Response, RequestOptions) => Response
Default: none
strictSSL
آیا برای معتبر بودن به گواهی SSL نیاز هست یا خیر. می توان آن را از طریق متغیرهای محیطی به صورت STRICT_SSL
یا strict_ssl
تنظیم کرد.
Type: Boolean
Default: true
enableDirectConnect
فعال کردن ویژگی اتصال مستقیم Appium. اگر در حالی که پرچم فعال است، پاسخ کلیدهای مناسبی نداشته باشد، کاری انجام نمی دهد.
Type: Boolean
Default: true
cacheDir
The path to the root of the cache directory. This directory is used to store all drivers that are downloaded when attempting to start a session.
Type: String
Default: process.env.WEBDRIVER_CACHE_DIR || os.tmpdir()
WebdriverIO
گزینه های زیر (از جمله موارد ذکر شده در بالا) را می توان با WebdriverIO به صورت مستقل استفاده کرد:
automationProtocol
تعریف پروتکلی که می خواهید برای اتوماسیون مرورگر خود استفاده کنید. در حال حاضر فقط webdriver
و devtools
پشتیبانی می شوند، زیرا اینها فناوری های اصلی اتوماسیون مرورگر موجود هستند.
اگر میخواهید مرورگر را با استفاده از devtools
خودکار کنید، مطمئن شوید که بسته NPM را نصب کردهاید ($ npm install --save-dev devtools
).
Type: String
Default: webdriver
baseUrl
با تنظیم یک URL پایه، فراخوانی دستور های url
را کوتاه کنید.
- اگر پارامتر
url
شما با/
شروع می شود،baseUrl
به قبل اضافه می شود (به جز مسیرbaseUrl
، اگر مسیری وجود داشته باشد دارد). - اگر پارامتر
url
بدون شماتیک یا/
(مثلsome/path
) شروع می شود، سپسbaseUrl
کامل مستقیما اضافه می شود.
Type: String
Default: null
waitforTimeout
مهلت زمانی پیشفرض برای همه دستورات waitFor*
. (به کوچک بودن حرف f
در نام گزینه توجه کنید.) این مهلت فقط بر دستوراتی که با waitFor*
شروع می شوند و در زمان انتظار پیش فرض آنها تأثیر می گذارد.
برای افزایش زمان برای یک تست، لطفاً به اسناد فریمورک مراجعه کنید.
Type: Number
Default: 3000
waitforInterval
فاصله پیشفرض برای همه دستورات waitFor*
برای بررسی اینکه آیا وضعیت مور د انتظار (مثلاً visibility) تغییر کرده است یا خیر.
Type: Number
Default: 500
region
If running on Sauce Labs, you can choose to run tests between different data centers: US or EU. برای تغییر منطقه خود به اتحادیه اروپا، region: 'eu'
را به پیکربندی خود اضافه کنید.
توجه: این فقط در صورتی تأثیر می گذارد که user
و key
را ارائه دهید که به حساب Sauce Labs شما متصل شده باشند.
Type: String
Default: us
(فقط برای vm و یا em/شبیه سازها)
Testrunner Options
گزینههای زیر (از جمله موارد ذکر شده در بالا) فقط برای اجرای WebdriverIO با تستکننده WDIO تعریف شدهاند:
specs
تعریف spec ها برای اجرای تست. یک الگوی glob را برای مطابقت با چندین فایل به صورت یکباره مشخص کنید، یا یک glob یا مجموعه ای از مسیرها را در یک آرایه جمع کنید تا آنها را در یک worker process اجرا کنید. All paths are seen as relative from the config file path.
Type: (String | String[])[]
Default: []
exclude
مستثنی کردن spec ها برای اجرای تست. همه مسیرها از مسیر فایل پیکربندی به صورت نسبی دیده می شوند.
Type: String[]
Default: []
suites
یک شی که مجموعه های مختلفی را توصیف می کند، که سپس می توانید با گزینه --suite
در wdio
CLI آن را مشخص کنید.
Type: Object
Default: {}
capabilities
مانند بخش capabilities
که در بالا توضیح داده شد. با این تفاوت که گزینه ای وجود دارد برای تعیین گزینه multiremote
شیء و یا چندین WebDriver Session در یک آرایه برای اجرای موازی.
میتوانید همان قابلیتهای خاص سازنده و مرورگر را که در بالا توضیح داده شده است، اعمال کنید.
Type: Object
|Object[]
Default: [{ maxInstances: 5, browserName: 'firefox' }]
maxInstances
حداکثر تعداد کل worker ها در حال اجرا موازی.
توجه: ممکن است عددی به زیادی 100
باشد، زمانی که تست ها بر روی برخی از فروشندگان خارجی مانند دستگاه های Sauce Labs انجام می شود. در آنجا، تست ها بر روی یک ماشین واحد آزمایش نمی شوند، بلکه روی چندین ماشین مجازی تست می شوند. اگر قرار است آزمایشها روی یک ماشین توسعه محلی اجرا شوند، از عددی استفاده کنید که معقولتر است، مانند 4
، 3
، یا 5
. اساساً، این تعداد مرورگرهایی است که همزمان راهاندازی میشوند و آزمایشهای شما را همزمان اجرا میکنند، بنابراین بستگی به میزان رم دستگاه شما و تعداد برنامههای دیگر در حال اجرا در دستگاه شما دارد.
Type: Number
Default: 100
maxInstancesPerCapability
حداکثر تعداد کل worker ها در حال اجرا موازی در هر capability.
Type: Number
Default: 100
injectGlobals
اضافه کردن متغییر های جهانی WebdriverIO (مثلاً browser
، $
و $$
). اگر روی false
تنظیم کنید، باید آنها را از @wdio/globals
وارد کنید، به عنوان مثال:
import { browser, $, $$, expect } from '@wdio/globals'
توجه: WebdriverIO کاری با تزریق متغیر های جهانی فریمورک ها ندارد.
Type: Boolean
Default: true
bail
اگر می خواهید اجرای تستهای شما پس از تعداد معینی از شکست متوقف شود، از bail
استفاده کنید. (به طور پیشفرض روی 0
قرار میگیرد، که همه تستها را بدون توجه به هر اتفاقی اجرا میکند.) توجه: لطفاً توجه داشته باشید که هنگام استفاده از اجرا کننده تست شخص ثالث (مانند موکا)، ممکن است به پیکربندی اضافی نیاز باشد.
Type: Number
Default: 0
(don't bail; run all tests)
specFileRetries
تعداد دفعات امتحان مجدد کل یک فایل زمانی که به طور کلی ناموفق است.
Type: Number
Default: 0
specFileRetriesDelay
چند ثانیه تأخیر بین تلاشهای مجدد فایل تست
Type: Number
Default: 0
specFileRetriesDeferred
Whether or not retried spec files should be retried immediately or deferred to the end of the queue.
Type: Boolean
Default: true
services
سرویس ها کار خاصی را به عهده می گیرند که شما نمی خواهید از آن مراقبت کنید. آنها تقریباً بدون هیچ تلاشی تنظیمات تست شما را بهبود می بخشند.
Type: String[]|Object[]
Default: []
framework
فریمورک تستی را برای استفاده توسط اجرا کننده تست WDIO تعریف میکند.
Type: String
Default: mocha
Options: mocha
| jasmine
mochaOpts, jasmineOpts and cucumberOpts
Specific framework-related options. See the framework adapter documentation on which options are available. Read more on this in Frameworks.
Type: Object
Default: { timeout: 10000 }
cucumberFeaturesWithLineNumbers
List of cucumber features with line numbers (when using cucumber framework).
Type: String[]
Default: []
reporters
List of reporters to use. A reporter can be either a string, or an array of ['reporterName', { /* reporter options */}]
where the first element is a string with the reporter name and the second element an object with reporter options.
Type: String[]|Object[]
Default: []
Example:
reporters: [
'dot',
'spec'
['junit', {
outputDir: `${__dirname}/reports`,
otherOption: 'foobar'
}]
]
reporterSyncInterval
Determines in which interval the reporter should check if they are synchronized if they report their logs asynchronously (e.g. if logs are streamed to a 3rd party vendor).
Type: Number
Default: 100
(ms)
reporterSyncTimeout
Determines the maximum time reporters have to finish uploading all their logs until an error is being thrown by the testrunner.
Type: Number
Default: 5000
(ms)
execArgv
Node arguments to specify when launching child processes.
Type: String[]
Default: null
filesToWatch
A list of glob supporting string patterns that tell the testrunner to have it additionally watch other files, e.g. application files, when running it with the --watch
flag. By default the testrunner already watches all spec files.
Type: String[]
Default: []
autoCompileOpts
Compiler options when using WebdriverIO with TypeScript or Babel.
autoCompileOpts.autoCompile
If set to true
the WDIO testrunner will automatically try to transpile the spec files.
Type: Boolean
Default: true
autoCompileOpts.tsNodeOpts
Configure how ts-node
is suppose to transpile the files.
Type: Object
Default: { transpileOnly: true }
autoCompileOpts.babelOpts
Configure how @babel/register is suppose to transpile the files.
Type: Object
Default: {}
Hooks
The WDIO testrunner allows you to set hooks to be triggered at specific times of the test lifecycle. This allows custom actions (e.g. take screenshot if a test fails).
Every hook has as parameter specific information about the lifecycle (e.g. information about the test suite or test). Read more about all hook properties in our example config.
Note: Some hooks (onPrepare
, onWorkerStart
, onWorkerEnd
and onComplete
) are executed in a different process and therefore can not share any global data with the other hooks that live in the worker process.
onPrepare
Gets executed once before all workers get launched.
Parameters:
config
(object
): WebdriverIO configuration objectparam
(object[]
): list of capabilities details
onWorkerStart
Gets executed before a worker process is spawned and can be used to initialize specific service for that worker as well as modify runtime environments in an async fashion.
Parameters:
cid
(string
): capability id (e.g 0-0)caps
(object
): containing capabilities for session that will be spawn in the workerspecs
(string[]
): specs to be run in the worker processargs
(object
): object that will be merged with the main configuration once worker is initializedexecArgv
(string[]
): list of string arguments passed to the worker process
onWorkerEnd
Gets executed just after a worker process has exited.
Parameters:
cid
(string
): capability id (e.g 0-0)exitCode
(number
): 0 - success, 1 - failspecs
(string[]
): specs to be run in the worker processretries
(number
): number of spec level retries used as defined in "Add retries on a per-specfile basis"
beforeSession
Gets executed just before initializing the webdriver session and test framework. It allows you to manipulate configurations depending on the capability or spec.
Parameters:
config
(object
): WebdriverIO configuration objectcaps
(object
): containing capabilities for session that will be spawn in the workerspecs
(string[]
): specs to be run in the worker process
before
Gets executed before test execution begins. At this point you can access to all global variables like browser
. It is the perfect place to define custom commands.
Parameters:
caps
(object
): containing capabilities for session that will be spawn in the workerspecs
(string[]
): specs to be run in the worker processbrowser
(object
): instance of created browser/device session
beforeSuite
Hook that gets executed before the suite starts (in Mocha/Jasmine only)
Parameters:
suite
(object
): suite details
beforeHook
Hook that gets executed before a hook within the suite starts (e.g. runs before calling beforeEach in Mocha)
Parameters:
test
(object
): test detailscontext
(object
): test context (represents World object in Cucumber)
afterHook
Hook that gets executed after a hook within the suite ends (e.g. runs after calling afterEach in Mocha)
Parameters:
test
(object
): test detailscontext
(object
): test context (represents World object in Cucumber)result
(object
): hook result (containserror
,result
,duration
,passed
,retries
properties)
beforeTest
Function to be executed before a test (in Mocha/Jasmine only).
Parameters:
test
(object
): test detailscontext
(object
): scope object the test was executed with
beforeCommand
Runs before a WebdriverIO command gets executed.
Parameters:
commandName
(string
): command nameargs
(*
): arguments that command would receive
afterCommand
Runs after a WebdriverIO command gets executed.
Parameters:
commandName
(string
): command nameargs
(*
): arguments that command would receiveresult
(number
): 0 - command success, 1 - command errorerror
(Error
): error object if any
afterTest
Function to be executed after a test (in Mocha/Jasmine) ends.
Parameters:
test
(object
): test detailscontext
(object
): scope object the test was executed withresult.error
(Error
): error object in case the test fails, otherwiseundefined
result.result
(Any
): return object of test functionresult.duration
(Number
): duration of testresult.passed
(Boolean
): true if test has passed, otherwise falseresult.retries
(Object
): information about single test related retries as defined for Mocha and Jasmine as well as Cucumber, e.g.{ attempts: 0, limit: 0 }
, seeresult
(object
): hook result (containserror
,result
,duration
,passed
,retries
properties)
afterSuite
Hook that gets executed after the suite has ended (in Mocha/Jasmine only)
Parameters:
suite
(object
): suite details
after
Gets executed after all tests are done. You still have access to all global variables from the test.
Parameters:
result
(number
): 0 - test pass, 1 - test failcaps
(object
): containing capabilities for session that will be spawn in the workerspecs
(string[]
): specs to be run in the worker process
afterSession
Gets executed right after terminating the webdriver session.
Parameters:
config
(object
): WebdriverIO configuration objectcaps
(object
): containing capabilities for session that will be spawn in the workerspecs
(string[]
): specs to be run in the worker process
onComplete
Gets executed after all workers got shut down and the process is about to exit. An error thrown in the onComplete hook will result in the test run failing.
Parameters:
exitCode
(number
): 0 - success, 1 - failconfig
(object
): WebdriverIO configuration objectcaps
(object
): containing capabilities for session that will be spawn in the workerresult
(object
): results object containing test results
onReload
Gets executed when a refresh happens.
Parameters:
oldSessionId
(string
): session ID of the old sessionnewSessionId
(string
): session ID of the new session
beforeFeature
Runs before a Cucumber Feature.
Parameters:
uri
(string
): path to feature filefeature
(GherkinDocument.IFeature
): Cucumber feature object
afterFeature
Runs after a Cucumber Feature.
Parameters:
uri
(string
): path to feature filefeature
(GherkinDocument.IFeature
): Cucumber feature object
beforeScenario
Runs before a Cucumber Scenario.
Parameters:
world
(ITestCaseHookParameter
): world object containing information on pickle and test stepcontext
(object
): Cucumber World object
afterScenario
Runs after a Cucumber Scenario.
Parameters:
world
(ITestCaseHookParameter
): world object containing information on pickle and test stepresult
(object
): results object containing scenario resultsresult.passed
(boolean
): true if scenario has passedresult.error
(string
): error stack if scenario failedresult.duration
(number
): duration of scenario in millisecondscontext
(object
): Cucumber World object
beforeStep
Runs before a Cucumber Step.
Parameters:
step
(Pickle.IPickleStep
): Cucumber step objectscenario
(IPickle
): Cucumber scenario objectcontext
(object
): Cucumber World object
afterStep
Runs after a Cucumber Step.
Parameters:
step
(Pickle.IPickleStep
): Cucumber step objectscenario
(IPickle
): Cucumber scenario objectresult
: (object
): results object containing step resultsresult.passed
(boolean
): true if scenario has passedresult.error
(string
): error stack if scenario failedresult.duration
(number
): duration of scenario in millisecondscontext
(object
): Cucumber World object
beforeAssertion
Hook that gets executed before a WebdriverIO assertion happens.
Parameters:
params
: assertion informationparams.matcherName
(string
): name of the matcher (e.g.toHaveTitle
)params.expectedValue
: value that is passed into the matcherparams.options
: assertion options
afterAssertion
Hook that gets executed after a WebdriverIO assertion happened.
Parameters:
params
: assertion informationparams.matcherName
(string
): name of the matcher (e.g.toHaveTitle
)params.expectedValue
: value that is passed into the matcherparams.options
: assertion optionsparams.result
: assertion results