Как отловить параметры запроса в авто-тестах, используя CodeceptJS
Задача крайне проста:
Необходимо совершить действие на странице и проверить, что в конкретном апи-запросе отправляются нужные параметры.
Я использую codeceptjs в связке с фреймворком PlayWright. Для решения данной задачи есть базовая функция I.waitForRequest, которая проверяет и эндпоинт и тело запроса. Но беда в том, что когда я совершаю действие на странице, запрос отправляется слишком быстро и функция I.waitForRequest не успевает запуститься до срабатывания запроса и потом просто валится с таймаутом в ожидании уже сработавшего запроса.
Выглядят сейчас эти два шага примерно вот так:
Then('I click on the update button in the advanced search window', () => {
I.click(advancedSearch.buttons.update);
});
Then('I see correct parameters in the API method for banks', () => {
I.waitForRequest(
request =>
request.url() ===
'https://test-api.test.ru/api/v2/executions?isBank=true',
);
});
Соответственно нужно проверить, что у параметра isBank значение true. Может быть есть какие-то еще варианты проверки запросов, которые успеют сработать в момент между нажатием кнопки и отправлением запроса?
Ответы (1 шт):
Вы можете попробовать добавить задержку перед проверкой запроса API. Вы можете использовать I.wait()функцию, чтобы добавить задержку в миллисекундах. Например:
Then('I click on the update button in the advanced search window', () => {
I.click(advancedSearch.buttons.update);
});
Then('I see correct parameters in the API method for banks', () => {
I.wait(500);
I.waitForRequest(
request =>
request.url() ===
'https://test-api.test.ru/api/v2/executions?isBank=true',
);
});
В качестве альтернативы вы можете попробовать использовать I.waitForFunctionфункцию ожидания выполнения определенного условия перед проверкой запроса API. Например:
Then('I click on the update button in the advanced search window', () => {
I.click(advancedSearch.buttons.update);
});
Then('I see correct parameters in the API method for banks', () => {
I.waitForFunction(() => {
return window.fetch.mock.calls.length > 0;
});
I.waitForRequest(
request =>
request.url() ===
'https://test-api.test.ru/api/v2/executions?isBank=true',
);
});