You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WebDriverIO+Cucumber时测试场景被跳过的问题求助

WebDriverIO + Cucumber 测试步骤被跳过无报错的排查方案

问题描述

首次使用WebDriverIO结合Cucumber进行自动化测试,运行测试时部分场景测试步骤被跳过,且无任何报错信息,不清楚是否缺少配置,寻求解决方法。

Step Definitions 文件

const { Given, When, Then } = require('@wdio/cucumber-framework');

const MainPage = require('../pageobjects/main-page.js');
const ElementsPage = require('../pageobjects/elements-page.js');
const ButtonsPage = require('../pageobjects/buttons-page.js')


Given('I am on the Main Page', async () => {
    await MainPage.open(`https://demoqa.com/`)
});

When('I click Elements Button', async() => {
    await MainPage.clickElements()
});

Then('I successfully go to <string> Page', async(namePage) => {
    await ElementsPage.verifyClickButton(namePage)
});

When('I click Button on Navbar', async() => {
    await ElementsPage.clickBtnButtons()
});

Then('I successfully open {string} Page', async(buttons) => {
    await ButtonsPage.verifyNamePage(buttons)
});

When('I click on Click Me Button', async() => {
    await ButtonsPage.clickBtnClickMe()
});

Then('I successfully click on Click Me Button', async() => {
    await ButtonsPage.verifyClickMeButton()
});

When('I click on Right Click Me Button', async() => {
    await ButtonsPage.clickBtnRightClickMe()
});

Then('I successfully click on Right Click Me Button', async() => {
    await ButtonsPage.verifyRightClickMeButton()
});

When('I click on Double Click Me Button', async() => {
    await ButtonsPage.clickBtnDoubleClickMe()
});

Then('I successfully click on Double Click Me Button', async() => {
    await ButtonsPage.verifyDoubleClickMeButton()
});

控制台日志

"spec" Reporter:
------------------------------------------------------------------
[chrome 108.0.5359.125 windows #0-0] Running: chrome (v108.0.5359.125) on windows
[chrome 108.0.5359.125 windows #0-0] Session ID: 86891a0c4203314f998ad2a06ab208a6
[chrome 108.0.5359.125 windows #0-0]
[chrome 108.0.5359.125 windows #0-0] » \features\scenarios\buttons.feature
[chrome 108.0.5359.125 windows #0-0] Latihan Automation di demoqa.com
[chrome 108.0.5359.125 windows #0-0] Successfully click 3 Buttons in Elements Page
[chrome 108.0.5359.125 windows #0-0]    ✓ Given I am on the Main Page
[chrome 108.0.5359.125 windows #0-0]    ✓ When I click Elements Button
[chrome 108.0.5359.125 windows #0-0]    ✓ Then I successfully go to "Elements" Page
[chrome 108.0.5359.125 windows #0-0]    ✓ When I click Button on Navbar
[chrome 108.0.5359.125 windows #0-0]    - Then I successfully open "Buttons" Page
[chrome 108.0.5359.125 windows #0-0]    - When I click on Click Me Button
[chrome 108.0.5359.125 windows #0-0]    - Then I successfully click on Click Me Button
[chrome 108.0.5359.125 windows #0-0]    - When I click on Right Click Me Button
[chrome 108.0.5359.125 windows #0-0]    - Then I successfully click on Right Click Me Button
[chrome 108.0.5359.125 windows #0-0]    - Then I successfully click on Double Click Me Button
[chrome 108.0.5359.125 windows #0-0]
[chrome 108.0.5359.125 windows #0-0] 4 passing (37.2s)
[chrome 108.0.5359.125 windows #0-0] 7 skipped


Spec Files:      0 passed, 1 failed, 1 total (100% completed) in 00:00:42

2022-12-20T08:58:07.664Z INFO @wdio/local-runner: Shutting down spawned worker
2022-12-20T08:58:07.927Z INFO @wdio/local-runner: Waiting for 0 to shut down gracefully
2022-12-20T08:58:07.929Z INFO @wdio/local-runner: shutting down

排查与解决方法

1. 修复Step Definition的参数占位符

代码中存在语法错误:

Then('I successfully go to <string> Page', async(namePage) => {
    await ElementsPage.verifyClickButton(namePage)
});

Cucumber标准的字符串参数占位符是{string},而非<string>。虽然该步骤显示通过,但此语法错误会打乱后续步骤的匹配逻辑,导致步骤被跳过。将<string>改为{string},确保与Feature文件中的步骤(如Then I successfully go to "Elements" Page)正确匹配。

2. 检查Feature文件语法

确保Feature文件中所有步骤缩进一致,无拼写或格式错误。Cucumber无法正确解析Feature文件时,会跳过未匹配的后续步骤。

3. 增加调试手段

  • 在Page Object方法(如ElementsPage.clickBtnButtons()、ButtonsPage.verifyNamePage())中添加console.log,打印执行状态,确认方法是否被调用。
  • 在关键步骤中加入await browser.debug(),暂停测试后手动检查页面状态,确认元素是否存在、是否可交互。

4. 完善Page Object的异常处理

避免方法静默失败:

  • 给异步方法添加try-catch块,捕获并打印错误信息。
  • 使用WebDriverIO的expect语法编写断言,确保断言失败时抛出明确错误,例如:
    async verifyNamePage(pageName) {
        await expect(await this.pageTitle.getText()).toBe(pageName);
    }
    

5. 核对WebDriverIO配置

检查wdio.conf.js中的Cucumber相关配置:

  • 确认require字段正确引入了step definitions文件。
  • 检查reporter配置,确保未过滤错误信息。

内容的提问来源于stack exchange,提问作者Rolan Fransiskus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:50:21