gpt4 book ai didi

javascript - 页面对象中的 For 循环运行不正常

转载 作者:行者123 更新时间:2023-11-30 12:26:57 25 4
gpt4 key购买 nike

我正在尝试检查模态是否存在。如果模式不存在,那么它会将计时器的值放入 browser.sleep()。这将为模态的出现留出时间。我在页面对象中遇到 for 循环问题。当我运行下面的代码时,当我通过更改对象强制失败时,我没有收到 if 下的 alert 和 console.log 消息。此外,我没有收到计时器过期消息。

来自page_object文件(相关代码)

editVinModal: { get: function () {
return browser.element({id: 'editableVINPart'});
}},

doEditVIN: { value: function () {
modalFailedToAppear = true;
console.log('In doEditVIN');

for(modal_timer = 0 ; modal_timer <= 30; modal_timer++) {

if (!(this.editVinModal)) {
alert('In If');
console.log('Modal failed to appear');
console.log('Under if - modalFailedToAppear: ', modalFailedToAppear);
browser.sleep(modal_timer);
console.log('under if - modal_timer: ',modal_timer);
}
else {
console.log('In else if else loop');
// console.log(browser.isElementPresent(this.editVinModal));
console.log('modalFailedToAppear: ',modalFailedToAppear);
modalFailedToAppear = false;
console.log('modalFailedToAppear: ',modalFailedToAppear);
console.log('modal_timer: ',modal_timer);
break;
}
}
if (modalFailedToAppear){
console.log("Modal is not present within the given time period. Timer has expired.");
}
this.editVinLink.click();

}},

提前致谢

最佳答案

看来你是新来的。欢迎!

browser.sleep(),一般来说,不属于你的 Protractor 测试(调试目的除外)。这是坏消息。好消息是 Protractor 实际上提供了一个函数,它可以完全(我认为)完成您想要做的事情。它叫做browser.wait()它是这样工作的:

browser.wait( function() {  
return element(by.id('editableVINpart')).isPresent().then( function(present) {
return present;
});
}, 5000)
.then(function() {
element(by.id('editableVINpart')).click();
}, function() {
console.log('Element not found. :( ');
});

browser.wait() 接受两个参数:第一个是匿名函数,它将重复执行直到返回 true;其次,以毫秒为单位的等待时间(顺便说一句,browser.sleep() 也需要毫秒的等待时间,因此您的 for 循环仅等待 465 毫秒如果它一直迭代,或者大约半秒——不是很长)。

然后,由于 browser.wait() 返回一个 promise,就像所有 Protractor 函数一样,我们可以在它的末尾附加一个 .then() 语句,如果 promise 成功,它将执行第一个传入函数,否则将执行第二个传入函数。

如果你经常需要等待一个元素出现(并且由于某种原因它与 Angular 页面加载不同步),那么拥有一个可重用的函数形式可能对你有用,如下所示:

var waitThenClick = function(el) {
browser.wait( function() {
return el.isPresent().then( function(present) {
return present;
});
}, 5000)
.then(function() {
el.click();
}, function() {
console.log('Element with locator: ' + el.locator + ' was not found. :( ');
});
};

然后你可以这样调用它,无论你需要什么元素:

waitThenClick(element(by.id('editableVINpart')));

祝你好运!确保对此类问题的异步内容(尤其是 promise )变得精通和聪明。 Protractor promise 会绊倒我们中最好的人。

关于javascript - 页面对象中的 For 循环运行不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29039910/

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