对于延长器e2e测试..执行方法不稳定:点击一个按钮三次



下面的方法处理事件。

exports.movingTowardsNextInstanceStage = () => {
const nextInstance = manipulations.getDomObject('instance-tab-phases-buttons-next-instance', 'id'); // Next Approval Stage Button
nextInstance.getText().then((text) => {
if (text.includes('WEITERLEITEN AN TL')) {
browser.wait(until.elementToBeClickable(nextInstance), TIMEOUT, 'taking too long to be clickable');
nextInstance.click();
}
}).catch((err) => {
console.error(err);
});

nextInstance.getText().then((text) => {
if (text.includes('WEITERLEITEN AN LSM')) {
browser.wait(until.elementToBeClickable(nextInstance), TIMEOUT, 'taking too long to be clickable');
nextInstance.click();
}
}).catch((err) => {
console.error(err);
});
nextInstance.getText().then((text) => {
if (text.includes('FREIGABE')) {
browser.wait(until.elementToBeClickable(nextInstance), TIMEOUT, 'taking too long to be clickable');
nextInstance.click();
}
}).catch((err) => {
console.error(err);
});
};

背景信息:有一个按钮(nextInstance(必须单击三次才能激活另一个按钮。简而言之。。。每次按下按钮后,都会出现一个加载程序,一些组件会被激活和停用,依此类推,也需要大约2-3秒的时间才能再次点击按钮。在这三秒钟内,按钮被禁用。

我试过其他方法点击一个按钮x次。使用Array.forEach,使用具有给定重复次数和延迟的setInterval,在每个事件(点击(之间设置隐式等待(这一次确实有效(。

我希望避免使用隐式等待。

我知道我还没有很好地定义上下文,但看看我的代码和我的意图,有什么方法可以改进吗?

我是否正确理解,"WEITERLEITEN AN LSM"应在前一次单击("WEITER LEITEN AN TL"之后的单击(之后显示?

如果是这样的话,您的代码目前不会等待第n次点击才检查第n+1个文本,您需要的是promise链接。.catch,就像.then返回一个可以等待的新Promise一样

此外,browser.wait还会返回一个需要等待的Promise。

所以,类似于:

nextInstance.getText().then((text) => {
if (text.includes('WEITERLEITEN AN TL')) {
return browser.wait(until.elementToBeClickable(nextInstance), TIMEOUT, 'taking too long to be clickable')
.then(() => nextInstance.click());
}
}).catch((err) => {
console.error(err);
})
.then(() => nextInstance.getText()).then((text) => {
if (text.includes('WEITERLEITEN AN LSM')) {
return browser.wait(until.elementToBeClickable(nextInstance), TIMEOUT, 'taking too long to be clickable')
.then(() => nextInstance.click());
}
}).catch((err) => {
console.error(err);
});
// ...

但是,如果第n次单击的错误阻止了第n+1次单击,那么除了最后一次.catch调用之外,您还应该忽略所有调用。

您可能会考虑使用async/await。它比Promise链接更直观。

最新更新