【发布时间】:2018-04-06 11:22:56
【问题描述】:
我正在使用 WebDriverIO 练习 CucumberJS 并测试 http://webdriver.io。我有以下功能文件和步骤定义,这工作正常。
功能文件
Feature: Application Title
Page title should be context sensitive
Scenario: Page loads with correct title
When Page "/" is loaded
Then Page title is "WebdriverIO - WebDriver bindings for Node.js"
步骤定义
const { Given, When, Then } = require('cucumber');
const assert = require('assert');
const webdriverio = require('webdriverio');
When(/^Page \"(.*)\" is loaded$/, (page) => {
browser.url(page);
});
Then(/^Page title is \"(.*)\"$/, (title) => {
assert(browser.title(), title);
});
但是当我将 Scenario 更改为 Scenario Outline 时,它停止工作并出现错误。以下是我在功能文件中所做的更改。
功能文件(更新)
Feature: Application Title
Page title should be context sensitive
Scenario Outline: Page loads with correct title
When Page "<url>" is loaded
Then Page title is "<title>"
Examples:
| url | title |
| / | WebdriverIO - WebDriver bindings for Node.js |
| /guide.html | WebdriverIO - Developer Guide |
控制台
D:\playground\webdriverio-cucumberjs>npm run e2e
> webdriverio-cucumberjs@1.0.0 e2e D:\playground\webdriverio-cucumberjs
> wdio
[13:11:45] COMMAND POST "/wd/hub/session"
[13:11:45] DATA {"desiredCapabilities":{"javascriptEnabled":true,"locationContextEnabled":true,"handlesAlerts":true,"rotatable":true,"maxInstances":5,"browserName":"chrome","loggingPrefs":{"browser":"ALL","driver":"ALL"},"requestOrigins":{"url":"http://webdriver.io","version":"4.12.0","name":"webdriverio"}}}
[13:11:49] INFO SET SESSION ID d206c5af3fcb467668d5f1d21135bd5a
[13:11:49] RESULT {"applicationCacheEnabled":false,"rotatable":false,"mobileEmulationEnabled":false,"networkConnectionEnabled":false,"chrome":{"chromedriverVersion":"2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91)","userDataDir":"C:\\Users\\BilalM\\AppData\\Local\\Temp\\scoped_dir2072_18134"},"takesHeapSnapshot":true,"pageLoadStrategy":"normal","databaseEnabled":false,"handlesAlerts":true,"hasTouchScreen":false,"version":"65.0.3325.181","platform":"Windows NT","browserConnectionEnabled":false,"nativeEvents":true,"acceptSslCerts":false,"acceptInsecureCerts":false,"locationContextEnabled":true,"webStorageEnabled":true,"browserName":"chrome","takesScreenshot":true,"javascriptEnabled":true,"cssSelectorsEnabled":true,"setWindowRect":true,"unexpectedAlertBehaviour":""}
ERROR: Cannot read property 'steps' of undefined
chrome
Type at CucumberEventListener.onTestStepPrepared (D:\playground\webdriverio-cucumberjs\node_modules\wdio-cucumber-framework\build\cucumberEventListener.js:186:44)
at emitOne (events.js:101:20)
at EventEmitter.emit (events.js:188:7)
at TestCaseRunner.emit (D:\playground\webdriverio-cucumberjs\node_modules\cucumber\lib\runtime\test_case_runner.js:94:29)
at TestCaseRunner.emitPrepared (D:\playground\webdriverio-cucumberjs\node_modules\cucumber\lib\runtime\test_case_runner.js:127:12)
at TestCaseRunner.<anonymous> (D:\playground\webdriverio-cucumberjs\node_modules\cucumber\lib\runtime\test_case_runner.js:219:14)
at next (native)
at tryCatcher (D:\playground\webdriverio-cucumberjs\node_modules\bluebird\js\release\util.js:16:23)
at PromiseSpawn._promiseFulfilled (D:\playground\webdriverio-cucumberjs\node_modules\bluebird\js\release\generators.js:97:49)
at TestCaseRunner.<anonymous> (D:\playground\webdriverio-cucumberjs\node_modules\bluebird\js\release\generators.js:201:15)
at TestCaseRunner.run (D:\playground\webdriverio-cucumberjs\node_modules\cucumber\lib\runtime\test_case_runner.js:236:22)
at Runtime.<anonymous> (D:\playground\webdriverio-cucumberjs\node_modules\cucumber\lib\runtime\index.js:113:51)
at next (native)
at tryCatcher (D:\playground\webdriverio-cucumberjs\node_modules\bluebird\js\release\util.js:16:23)
at PromiseSpawn._promiseFulfilled (D:\playground\webdriverio-cucumberjs\node_modules\bluebird\js\release\generators.js:97:49)
at Runtime.<anonymous> (D:\playground\webdriverio-cucumberjs\node_modules\bluebird\js\release\generators.js:201:15)
[13:11:49] COMMAND DELETE "/wd/hub/session/d206c5af3fcb467668d5f1d21135bd5a"
[13:11:49] DATA {}
------------------------------------------------------------------
[chrome #0-0] Session ID: d206c5af3fcb467668d5f1d21135bd5a
[chrome #0-0] Spec: D:\playground\webdriverio-cucumberjs\e2e\features\app-titles.feature
[chrome #0-0] Running: chrome
[chrome #0-0]
[chrome #0-0] Application Title
[chrome #0-0]
[chrome #0-0] Page loads with correct title
[chrome #0-0]
[chrome #0-0] Page loads with correct title
[chrome #0-0]
[chrome #0-0]
[chrome #0-0]
Cannot write xunit report: empty or invalid 'outputDir'.
Cannot write json report: empty or invalid 'outputDir'.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! webdriverio-cucumberjs@1.0.0 e2e: `wdio`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the webdriverio-cucumberjs@1.0.0 e2e script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\#$#$#$#$\AppData\Roaming\npm-cache\_logs\2018-04-06T11_11_49_985Z-debug.log
代码在 GitHub 上可用:https://github.com/mabilalmirza/webdriverio-cucumberjs。
我做错了什么还是这与 CucumberJS 有关?
【问题讨论】:
-
删除场景最后一步和示例表之间的空格,然后重试。
-
@ZohaibJawaid,你读过控制台输出吗? - 这似乎是您的报告文件夹不存在 xunit 和 json 的问题。您将报告和屏幕截图放入的文件夹应该在运行测试之前存在 - 它不会在运行时执行。 - 或者至少,这是我的经验。它试图向报告发出一些东西,但无法完成,因为该目录不存在
-
你在哪里指定你的'outputDit'?
-
我根本没有指定
outputDir。我使用 WebDriverIO cli 设置它。但是这个问题与报告无关,因为即使我删除了 xunit 和 junit 报告器,它仍然会失败并出现同样的错误,即Cannot read property 'steps' of undefined
标签: cucumber cucumberjs