diff --git a/packages/wdio-cucumber-framework/src/utils.ts b/packages/wdio-cucumber-framework/src/utils.ts index 6364d617d..6dc58587e 100644 --- a/packages/wdio-cucumber-framework/src/utils.ts +++ b/packages/wdio-cucumber-framework/src/utils.ts @@ -222,7 +222,7 @@ export function generateSkipTagsFromCapabilities(capabilities: Capabilities.Reso .find((filter: WebdriverIO.Capabilities) => Object.keys(filter) .every((key: keyof WebdriverIO.Capabilities) => match((capabilities as Record)[key], filter[key] as RegExp))) if (isSkip) { - generatedTags.push(`(not ${tag.replace(/[()[\]{}^$*+?.|\\]/g, '\\$&')})`) + generatedTags.push(`(not ${tag.replace(/[(){}^$*+?.|\\]/g, '\\$&')})`) } } }) diff --git a/packages/wdio-cucumber-framework/tests/fixtures/test_skip.feature b/packages/wdio-cucumber-framework/tests/fixtures/test_skip.feature index 1f6586559..bacc3c1d6 100644 --- a/packages/wdio-cucumber-framework/tests/fixtures/test_skip.feature +++ b/packages/wdio-cucumber-framework/tests/fixtures/test_skip.feature @@ -4,7 +4,8 @@ Feature: Test Feature Given a step passes When a step passes - @skip(browserName="chrome") + @skip(browserName="chrome") + @skip(browserName=["firefox","safari"]) Scenario: Scenario #1 Given a step passes When a step passes diff --git a/tests/cucumber/test.feature b/tests/cucumber/test.feature index a8c5d7022..b6bcdb767 100644 --- a/tests/cucumber/test.feature +++ b/tests/cucumber/test.feature @@ -18,6 +18,7 @@ Feature: Example feature Then I should fail once but pass on the second run @skip(browserName="chrome") + @skip(browserName=["firefox","safari"]) Scenario: Skipped... should never be executed Then this test should fail @@ -60,4 +61,4 @@ Feature: Example feature Scenario: Supports snapshot testing Then it can take a file snapshot - And it can take an inline snapshot \ No newline at end of file + And it can take an inline snapshot diff --git a/tests/smoke.runner.js b/tests/smoke.runner.js index 46fccbb73..c061292ac 100644 --- a/tests/smoke.runner.js +++ b/tests/smoke.runner.js @@ -482,6 +482,33 @@ const cucumberFileOption = async () => { ) } +/** + * Cucumber @skip() tag + */ +const cucumberSkipTag = async () => { + for (const browserName of ['chrome', 'firefox']) { + const { skippedSpecs } = await launch( + 'cucumberTestrunner', + path.resolve(__dirname, 'helpers', 'cucumber-hooks.conf.js'), + { + capabilities: [{ browserName }], + specs: [ + path.resolve(__dirname, 'cucumber', 'test.feature'), + path.resolve(__dirname, 'cucumber', 'test-skipped.feature') + ], + cucumberOpts: { + tags: '(not @SKIPPED_TAG)', + ignoreUndefinedDefinitions: true, + retry: 1, + retryTagFilter: '@retry', + scenarioLevelReporter: true + } + } + ) + assert.strictEqual(skippedSpecs, 1) + } +} + /** * wdio test run with custom service */ @@ -1136,6 +1163,7 @@ const jasmineAfterHookArgsValidation = async () => { cucumberPendingTest, cucumberReporter, cucumberFileOption, + cucumberSkipTag, standaloneTest, mochaAsyncTestrunner, customService,