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

executeAsync

Обзор​

Выполняет браузерный скрипт с callback. DOM-элемент передается первым аргументом, а callback для передачи результата в тест — последним.

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

element.executeAsync(script, ...args)

Параметры​

ПараметрТипПо умолчаниюОписание
scriptFunction | stringОбязательныйФункция или тело функции. Для завершения вызовите последний аргумент — callback.
argsunknown[][]Аргументы между DOM-элементом и callback.

Результат​

Промис со значением, переданным в callback. Возврат значения из скрипта не заменяет вызов callback.

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

В отличие от element.execute, эта реализация не вызывает waitForExist явно; дождитесь элемента самостоятельно. В Classic-сессиях тайм-аут протокольного скрипта задается через browser.setTimeout({ script: milliseconds }). Ветка BiDi использует script.callFunction без отдельного таймера callback: не полагайтесь на тайм-аут Classic, если callback не был вызван. Всегда вызывайте callback и задавайте конечный testTimeout в Testplane.

warning

В поставляемом API WebdriverIO метод устарел. Для новых BiDi-тестов используйте element.execute с асинхронной функцией.

Пример​

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

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

it("element.executeAsync: return data through the final callback", async ({ browser }) => {
await browser.url("/");
await browser.execute(() => {
document.body.innerHTML = '<p id="message">Ready</p>';
});
const element = await browser.$("#message");
await element.waitForExist();
await browser.setTimeout({ script: 5000 });
const result = await element.executeAsync((node, prefix, done) => {
setTimeout(() => done(prefix + node.textContent), 20);
}, "Status: ");
assert.equal(result, "Status: Ready");
});

См. также​