Selenium中的JavaScript执行程序是什么?

ni65a41a  于 2022-11-24  发布在  Java
关注(0)|答案(6)|浏览(118)

什么是Selenium WebDriver中的JavaScript执行器?
它的用途是什么?我们如何在Selenium WebDriver中使用它?
请提供一个例子。

py49o6xq

py49o6xq1#

Javascript执行程序

JavascriptExecutorSelenium 接口,由以下所有类实现:

  • 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 listing the iframes in page中找到详细的讨论
javascriptExecutor接口提供了如下两种方法:

*executeScript():此方法在当前选定框架或窗口的上下文中执行JavaScript。提供的脚本片段将作为匿名函数的主体执行。在脚本中,您需要使用document来引用当前文档。请注意,一旦脚本完成执行,局部变量将不可用,但全局变量将保持不变。
*executeAsyncScript():此方法在当前所选框架或窗口的上下文中执行异步JavaScript片段。与执行同步JavaScript不同,使用此方法执行的脚本必须通过调用提供的回调显式地表示它们已完成。此回调始终作为最后一个参数注入到执行的函数中。

示例

举几个例子:

String js = "arguments[0].setAttribute('value','"+inputText+"')"
((JavascriptExecutor) webDriver).executeScript(js, element);
new Actions(driver).moveToElement(myElem, posX, posY).perform();
((JavascriptExecutor)driver).executeScript(jsDoubleClick, myElem, posX, posY);
String myValue = "80120804076";
WebElement pesel = driver.findElement(fldPesel);
jse.executeScript("arguments[0].value='" + myValue + "';", pesel);

参考

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

tl;dr

Cross-domain policy file specification

3duebb1j

3duebb1j2#

长而简短的回答是:
这是一个Selenium接口,它直接让你与网页的HTML DOM交互。它通过使用以下语法执行JavaScript表达式来实现这一点:
(JavascriptExecutor) driver.executeScript("JavaScript_EXPRESSION_HERE", ADDITIONAL_ARGUMENTS);
Javascript Executor提供了一种自动化用户交互的方法,即使页面实际上没有完全加载,或者元素的放置方式阻止了直接交互。
然而,如果你想让网页自动化,就像真实的的用户体验一样,这也是缺点。也就是说,虽然这是一个非常强大的选项,但我们应该尽量不要使用JavaScript Executor,除非没有任何标准的方法通过Selenium来实现。

9gm1akwq

9gm1akwq3#

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

import org.openqa.selenium.JavascriptExecutor;

JavaScript执行器的方法:
1.执行异步脚本:

  • 执行异步脚本(java.lang.字符串脚本,java. lang.对象...参数)*

在当前所选框架或窗口的上下文中执行异步JavaScript片段。
1.执行脚本:

  • 执行脚本(java.lang.字符串脚本,java. lang.对象...参数)*

使用以下语法执行JavaScript:

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

详细请参考link,这里讨论如何根据不同情况应用此接口。

xmd2e60i

xmd2e60i4#

您可以浏览 Interface JavascriptExecutor 以获取更多信息:
指示驱动程序可以执行JavaScript,并提供执行此操作的机制的访问权限。由于跨域策略的原因,浏览器强制执行脚本可能会意外失败,并且没有足够的错误消息。在创建自己的XHR请求或尝试访问其他框架时,这一点尤其重要。大多数情况下,在排除故障时,最好在执行WebDriver请求后查看浏览器的控制台。
基本上,JavaScript执行器允许您从Selenium WebDriver执行JavaScript代码。
示例:使用JavaScript滚动到元素。

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

r6vfmomb5#

JavaScriptExecutor是一个通过Selenium WebDriver执行JavaScript代码的接口,它提供了两个方法,“executescript”和“executeAsyncScript”:

JavascriptExecutor js = (JavascriptExecutor) driver;

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

rxztt3cl6#

我在Selenium 3中的解决方案:

driver.execute_script("window.open()")

相关问题