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.com/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.com/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.