gpt4 book ai didi

javascript - Protractor 无限循环

转载 作者:行者123 更新时间:2023-11-29 10:38:36 25 4
gpt4 key购买 nike

在上一个问题中,我在点击按钮时遇到问题,直到它被禁用答案是:

var nextPage = function () {
if (element(by.css('[ng-click="vm.nextPage()"]')).isEnabled()) {
element(by.css('[ng-click="vm.nextPage()"]')).click();
nextPage(); // next page
}
else {
return; // the element is not enabled, last page
}
}

我不得不稍微改变一下,所以我的代码现在看起来像这样

 var nextPage = function() {
if (element(by.id('next')).isEnabled()) {
element(by.id('next')).click().then(function() {
browser.sleep(1000);
nextPage(); // next page
return;
});
} else {
return; // the element is not enabled, last page
}
return;
}

但现在它跳入无限递归调用,所以无法执行下一步,我怎么不能改变它,不使用 .then 函数根本不起作用。

最佳答案

问题是递归基本情况从未被满足并且它永远不存在递归。

请记住, Protractor 中的一切都是一个 promise isEnabled() 在您的情况下是一个 Unresolved promise ,它始终是“真实的”。这就是为什么无论实际 isEnabled 值如何,您总是进入下一个循环并最终获得最大递归深度错误。

显式解析 promise 以获得真正的 isEnabled bool 值:

element(by.id('next')).isEnabled().then(function (isEnabled) {
if (isEnabled) {
// ...
} else {
return; // the element is not enabled, last page
}
});

作为旁注,无耻的宣传本可以帮助更早地发现这个问题 - eslint-plugin-protractorit's rule to catch when protractor promises are used inside if conditions directly without being explicitly resolved .如果针对问题中发布的代码执行,它将输出以下内容:

$ eslint test.js
/path/to/test.js
2:5 warning Unexpected "isEnabled()" inside if condition protractor/no-promise-in-if
4:13 warning Unexpected browser.sleep() protractor/no-browser-sleep

关于javascript - Protractor 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32845830/

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