Javascript 做出量角器投票承诺,直到满足条件
我正在用jasmine为AngularJS编写量角器测试。我正在跟踪表中的一行,该行将从正在进行的表移动到已完成的表。这一移动可能需要30秒到20分钟的时间。我需要让量角器等待该行出现在已完成的表中 我正在使用行中的2个元素来唯一地将其标识为我正在跟踪的行。此行的搜索函数是一个复杂的元素选择器和验证链,它返回解析为包含行元素的对象的承诺。大致简化:Javascript 做出量角器投票承诺,直到满足条件,javascript,angularjs,jasmine,protractor,Javascript,Angularjs,Jasmine,Protractor,我正在用jasmine为AngularJS编写量角器测试。我正在跟踪表中的一行,该行将从正在进行的表移动到已完成的表。这一移动可能需要30秒到20分钟的时间。我需要让量角器等待该行出现在已完成的表中 我正在使用行中的2个元素来唯一地将其标识为我正在跟踪的行。此行的搜索函数是一个复杂的元素选择器和验证链,它返回解析为包含行元素的对象的承诺。大致简化: searchForElement = function() { var response = element.all(by.repeater(.
searchForElement = function() {
var response = element.all(by.repeater(...))
.then(...)
.then(...)
.filter(...)
.then(...
//if found, response.value = element object
//if not found, response.value = false
);
return response;
};
我尝试从browser.wait()中调用搜索,但即使找到了该行,它仍然卡在browser.wait()中,jasmine超时。我尝试将jasmine.DEFAULT\u TIMEOUT\u INTERVAL更改为1500000,也更改为0,但仍然超时
browser.wait( function() {
searchForElement().then( function (result) {
// if result.value is an object, return true
});
}, timeout).then( function() {
// assertions
});
在搜索internet后,我尝试使用$interval,但出现错误,说明未定义$interval。显然,它不是用来测试的
如何轮询搜索函数(返回承诺),使其在完成的表中找到该行时停止轮询,如果找不到该行,则在25分钟后超时?尝试此方法
var elementWeWaitFor = element(by.id('element1'));
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(elementWeWaitFor), 20000).then(function() {
elementWeWaitFor.click(); //or do whatever with the element
});
解决:我有两个错误 首先,我没有从browser.wait循环返回
true
。因此搜索函数已经找到了元素,但它被困在等待循环中。以下是我的解决方案:
var visible = false;
browser.wait( function() {
searchForElement().then( function (result) {
// if result.value is an object, set visible to true
visible = true;
});
return visible;
}, timeout).then( function() {
// assertions
});
其次,如果browser.wait上的超时大于jasmine.DEFAULT\u timeout\u INTERVAL,则代码可以成功退出browser.wait,然后立即报告jasmine超时,因为it
块未在jasmine超时内完成
我还得出结论,没有必要使用间隔来轮询搜索函数,因为搜索返回一个承诺。browser.wait循环只是不断调用搜索函数,直到它得到所需的响应。显示已完成表的HTML代码显示超时消息和错误堆栈