Selenium 中 WebDriver 的 executeAsyncScript 與 executeScript


executeAsyncScript 和 executeScript 方法之間存在差異。對於 executeScript 方法,JavaScript 執行器會使用對當前選定視窗或框架的引用來執行 JavaScript。方法中的指令碼將作為未命名函式的主體執行。

在指令碼內部,文件用於指向當前文件。此外,由於指令碼已完成執行,因此本地變數將不存在。但是,全域性變數將存在。

如果指令碼包含 return 語句,則將遵循以下規則:

  • 對於 HTML 元素,返回一個 webelement。

  • 對於十進位制數,返回一個 double。

  • 對於非十進位制數,返回一個 long。

  • 對於布林值,返回一個 Boolean。

  • 對於所有其他情況,返回一個字串。

  • 對於陣列,返回一個物件列表,遵循上述規則。

  • 如果值為 null 或沒有要返回的內容,則返回 null。

executeScript 方法的引數可以是布林值、字串、webelement、列表或數字。如果引數不是這些型別,則會引發異常。可以使用 arguments 關鍵字獲取引數。

語法

JavascriptExecutor j = (JavascriptExecutor) driver;
String str = (String) j.executeScript("return document.readyState");

示例

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.JavascriptExecutor;
public class ExecuteScriptMethod{
   public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver",
      "C:\Users\ghs6kor\Desktop\Java\chromedriver.exe");
      WebDriver driver = new ChromeDriver();
      driver.get("https://tutorialspoint.tw/index.htm");
      // Javascript executor
      JavascriptExecutor j = (JavascriptExecutor) driver;
      //executeScript method
      String str = (String) j.executeScript("return document.readyState");
      System.out.println(str);
      driver.quit();
   }
}

對於 executeAsyncScript 方法,JavaScript 執行器會使用對當前選定視窗或框架的引用來執行 JavaScript 的非同步部分。與 executeScript 相比,使用此方法執行的指令碼應明確指出它們已透過呼叫給定的回撥函式完成。

回撥函式始終作為最後一個引數新增到執行的函式中。傳遞的第一個引數用於獲取指令碼結果。返回的值以與同步方法類似的方式處理。

我們可以使用 executeAsyncScript 方法執行以下任務:

  • 設定瀏覽器超時。

  • 將測試與 AJAX 應用程式同步。

  • 注入 XMLHttpRequest 並等待結果。

executeAsyncScript 方法的引數可以是布林值、字串、webelement、列表或數字。如果引數不是這些型別,則會引發異常。可以使用 arguments 關鍵字獲取引數。

語法

JavascriptExecutor j = (JavascriptExecutor) driver;
j.executeAsyncScript
("window.setTimeout(arguments[arguments.length − 1], 800);");

示例

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.JavascriptExecutor;
public class ExecuteAsyncScriptMethod{
   public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver",
      "C:\Users\ghs6kor\Desktop\Java\chromedriver.exe");
      WebDriver driver = new ChromeDriver();
      driver.get("https://tutorialspoint.tw/index.htm");
      //get current system time
      long s = System.currentTimeMillis();
      // Javascript executor
      JavascriptExecutor j = (JavascriptExecutor) driver;
      //executeAsyncScript method to set timeout
      j.executeAsyncScript
      ("window.setTimeout(arguments[arguments.length − 1], 800);");
      System.out.println(
      "Time Elapsed is: " + (System.currentTimeMillis() − s));
      driver.quit();
   }
}

更新於: 2021年2月1日

2K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.