Selenium中的JavaScriptExecutor是什么?

时间:2018-10-07 15:12:24

标签: javascript java selenium selenium-webdriver webdriver

Selenium WebDriver中的JavaScript执行器是什么?

它的用途是什么,我们如何在Selenium WebDriver中使用它?

将不胜感激

6 个答案:

答案 0 :(得分:2)

JavascriptExecutor

JavascriptExecutor Selenium 接口,它由以下所有类实现:

  • FirefoxDriver
  • ChromeDriver
  • InternetExplorerDriver
  • EdgeDriver
  • OperaDriver
  • SafariDriver
  • RemoteWebDriver
  • EventFiringWebDriver

虽然由于跨域策略有时会执行 Selenium 脚本,但浏览器强制执行脚本的执行可能会意外失败,并且没有足够的错误日志记录。当创建自己的XHR请求或尝试访问另一个框架时,这一点尤其重要。

您将在Uncaught DOMException: Blocked a frame with origin “http://localhost:8080” from accessing a cross-origin frame while listing the iframes in page

中找到详细的讨论

JavascriptExecutor接口提供以下两种方法:

  • executeScript():此方法在当前选定的框架或窗口的上下文中执行JavaScript。提供的脚本片段将作为匿名函数的主体执行。在脚本中,您需要使用document来引用当前文档。请注意,脚本完成执行后,局部变量将不可用,尽管全局变量将继续存在。

  • executeAsyncScript():此方法在当前选定的框架或窗口的上下文中执行一段异步JavaScript。与执行同步JavaScript不同,使用此方法执行的脚本必须通过调用提供的回调来显式表示已完成脚本。此回调始终作为最后一个参数注入执行的函数中。


示例

几个例子:

您还可以在What does arguments[0] and arguments[1] mean when using executeScript method from JavascriptExecutor interface through Selenium WebDriver?

中找到有关参数的详细讨论。

tl; dr

Cross-domain policy file specification

答案 1 :(得分:1)

长而短的答案是:

这是一个Selenium接口,可以直接让您与网页的HTML DOM进行交互,它可以通过使用以下语法执行JavaScript表达式来实现:

(JavascriptExecutor) driver.executeScript("JavaScript_EXPRESSION_HERE", ADDITIONAL_ARGUMENTS);

JavascriptExecutor提供了一种自动进行用户交互的方法,即使页面并未真正完全加载或以直接交互被阻止的方式放置元素也是如此。

但是,如果您想像真正的用户体验一样自动化网页,这也是缺点。也就是说,尽管这是一个非常强大的选项,但是除非没有通过Selenium进行标准化的方法,否则我们应该尽量不要使用JavaScript Executor。

答案 2 :(得分:0)

您可以浏览以下链接以获取更多信息:https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/JavascriptExecutor.html

  

表示驱动程序可以执行JavaScript,从而提供对   这样做的机制。由于跨域策略浏览器   强制执行脚本可能会意外失败并且没有   足够的错误消息。这在创建时特别相关   您自己的XHR请求或尝试访问另一个框架时。最   排查故障的最佳时间,最好是查看浏览器的   WebDriver请求后,控制台。

基本上js执行器可让您从硒驱动程序中执行js代码。

示例: 使用JS滚动到元素。

element = driver.findElement(By.id("test"));   
(JavascriptExecutor) driver.executeScript("arguments[0].scrollIntoView(true);", element);

答案 3 :(得分:0)

JavaScriptExecutor是一个接口,用于通过selenium驱动程序执行Javascript。它提供了两种方法“ executescript”和“ executeAsyncScript”

JavascriptExecutor js =(JavascriptExecutor)驱动程序;

js.executeScript(“ window.scrollBy(0,1200)”);

答案 4 :(得分:0)

JavaScriptExecutor 是一个通过 Selenium Webdriver 帮助执行 JavaScript 的接口。有时我们在对 Web 元素执行操作时会遇到很多问题。然后这个概念出现了。所需包:

import org.openqa.selenium.JavascriptExecutor;

JavaScriptExecutor 的方法:

  1. executeAsyncScript:

    executeAsyncScript(java.lang.String script, java.lang.Object... args)

在当前选定的框架或窗口的上下文中执行一段异步 JavaScript。

  1. 执行脚本:

    executeScript(java.lang.String script, java.lang.Object…args)

使用以下语法执行 JavaScript:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(Script,Arguments);

有关详细信息,请参阅 link。如何根据此处讨论的不同情况应用此接口。

答案 5 :(得分:-1)

我在 selenium3 中的灵魂: driver.execute_script("window.open()")