executeAsync
Komenda executeAsync
jest przestarzała i zostanie usunięta w przyszłej wersji.
Proszę używać komendy execute
, ponieważ zapewnia lepszą obsługę
błędów poprzez async
/await
.
Wstrzykuje fragment kodu JavaScript do strony w celu wykonania w kontekście aktualnie wybranej ramki, używając danego elementu jako zakresu. Ponieważ komenda działa w zakresie elementu, WebdriverIO automatycznie poczeka na istnienie elementu przed wykonaniem skryptu. Wykonywany skrypt jest traktowany jako asynchroniczny i musi zasygnalizować zakończenie przez wywołanie dostarczonego wywołania zwrotnego (callback), które zawsze jest dostarczane jako ostatni argument funkcji. Wartość przekazana do tego wywołania zwrotnego zostanie zwrócona do klienta.
Asynchroniczne komendy skryptowe nie mogą obejmowa ć przeładowań strony. Jeśli zdarzenie wyładowania zostanie wywołane podczas oczekiwania na wynik skryptu, klientowi powinien zostać zwrócony błąd.
Argument skryptu definiuje skrypt do wykonania w postaci treści funkcji. Funkcja zostanie wywołana z podaną tablicą argumentów, a wartości mogą być dostępne przez obiekt arguments w określonej kolejności. Ostatnim argumentem zawsze będzie funkcja wywołania zwrotnego, która musi zostać wywołana, aby zasygnalizować, że skrypt zakończył działanie.
Argumenty mogą być dowolnymi prymitywami JSON, tablicami lub obiektami JSON. Obiekty JSON, które definiują referencję WebElement, zostaną przekonwertowane na odpowiedni element DOM. Podobnie, wszelkie elementy WebElements w wyniku skryptu zostaną zwrócone do klienta jako obiekty JSON WebElement.
Proszę używać execute
zamiast tej metody
Użycie
$(selector).executeAsync(script, arguments)
Parametry
Nazwa | Typ | Szczegóły |
---|---|---|
script | String, Function | Skrypt do wykonania. |
arguments opcjonalne | * | argumenty skryptu |
Przykład
it('should wait for the element to exist, then executes async javascript on the page with the element as first argument', async () => {
await browser.setTimeout({ script: 5000 })
const text = await $('div').execute((elem, a, b, c, d) => {
// browser context - you may not access client or console
setTimeout(() => {
done(elem.textContent + a + b + c + d)
}, 3000);
}, 1, 2, 3, 4);
// node.js context - client and console are available
// node.js context - client and console are available
console.log(text); // outputs "Hello World1234"
});
Zwraca
- <*>
return
: Wynik skryptu.