WDIO Cucumber Framework Adapter===============================> A WebdriverIO plugin. Adapter for CucumberJS v5 testing framework.## InstallationThe easiest way is to keep `@wdio/cucumber-framework` as a devDependency in your `package.json`, via:```shnpm install @wdio/cucumber-framework --save-dev```Instructions on how to install `WebdriverIO` can be found [here.](https://webdriver.io/docs/gettingstarted.html)## ConfigurationFollowing code shows the default wdio test runner configuration...```js// wdio.conf.jsmodule.exports = {// ...framework: 'cucumber',cucumberOpts: {timeout: 10000}// ...};```## `cucumberOpts` Options### backtraceShow full backtrace for errors.Type: `Boolean`<br />Default: `false`### requireModuleRequire modules prior to requiring any support files.Type: `String[]`<br />Default: `[]`<br />Example: `['@babel/register']` or `[['@babel/register', { rootMode: 'upward', ignore: ['node_modules'] }]]`### failFastAbort the run on first failure.Type: `Boolean`<br />Default: `false`### nameOnly execute the scenarios with name matching the expression (repeatable).Type: `REGEXP[]`<br />Default: `[]`### requireRequire files containing your step definitions before executing features. You can also specify a glob to your step definitions.Type: `String[]`<br />Default: `[]`<br />Example: `[path.join(__dirname, 'step-definitions', 'my-steps.js')]`### importPaths to where your support code is, for ESM.Type: `String[]`<br />Default: `[]`<br />Example: `[path.join(__dirname, 'step-definitions', 'my-steps.js')]`### strictFail if there are any undefined or pending stepsType: `Boolean`<br />Default: `false`### tagsOnly execute the features or scenarios with tags matching the expression. Note that untaggedfeatures will still spawn a Selenium session (see issue [webdriverio/webdriverio#1247](https://github.com/webdriverio/webdriverio/issues/1247)).Please see the [Cucumber documentation](https://docs.cucumber.io/cucumber/api/#tag-expressions) for more details.If passing as a command-line argument, compound expressions may need to be enclosed in three sets of double quotes if WebdriverIO is invoked using `npx` on Windows.E.g.: `npx wdio wdio.config.js --cucumberOpts.tags """@Smoke and not @Pending"""`Type: `String`<br />Default: ``### timeoutTimeout in milliseconds for step definitions.Type: `Number`<br />Default: `30000`### retrySpecify the number of times to retry failing test cases.Type: `Number`<br />Default: `0`### retryTagFilterOnly retries the features or scenarios with tags matching the expression (repeatable). This option requires '--retry' to be specified.Type: `RegExp`### languageDefault language for your feature filesType: `String`<br />Default: `en`### orderRun tests in defined / random orderType: `String`<br />Default: `defined`### formatName and output file path of formatter to use.WebdriverIO primarily supports only the [Formatters](https://github.com/cucumber/cucumber-js/blob/main/docs/formatters.md) that writes output to a file.Type: `string[]`<br />### formatOptionsOptions to be provided to formattersType: `object`<br />### tagsInTitleAdd cucumber tags to feature or scenario nameType: `Boolean`<br />Default: `false`***Please note that this is a @wdio/cucumber-framework specific option and not recognized by cucumber-js itself***<br/>### ignoreUndefinedDefinitionsTreat undefined definitions as warnings.Type: `Boolean`<br />Default: `false`***Please note that this is a @wdio/cucumber-framework specific option and not recognized by cucumber-js itself***<br/>### failAmbiguousDefinitionsTreat ambiguous definitions as errors.Type: `Boolean`<br />Default: `false`***Please note that this is a @wdio/cucumber-framework specific option and not recognized by cucumber-js itself***<br/>### tagExpressionOnly execute the features or scenarios with tags matching the expression. Note that untaggedfeatures will still spawn a Selenium session (see issue [webdriverio/webdriverio#1247](https://github.com/webdriverio/webdriverio/issues/1247)).Please see the [Cucumber documentation](https://docs.cucumber.io/cucumber/api/#tag-expressions) for more details.If passing as a command-line argument, compound expressions may need to be enclosed in three sets of double quotes if WebdriverIO is invoked using `npx` on Windows.E.g.: `npx wdio wdio.config.js --cucumberOpts.tagExpression """@Smoke and not @Pending"""`Type: `String`<br />Default: ``***Please note that this option would be deprecated in future. Use [`tags`](#tags) config property instead***### profileSpecify the profile to use.Type: `string[]`<br />Default: `[]`***Kindly take note that only specific values (worldParameters, name, retryTagFilter) are supported within profiles, as `cucumberOpts` takes precedence. Additionally, when using a profile, make sure that the mentioned values are not declared within `cucumberOpts`.***## Publishing ReportCucumber provides a feature to publish your test run reports to `https://reports.cucumber.io/`, which can be controlled either by setting the `publish` flag in `cucumberOpts` or by configuring the `CUCUMBER_PUBLISH_TOKEN` environment variable. However, when you use `WebdriverIO` for test execution, there's a limitation with this approach. It updates the reports separately for each feature file, making it difficult to view a consolidated report.To overcome this limitation, we've introduced a promise-based method called `publishCucumberReport` within `@wdio/cucumber-framework`. This method should be called in the `onComplete` hook, which is the optimal place to invoke it. `publishCucumberReport` requires the input of the report directory where cucumber message reports are stored.You can generate `cucumber message` reports by configuring the `format` option in your `cucumberOpts`. It's highly recommended to provide a dynamic file name within the `cucumber message` format option to prevent overwriting reports and ensure that each test run is accurately recorded.Before using this function, make sure to set the following environment variables:- CUCUMBER_PUBLISH_REPORT_URL: The URL where you want to publish the Cucumber report. If not provided, the default URL 'https://messages.cucumber.io/api/reports' will be used.- CUCUMBER_PUBLISH_REPORT_TOKEN: The authorization token required to publish the report. If this token is not set, the function will exit without publishing the report.Here's an example of the necessary configurations and code samples for implementation:```javascriptimport { v4 as uuidv4 } from 'uuid'import { publishCucumberReport } from '@wdio/cucumber-framework';export const config = {// ... Other Configuration OptionscucumberOpts: {// ... Cucumber Options Configurationformat: [['message', `./reports/${uuidv4()}.ndjson`],['json', './reports/test-report.json']]},async onComplete() {await publishCucumberReport('./reports');}}```Please note that `./reports/` is the directory where `cucumber message` reports will be stored.----For more information on WebdriverIO see the [homepage](http://webdriver.io).