Javascript 做出量角器投票承诺,直到满足条件

Javascript 做出量角器投票承诺,直到满足条件,javascript,angularjs,jasmine,protractor,Javascript,Angularjs,Jasmine,Protractor,我正在用jasmine为AngularJS编写量角器测试。我正在跟踪表中的一行,该行将从正在进行的表移动到已完成的表。这一移动可能需要30秒到20分钟的时间。我需要让量角器等待该行出现在已完成的表中 我正在使用行中的2个元素来唯一地将其标识为我正在跟踪的行。此行的搜索函数是一个复杂的元素选择器和验证链,它返回解析为包含行元素的对象的承诺。大致简化: searchForElement = function() { var response = element.all(by.repeater(.

我正在用jasmine为AngularJS编写量角器测试。我正在跟踪表中的一行,该行将从正在进行的表移动到已完成的表。这一移动可能需要30秒到20分钟的时间。我需要让量角器等待该行出现在已完成的表中

我正在使用行中的2个元素来唯一地将其标识为我正在跟踪的行。此行的搜索函数是一个复杂的元素选择器和验证链,它返回解析为包含行元素的对象的承诺。大致简化:

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代码显示超时消息和错误堆栈