executeAsync
警告
executeAsync
指令已過時,將在未來版本中移除。請改用 execute
指令,因為它透過 async
/await
提供更好的錯誤處理支援。
將一段 JavaScript 片段注入頁面中,以便在使用給定元素作為範圍的目前選取框架的內容中執行,因為它位於元素範圍上,這表示 WebdriverIO 將在執行指令碼之前自動等待該元素存在。執行的指令碼會被假設為非同步,且必須透過調用提供的回呼來發出完成訊號,該回呼始終作為函式的最後一個參數提供。此回呼的值將會傳回給用戶端。
非同步指令碼指令不得跨越頁面載入。如果在等待指令碼結果時觸發卸載事件,則應向用戶端傳回錯誤。
script 引數定義要執行的指令碼,其形式為函式主體。函式將會使用提供的 args 陣列進行調用,且這些值可以透過依指定順序的 arguments 物件來存取。最後一個引數始終會是一個回呼函式,必須調用它來發出指令碼已完成的訊號。
引數可以是任何 JSON 基本類型、陣列或 JSON 物件。定義 WebElement 參照的 JSON 物件將會轉換為對應的 DOM 元素。同樣地,指令碼結果中的任何 WebElement 都會以 WebElement JSON 物件的形式傳回給用戶端。
注意
true
用法
$(selector).executeAsync(script, arguments)
參數
名稱 | 類型 | 詳細資訊 |
---|---|---|
script | String 、Function | 要執行的指令碼。 |
arguments 選用 | param | 指令碼引數 |
範例
executeAsync.js
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"
});