executeAsync
Обзор
Выполняет браузерный скрипт с callback. DOM-элемент передается первым аргументом, а callback для передачи результата в тест — последним.
Использование
element.executeAsync(script, ...args)
Параметры
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
script | Function | string | Обязательный | Функция или тело функции. Для завершения вызовите последний аргумент — callback. |
args | unknown[] | [] | Аргументы между DOM-элементом и callback. |
Результат
Промис со значением, переданным в callback. Возврат значения из скрипта не заменяет вызов callback.
Ограничения
В отличие от element.execute, эта реализация не вызывает waitForExist явно; дождитесь элемента самостоятельно. В Classic-сессиях тайм-аут протокольного скрипта задается через browser.setTimeout({ script: milliseconds }). Ветка BiDi использует script.callFunction без отдельного таймера callback: не полагайтесь на тайм-аут Classic, если callback не был вызван. Всегда вызывайте callback и задавайте конечный testTimeout в Testplane.
В поставляемом 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");
});