进行量角器投票承诺,直到满足条件为止

时间:2018-10-25 20:25:24

标签: javascript angularjs jasmine protractor

我正在用茉莉花编写AngularJS的量角器测试。我正在跟踪一个表中的一行,该表将从“进行中”表移动到“已完成”表。此操作可能需要30秒到20分钟的任何时间。我需要让量角器等待该行出现在“已完成”表中。

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

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.DEFAULT_TIMEOUT_INTERVAL更改为1500000,也更改为0,但仍然超时。

browser.wait( function() {
  searchForElement().then( function (result) {
    // if result.value is an object, return true
  });
}, timeout).then( function() {
  // assertions
});

搜索互联网后,我尝试使用$ interval,但是出现错误,提示未定义$ interval。显然,它并不打算用于测试。

我如何间隔一定时间轮询搜索功能(返回Promise),以便在Completed表中找到该行时停止轮询,如果找不到该行,则在25分钟后超时?

2 个答案:

答案 0 :(得分:1)

已解决:我有2个错误。

首先,我没有从browser.wait循环返回import numpy as np A = np.array([103, 302, 405, 204, 301, 105, 202, 303, 201, 404]) res = A[np.lexsort((A // 100, A % 10))] array([201, 301, 202, 302, 103, 303, 204, 404, 105, 405]) 。因此搜索功能已经找到了该元素,但是它被卡在了等待循环中。这是我的解决方案:

true

第二,如果browser.wait上的超时大于jasmine.DEFAULT_TIMEOUT_INTERVAL,则代码可以成功退出browser.wait,然后立即报告茉莉花超时,因为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 }); 块未在茉莉花超时。

我还得出结论,因为搜索返回了Promise,所以不必使用间隔来轮询搜索功能。 browser.wait循环一直不断调用搜索功能,直到获得所需的响应为止。

答案 1 :(得分:0)

尝试一下

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
});