执行脚本
public java.lang.Object executeScript(java.lang.String script,
java.lang.Object... args)
从接口复制的描述:JavascriptExecutor
在当前选定的框架或窗口的上下文中执行 JavaScript。提供的脚本片段将作为主体执行
一个匿名函数。在脚本中,使用 document 来引用
当前文件。请注意,局部变量一次将不可用
脚本已完成执行,但全局变量将
坚持。如果脚本有返回值(即如果脚本包含
return 语句),然后将采取以下步骤:
- 对于 HTML 元素,此方法返回 WebElement
- 对于小数,返回 Double
- 对于非十进制数,返回 Long
- 对于布尔值,返回一个布尔值
- 对于所有其他情况,返回一个字符串。
- 对于数组,返回一个列表,其中每个对象都遵循上述规则。我们支持嵌套列表。
- 除非值为null或者没有返回值,否则返回null
参数必须是数字、布尔值、字符串、WebElement 或列表
以上任意组合。如果
论据不符合这些标准。将提出论据
通过“arguments”魔术变量可用于 JavaScript,就好像
该函数是通过“Function.apply”调用的
指定者:接口JavascriptExecutor中的executeScript
参数: script - 要执行的 JavaScript args - 要执行的参数
剧本。可能为空 返回:Boolean、Long、String、List 之一
或网页元素。或为空。
执行AsyncScript
public java.lang.Object executeAsyncScript(java.lang.String script,
java.lang.Object... args)
从接口复制的描述:JavascriptExecutor
在当前选定的框架或窗口的上下文中执行一段异步的 JavaScript。与执行同步不同
JavaScript,使用此方法执行的脚本必须显式发出信号
它们通过调用提供的回调来完成。这个回调是
总是作为最后一个参数注入到执行的函数中。
传递给回调函数的第一个参数将用作
脚本的结果。该值的处理方式与
同步案例。
示例 #1:在被测浏览器中执行休眠。
long start = System.currentTimeMillis();
((JavascriptExecutor) driver).executeAsyncScript(
"window.setTimeout(arguments[arguments.length - 1], 500);");
System.out.println(
"Elapsed time: " + (System.currentTimeMillis() - start));
示例 #2:将测试与 AJAX 应用程序同步:
WebElement composeButton = driver.findElement(By.id("compose-button"));
composeButton.click();
((JavascriptExecutor) driver).executeAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"mailClient.getComposeWindowWidget().onload(callback);");
driver.switchTo().frame("composeWidget");
driver.findElement(By.id("to")).sendKeys("bog@example.com");
示例 #3:注入 XMLHttpRequest 并等待结果:
Object response = ((JavascriptExecutor) driver).executeAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"var xhr = new XMLHttpRequest();" +
"xhr.open('GET', '/resource/data.json', true);" +
"xhr.onreadystatechange = function() {" +
" if (xhr.readyState == 4) {" +
" callback(xhr.responseText);" +
" }" +
"}" +
"xhr.send();");
JSONObject json = new JSONObject((String) response);
assertEquals("cheese", json.getString("food"));
脚本参数必须是数字、布尔值、字符串、WebElement、
或以上任意组合的列表。会抛出异常
如果论点不符合这些标准。论据将是
通过“arguments”变量提供给 JavaScript。
指定者:接口JavascriptExecutor中的executeAsyncScript
参数: script - 要执行的 JavaScript。 args - 参数
到脚本。可能是空的。返回: Boolean、Long、String 之一,
List、WebElement 或 null。