我正在用茉莉花编写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分钟后超时?
答案 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
});