gpt4 book ai didi

javascript - cucumber JS 超时将不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 05:29:10 25 4
gpt4 key购买 nike

使用 protractor-cucumber-framework,我试图在一个 When-step 中点击一个按钮一百次。但是,这样做会导致超时,默认超时值为 5000 毫秒。我不想使用以下方法更改此默认设置:

var config = function() {
this.setDefaultTimeout(60*1000);
};

module.exports = config;

这行得通,但我宁愿像这样为该单步设置超时:

this.When(/^I click on the "([^"]*)" button$/, {timeout: 60*1000}, function(text, callback)
{
// Click the button 100 times
var button = element(by.partialButtonText('Widget'));
for(j = 0; j < i; j++) {
button.click();
}
callback();
});

根据cucumber-js readme应该工作,但仍然导致:

Error: Step timed out after 5000 milliseconds
at Timer.listOnTimeout (timer.js:92:15)

关于为什么这不起作用的任何想法?

编辑:它确实 起作用了。但是,我在错误的步骤中使用了它。调用 click() 一百次并不需要那么长时间。它在它之后的步骤中超时:

this.Then(/^a new widget is created$/, {timeout: 60 * 1000}, function(callback) {
// Check if 100 widgets are created
});

现在谁能解释为什么在 所有调用 click 的步骤中需要长时间超时?有没有更优雅的方式让 cucumber 等待按钮点击完成?

最佳答案

超时对您不起作用的原因是您的 callback() 提前触发,甚至在第一个 click() 完成之前.这是因为 click() 是异步的,并且被添加到 Protractor 的 controlFlow(它们排队等候一个接一个被触发),但是 callback( ) 不是。有几个选项可以避免这种情况。

选项#1

您应该确保 callback() 仅在 click() 返回的所有 promise 都得到满足后才会触发。

您可以收集所有返回的 promise ,并在所有 promise 都解决后调用您的 callback()。如果您不知道 controlFlow,这就是您想要执行的操作:

this.When(/^I click on the "([^"]*)" button$/, {timeout: 60*1000}, function(text, callback)
{
// Click the button 100 times
var button = element(by.partialButtonText('Widget'));
var promises = [];

for (var i = 0; i < 101; i++) {
promises.push(button.click());
}

protractor.promise.all(promises).then(callback);
});

选项#2

但是如果你像这样将 callback() 存储到 controlFlow 队列中,事情会变得容易得多:

this.When(/^I click on the "([^"]*)" button$/, {timeout: 60*1000}, function(text, callback)
{
// Click the button 100 times
var button = element(by.partialButtonText('Widget'));
for(var i = 0; i < 101; i++) {
button.click();
}

browser.controlFlow().execute(callback);
});

如您所见,在使用 Protractor 时,您应该使用它的 controlFlow 来避免编写异步(外观)代码。

关于javascript - cucumber JS 超时将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36263934/

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