Мне нужна помощь по повторению цикла Json для цикла с использованием транспортира:
Контекст моей проблемы:
- У меня есть метод, который возвращает Json-ответ службы REST.
- Ответ обрабатывается в другом методе и проходит цикл for. Во время каждой итерации идентификатор передается в xpath элемента в классе страницы (объектная модель страницы), где элемент щелкается и возвращает обещание.
- Код внутри цикла for выполняется только один раз успешно, и остальные итерации, где происходит вызов метода класса страницы, но не происходит щелчок элемента внутри этого метода страницы.
- Я знаю, что что-то не так с обработкой обещаний в цикле for в моем коде. Просматривал много страниц и блогов и пробовал способы, которые они предложили, но не смогли добиться успеха. Я только что упомянул ниже один способ обработки обещаний в цикле, предложенный в одном из блогов.
Помощь по этому вопросу высоко ценится.
вот мой тестовый код:
**Method that returns REST Api response:** This method returns rest api response using node fetch.
getRestApiResponse(resp) {
let nf = require('node-fetch');
let clientHierarchyDtos: ClientHierarchyDto[];
let url = 'some url';
nf(url)
.then(function(response) {
return response.json();
}).then(function(data) {
resp(data);
})
}
ClientHierarchy class: This is the structure of Json data.
export class ClientHierarchyDto {
id: string;
label: string;
name: string;
childLevels: ClientHierarchyDto[];
}
**Test Method code where this response is iterated:**
const rqnsCascadeRestServiceObj: rqnsCascadeRestService = new rqnsCascadeRestService();
let clientHierarchies: ClientHierarchyDto[];
var promises = [];
rqnsCascadeRestServiceObj.getRestApiResponse(function (resp) {
const clientHierarchies = resp;
console.log("hierarchy size: " + clientHierarchies.length);
for (let regionLevelHierarchy of clientHierarchies) {
const rqnsCascadeMeasureDashboardPage: rqnsCascadeMeasureDashboard = new rqnsCascadeMeasureDashboard();
promises.push(rqnsCascadeMeasureDashboardPage.expandAccordian(regionLevelHierarchy.id));
}
Promise.all(promises).then((data) => {
return true;
}, (error) => {
return false;
});
});
**Page class method where element click is happening:** This is the method to which ids from json is passed to element locator and clicking the element.
Accordian:ElementFinder;
expandAccordian(Id:string) {
console.log("accordianId inside: "+ Id);
this.Accordian = element(by.id(Id));
return this.Accordian.click();
}
Please let me know if anything else is needed.