Перейти к основному содержимому

abortOnce

Обзор​

Прерывает один подходящий запрос. Сигнатуры BiDi и Classic/CDP различаются. В BiDi не передавайте строку с кодом ошибки: она не задает сетевую ошибку и может изменить однократность правила.

Использование​

BiDi: mock.abortOnce()

Classic/CDP: mock.abortOnce(errorReason)

Параметры и результат​

BiDi не принимает аргументов. В Classic/CDP нужен errorReason.

Коды ошибки Classic/CDP: Failed, Aborted, TimedOut, AccessDenied, ConnectionClosed, ConnectionReset, ConnectionRefused, ConnectionAborted, ConnectionFailed, NameNotResolved, InternetDisconnected, AddressUnreachable, BlockedByClient, BlockedByResponse.

BiDi возвращает тот же объект мока синхронно; Classic/CDP не возвращает полезного значения. Правила BiDi делят очередь с request и redirect. Постоянное правило заменяет очередь, однократное сохраняет другие однократные правила и убирает постоянное. В CDP правила добавляются в очередь: ранее добавленное постоянное правило может не дать примениться следующему.

Пример​

Пример использует Chrome с WebDriver BiDi. Укажите в baseUrl адрес тестового HTTP-сервера: / отдает HTML-страницу, а /api/items — JSON с полем source: "original" и статусом 200. Явная подписка на события нужна для новых сессий в одном воркере в WDIO 9.6.2.

const assert = require("node:assert/strict");

it("mock.abortOnce: block one BiDi request", async ({ browser }) => {
await browser.url("/");
await browser.sessionSubscribe({
events: ["network.beforeRequestSent", "network.responseStarted"],
});
const mock = await browser.mock("/api/items");
try {
mock.abortOnce();
const failed = await browser.execute(async () => {
try {
await fetch("/api/items", { cache: "no-store" });
return false;
} catch {
return true;
}
});
assert.equal(failed, true);
const status = await browser.execute(
async () => (await fetch("/api/items", { cache: "no-store" })).status,
);
assert.equal(status, 200);
} finally {
await mock.restore();
}
});

Источники​

Материал учитывает исходную статью WebdriverIO.