addInitScript
Обзор
Выполните функцию в новых документах текущей вкладки или окна до запуска скриптов страницы. Это позволяет подготовить значения до того, как приложение их прочитает. Функция также выполняется в дочерних фреймах этого верхнеуровневого контекста при их добавлении или переходе на другую страницу.
Скрипт регистрируется для вкладки или окна, текущих в момент вызова addInitScript. Он не распространяется автоматически на другие вкладки и окна, в том числе открытые позже. Чтобы использовать его там, переключитесь на нужную вкладку или окно и зарегистрируйте скрипт отдельно до перехода на страницу.
Использование
browser.addInitScript(script, ...args)
Параметры
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
script | Function | Обязателен | Функция для выполнения в браузере, без доступа к переменным Node.js. |
args | unknown[] | [] | Аргументы, сериализуемые в JSON и передаваемые функции. |
Результат
Promise<InitScript>: объект с асинхронным методом remove() и подпиской on("data", listener). Для передачи данных в Node.js вызовите callback emit, который добавляется последним аргументом функции.
Ограничения
Требуется сессия WebDriver BiDi (webSocketUrl: true). Вызовите команду до перехода на страницу. remove() отменяет последующее внедрение, но не откатывает изменения текущего документа. Удаляйте скрипт в том же тесте, даже если проверка завершилась ошибкой. Реализация этой версии принимает функцию, а не строку.
Пример
Настройте baseUrl на свой локальный тестовый HTTP-сайт, где / возвращает HTML-страницу. Пример выполняется внутри обычного файла тестов Testplane.
const assert = require("node:assert/strict");
it("addInitScript: set a value before page scripts", async ({ browser }) => {
const script = await browser.addInitScript(value => {
window.exampleSeed = value;
}, 42);
try {
await browser.url("/");
assert.equal(await browser.execute(() => window.exampleSeed), 42);
} finally {
await script.remove();
}
await browser.url("/");
assert.equal(await browser.execute(() => typeof window.exampleSeed), "undefined");
});