Selenium 中的 JavaScriptExecutor 是什么?

IT技术 javascript java selenium selenium-webdriver webdriver
2021-03-16 18:46:57

Selenium WebDriver 中的 JavaScript Executor 是什么?

它有什么用,我们如何在 Selenium WebDriver 中使用它?

一个例子将不胜感激

6个回答

Javascript执行器

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

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

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

您将在Uncaught DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame while列出页面中的 iframe 中找到详细讨论

JavascriptExecutor 接口提供了如下两种方法:

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

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


例子

几个例子:

  • 使用JS输入文字

    String js = "arguments[0].setAttribute('value','"+inputText+"')"
    ((JavascriptExecutor) webDriver).executeScript(js, element);
    
  • 双击 JavaScript

    new Actions(driver).moveToElement(myElem, posX, posY).perform();
    ((JavascriptExecutor)driver).executeScript(jsDoubleClick, myElem, posX, posY);
    
  • 通过executeScript()发送可变字符串

    String myValue = "80120804076";
    WebElement pesel = driver.findElement(fldPesel);
    jse.executeScript("arguments[0].value='" + myValue + "';", pesel);
    

参考

您还可以在以下位置找到一些关于参数的详细讨论


tl;博士

跨域策略文件规范

长而短的答案是:

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

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

JavascriptExecutor 提供了一种自动化用户交互的方法,即使页面基本上没有完全加载或元素以阻止直接交互的方式放置。

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

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

表示驱动程序可以执行 JavaScript,提供对执行此操作的机制的访问。由于跨域策略,浏览器强制执行您的脚本可能会意外失败并且没有足够的错误消息。这在创建您自己的 XHR 请求或尝试访问另一个框架时尤为重要。大多数情况下,在对失败进行故障排除时,最好在执行 WebDriver 请求后查看浏览器的控制台。

基本上 js executor 允许您从 selenium 驱动程序执行 js 代码。

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

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

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

JavascriptExecutor js=(JavascriptExecutor) 驱动程序;

js.executeScript("window.scrollBy(0,1200)");

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

import org.openqa.selenium.JavascriptExecutor;

JavaScriptExecutor 的方法:

  1. 执行异步脚本:

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

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

  1. 执行脚本:

    执行脚本(java.lang.String 脚本,java.lang.Object ... args)

使用以下语法执行 JavaScript:

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

请参阅链接了解更多详情。如何根据此处讨论的不同情况应用此接口。