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

switchFrame

Обзор​

Переключите последующие команды браузера в iframe или вернитесь в корневой документ. Команда изменяет контекст фрейма, а не выбранное окно.

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

browser.switchFrame(context)

Параметры​

ПараметрТипПо умолчаниюОписание
contextElement | string | Function | nullОбязателенЭлемент iframe; для BiDi также ID контекста, URL, часть URL или функция-предикат, выполняемая во фреймах. null выбирает корневой документ.

Результат​

Promise<string | void>. В режиме BiDi возвращается ID выбранного контекста. В Classic протокольное переключение может не возвращать значение.

Ограничения​

Classic поддерживает элемент iframe и null, но отклоняет строку и функцию. Используйте null в finally, если последующие шаги должны выполняться в основном документе. Если фрейм не найден, команда завершается ошибкой. Не путайте ее с switchWindow.

warning

В WDIO 9.6.2 ветка с функцией-предикатом обращается к глобальному browser. В стандартном тесте Testplane с аргументом { browser } подходящий фрейм найден, но команда завершается ошибкой browser is not defined. Это воспроизведено в BiDi-сессии. Используйте элемент iframe, как в примере ниже; не создавайте глобальный browser ради обхода ошибки.

Пример​

Настройте baseUrl на свой локальный тестовый HTTP-сайт, где / возвращает HTML-страницу. Пример выполняется внутри обычного файла тестов Testplane.

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

it("switchFrame: enter an iframe and return", async ({ browser }) => {
await browser.url("/");
await browser.execute(() => {
document.body.innerHTML =
'<h1>Main page</h1><iframe id="frame" srcdoc="<p>Frame content</p>"></iframe>';
});
try {
await browser.switchFrame(browser.$("#frame"));
assert.equal(await browser.$("p").getText(), "Frame content");
} finally {
await browser.switchFrame(null);
}
assert.equal(await browser.$("h1").getText(), "Main page");
});

См. также​