- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 Selenium 和 PhantomJS 来使用 CucumberJS。我已经成功built a World object using this StackOverflow answer作为指导。
所以现在我正在测试一些基本的步骤定义,但对如何在步骤结束时执行回调感到有些困惑。这很好用:
module.exports = function () {
this.World = require("../support/world.js").World;
this.Given(/^I am visiting Google$/, function (callback) {
this.driver.get('http://www.google.com')
.then(function() {
callback();
});
});
};
驱动程序访问 Google.com,并且直到加载请求的文档后才会触发回调。但我发现这种语法有点啰嗦,所以我想也许我可以在第一个 promise 之后直接将 callback
传递给 then()
,如下所示:
module.exports = function () {
this.World = require("../support/world.js").World;
this.Given(/^I am visiting Google$/, function (callback) {
this.driver.get('http://www.google.com')
.then(callback);
});
};
然而,这失败了,并且似乎是 console.log
的回调
。这是输出:
Scenario: Googling # features/theGoogle.feature:6
Given I am visiting Google # features/theGoogle.feature:7
[object Object]
(::) failed steps (::)
[object Object]
这是怎么回事?我期望 callback
可以简单地传递给 then()
函数并在 promise 完成后执行。为什么将它包装在匿名函数中可以使其工作?
最佳答案
发生的情况是使用 driver.get().then
的参数调用 callback
。
换句话说,会发生以下情况:
this.driver.get('http://www.google.com')
.then(function(result) {
callback(result);
});
问题是,如果使用某些内容作为第一个参数来调用回调,则 cucumber 的回调将被视为失败,因为它应该是一个错误,如 callback(new Error('Something goneError'))
.
对我来说,这足以完全禁止使用回调。 Selenium 是完全面向的 promise ,只有当你想让你的生活变得更轻松时,你才应该遵守 promise 。这是完美的,因为 cucumber.js 接受返回的 promise 而不是回调,所以这是最好的方法:
// Be sure to omit the last parameter of the function, usually "callback"
this.Given(/^I am visiting Google$/, function () {
return this.driver.get('http://www.google.com');
});
如果 Promise 最终被拒绝,则该步骤将失败;如果 Promise 已履行,则继续执行下一步。但在这两种情况下,cucumber 都会等待最后一个 Promise,因此您所需要做的就是始终返回任何步骤的最后一个 Promise,因为 Selenium 只会在前面的 Promise 解决之后才会解析/拒绝最后一个 Promise。一切看起来都好多了不是吗?
关于javascript - 使用 Selenium 步骤定义从 CucumberJS 执行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31976850/
我想阻止 cucumber 一直运行失败的测试,因为这会浪费我们持续集成的时间,因为我们需要快速反馈。 我正在使用带有 Protractor 的 cucumber cucumberJs 的 javas
使用 cypress-cucumber-preprocessor 1.5.1 运行 Cypress 3.1.1。我需要将一些静态数据从一个步骤传递到另一个步骤(在同一场景/测试中)。我可以使用别名来做
每当在远程服务器上运行时出现步骤失败时,我想捕获失败的步骤,然后继续运行剩余的场景。然后,捕获的步骤将包含在文件中以用于报告目的。这有可能吗?我在其他地方看到的所有回复都只是说您应该在继续之前修复测试
我正在使用 WebDriverIO 练习 CucumberJS 并进行测试 http://webdriver.io .我有以下功能文件和步骤定义,这工作正常。 功能文件 Feature: Applic
使用 CucumberJS是否有选项或配置可以在执行测试后捕获错误屏幕截图? 最佳答案 您可以通过cucumber After钩子(Hook)进行截图,如下所示: // supports/take-s
我正在使用 javascript for Cucumber javascript 进行自动化。我关心的是我可以自动为步骤定义生成 .js 文件吗?到目前为止,我正在从命令行窗口复制粘贴它们(步骤),所
我有以下功能文件: Feature: Color feature @test Scenario Outline: Test color Given the first
成功完成场景后,cucumberjs 无限期地挂起。我怎样才能停止这种情况? 我在 npm/nodejs 上运行了一个 cucumberjs。 package.json: { "name": "f
我正在尝试用 cucumberjs 做一个相对简单的场景。也就是说,在场景失败后,我想重新启动浏览器,以便它回到下一个场景的初始状态。这是我的尝试 this.After({timeout: 30 *
任务: 使用 selenium、webdriver 和 cucumberjs 执行自动验收测试。 找到一个失败的验收测试场景并截取页面 将其保存为 go 管道中的工件。 这是我今天的任务。我已经通过编
这个问题可能是重复的,但我并不像预期的那样,所以再次提出。 我正在我们的项目中创建一个新的 Protractor 框架。我的应用程序有登录屏幕,我需要为功能中的每个案例使用不同的用户详细信息登录。我在
使用 protractor-cucumber-framework 如何修改将在运行时输出步骤的 CucumberJs 的控制台输出。 功能示例场景: Given that Home Page is D
我正在尝试验证 cucumberjs/puppeteer 中不存在的选择器。如何使用 cucumber-assert 来使用 throws 断言? 我致力于测试自动化以支持测试 ember 前端应用程
我正在将 TestCafe 与 Cucumber.js 一起使用,但我不知道如何重新加载页面。 Testcafe 文档说使用 .eval(() => location.reload(true))这给了
所以我已经实现了一个 Cucumberjs 数据表,但是我认为我做得不对..这是我所拥有的 this.And(/^If I click the row "([^"]*)" then I should
我正在尝试将多个格式化程序传递到我的 cucumberjs cli 运行程序中,我希望两者都打印到控制台,并生成一个 json 文件。 我使用的是cucumberjs v0.8.0 我尝试过的事情:
我向我的 cucumberOpts 添加了快速失败功能,如下所示: cucumberOpts: { require: [ conf.paths.e2e + '/utilities/hooks.
鉴于自动化 UI 测试有时会由于不稳定而失败,因此仅重新运行失败的测试的能力在 Protractor 等框架中变得非常有用。 不幸的是,截至 2016 年 9 月 13 日,无法使用 Protract
我正在实现一个 CucumberJS 场景,它在两个不同的步骤定义文件中使用多个步骤。第一步在世界上设置一些变量,其他步骤定义文件中的步骤必须使用这些变量。 变量设置正确,但是当其他文件上的步骤试图读
如何将 jasmine 与 cucumberjs 一起使用? 我尝试了来自 https://stackoverflow.com/a/30763260/5453732 的解决方案 但我总是遇到这个错误:
我是一名优秀的程序员,十分优秀!