У нас есть приложение с сеткой из строк, имеющее Per-page SELECT и Pagination, и хотел бы выполнить тест e2e, который делает навигацию и выбор PP, затем проверяет результаты, отображаемые путем сравнения с результатом из DB (псевдо-код):надлежащим образом транспортир DRY для спецификации
it('should check navigation and pp', function() {
for(i=0;i<SELECT.options;i++) {
element(by.repeater('SELECTOR HERE(i)')).click();
browser.wait(function which checks URL contains a segment(i));
browser.wait(function which checks if a 'loading div is displayed');
for(j=0;j<PagesForPP(i);j++) {
runExpects('for pp=i'); //contains a couple expect(someElement.text).toContain(asynResult());
element(by.css('SELECTOR(j)').click();
browser.wait(function which checks URL contains a segment(j));
browser.wait(function which checks 'loading div is displayed');
}
}
});
Где функция (я) является вызовом в зависимости от текущей Perpage и функции (J)
Мой вопрос: как мы можем гнездятся две петли таким образом, что транспортир понимает (возможно, выполняет синхронно), используя protractor.promise.controlFlow() или лучший способ, если он доступен.
В настоящее время функции протранслятора игнорируют функции browser.wait (функция, которая проверяет URL-адрес, содержит сегмент (i)); Который выглядит так:
waitForPageChange: function (urlSegment) {
console.log('>> Waiting for URL to contain: ', urlSegment);
var currentUrl;
return browser.getCurrentUrl().then(function (url) {
currentUrl = url;
}).then(function() {
browser.wait(function() {
return browser.getCurrentUrl().then(function (url) {
if (urlSegment) {
return url.indexOf(urlSegment) >= 0;
}
return url !== currentUrl;
});
});
});
}
И тест e2e завершается до того, как ожидает действительны (например: мы в странице 1, и мы уже приближались проверки 2 и 3 страницы => все тесты терпят неудачу, потому