按钮被启用。用户必须手动刷新页面才能看到启用的按钮。 我的目标: 检查按钮是否启用 如果按钮已启用 = 退出该功能并继续控制流程的其余部-6ren">
gpt4 book ai didi

javascript - 失败 : "callback" argument must be a function ERROR

转载 作者:行者123 更新时间:2023-11-30 20:35:47 24 4
gpt4 key购买 nike

我有一个带有按钮的页面,该按钮由后端作业控制。作业完成后 => 按钮被启用。用户必须手动刷新页面才能看到启用的按钮。

我的目标:

  1. 检查按钮是否启用
  2. 如果按钮已启用 = 退出该功能并继续控制流程的其余部分
  3. 如果按钮未启用,请等待 10 秒并刷新页面检查按钮是否已启用,等等
  4. 等待的迭代次数不要超过 10 次。如果按钮仍然不可用 - 退出函数并使测试失败

我在 JavaScript 中使用 Protractor

这是我目前所拥有的:

------------我的控制流程------

it ('waiting for button', () => {
itTopicReg.waitForBtn();
});

--------我的帮助脚本来自itTopicReg--------

proceedToQaBtn = element(by.buttonText('Proceed to Qa Environment'))
nIntervId = null



waitForBtn() {
this.nIntervId = setInterval(this.isBtnEnabled(), 10000);
};

isBtnEnabled() {
let count = 0;
if (this.proceedToQaBtn.isEnabled()) {
expect(this.proceedToQaBtn.isDisplayed()).toBe(true);
} else if (count < 10)
count++;
browser.navigate().refresh();
} else if (count >= 10) {
clearInterval(this.nIntervId);
};

我收到以下错误:

 ✗ waiting for button
- Failed: "callback" argument must be a function
at exports.setInterval (timers.js:411:11)
at ItTopicReg.waitForBtn

我是 Protractor 和 JavaScript 的新手,如果这很明显,请原谅我在这里搜索过,但没有找到干净的解决方案(喜欢 Protractor : wait for element to become invisible/hidden或者 Refreshing page until element appears - JAVA - Selenium )

最佳答案

传递给 setInterval() 的第一个参数需要是一个函数。不要调用 isBtnEnabled,只需将其作为参数传递即可:

this.nIntervId = setInterval(this.isBtnEnabled, 10000);
// NOTE: no () here ^^

作为旁注,您的启用检查:

if (this.proceedToQaBtn.isEnabled()) {

有一个问题:无论元素的状态如何,它总是计算为 true - isEnabled() 返回一个 promise,根据定义它是 truthy。如果要获取元素是否启用的实际 bool 值,请解决 promise :

this.proceedToQaBtn.isEnabled().then(function (isEnabled) {
if (isEnabled) {
// ...
}
});

此外,我认为您根本不应该使用 setInterval()。 Protractor 有一个内置机制来显式等待并定期检查页面上要满足的特定条件 - 查看 browser.wait()和一组内置的 expected conditions . elementToBeClickable 感觉它适合您的用例:

var EC = protractor.ExpectedConditions;
browser.wait(EC.elementToBeClickable(this.proceedToQaBtn), 10000);
this.proceedToQaBtn.click();

关于javascript - 失败 : "callback" argument must be a function ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49862013/

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