【发布时间】:2014-06-25 02:58:09
【问题描述】:
任务:
- 使用 selenium、webdriver、cucumberjs 执行自动化验收测试。
- 查找失败的验收测试场景并截取页面截图
- 将其保存为 go 管道中的人工制品。
这是我今天的任务。我已经完成了所有这些工作,包括编写场景测试、selenium 设置、go 管道以及其他所需的一切。
唯一的问题是 - 我无法弄清楚如何找到失败的场景步骤并截取页面的屏幕截图。
问题详情: 我在步骤定义中放置了以下代码,该代码针对每个场景步骤运行
//file: features/setpdefinitions/common.step.js
var commonWrapper = function commonWrapper() {
this.World = require('../support/world').World;
this.Before(function (next) {
this.initBrowser(next);
});
this.After(function (next) {
this.browser.quit(next);
});
this.StepResult(function (event, callback) {
var stepResult = event.getPayloadItem('stepResult');
console.log(stepResult.isFailed());
callback();
});
};
module.exports = commonWrapper;
World 包含浏览器启动方法。
这是我正在测试的示例功能场景
Feature: Forgot Password
As a user of Booking My account
I want to reset my password
So that I can login to my account when I forget my password
Scenario: On unsuccessful entering invalid email id
Given I am on forgot password page
When I enter invalid email "invalidemail-someDomain.com"
And click submit button
Then I should see validation message "Please enter a valid email."
问题在于上下文数据。我不知何故无法将 scenario 作为第一个参数传递给 after/before 方法。我尝试了 cucumberjs 源代码中给出的代码,但未能成功。因此,我开始添加 stepResult 方法,该方法在每次完成一个步骤时运行。一种相对相似的方法。
根据文档,isFailed() 方法会根据步骤结果返回一个布尔值。但是,无论步骤失败或通过,我总是得到false。我尝试了它的alter-ego isSuccessful(),无论如何它都会返回true。
所以,
- 我可能做错了什么?
- 我如何真正将 scenario 传递给 after() 方法?
我对 TDD 比较陌生,但是到目前为止,这是一次很棒的经历。
【问题讨论】:
标签: node.js selenium selenium-webdriver mocha.js cucumberjs