gpt4 book ai didi

javascript - 使用 Selenium 步骤定义从 CucumberJS 执行回调

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:01 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com