使用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
相关产品推荐
相关产品推荐

