【发布时间】:2019-03-12 09:26:36
【问题描述】:
什么是 Selenium WebDriver 中的 JavaScript 执行器?
它有什么用,我们如何在 Selenium WebDriver 中使用它?
一个例子将不胜感激
【问题讨论】:
标签: javascript java selenium selenium-webdriver webdriver
什么是 Selenium WebDriver 中的 JavaScript 执行器?
它有什么用,我们如何在 Selenium WebDriver 中使用它?
一个例子将不胜感激
【问题讨论】:
标签: javascript java selenium selenium-webdriver webdriver
JavascriptExecutor 是 Selenium 接口,由以下所有类实现:
FirefoxDriverChromeDriverInternetExplorerDriverEdgeDriverOperaDriverSafariDriverRemoteWebDriverEventFiringWebDriverHtmlUnitDriver当你执行你的 Selenium 脚本时,由于跨域策略浏览器强制你的脚本执行可能会意外失败并且没有足够的错误日志记录。这在创建您自己的 XHR 请求或尝试访问另一个框架时尤其重要。
JavascriptExecutor 接口提供如下两种方法:
executeScript():此方法在当前选定的框架或窗口的上下文中执行 JavaScript。提供的脚本片段将作为匿名函数的主体执行。在脚本中,您需要使用document 来引用当前文档。请注意,一旦脚本完成执行,局部变量将不可用,但全局变量将保持不变。
executeAsyncScript():此方法在当前选定的框架或窗口的上下文中执行一段异步的 JavaScript。与执行同步 JavaScript 不同,使用此方法执行的脚本必须通过调用提供的回调显式地表明它们已完成。这个回调总是作为最后一个参数注入到执行的函数中。
几个例子:
String js = "arguments[0].setAttribute('value','"+inputText+"')"
((JavascriptExecutor) webDriver).executeScript(js, element);
Double click through JavaScript
new Actions(driver).moveToElement(myElem, posX, posY).perform();
((JavascriptExecutor)driver).executeScript(jsDoubleClick, myElem, posX, posY);
Sending variable character strings through executeScript()
String myValue = "80120804076";
WebElement pesel = driver.findElement(fldPesel);
jse.executeScript("arguments[0].value='" + myValue + "';", pesel);
您还可以在以下位置找到一些关于参数的详细讨论:
【讨论】:
长短答案是:
这是一个 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 的方法:
执行异步脚本:
executeAsyncScript(java.lang.String 脚本,java.lang.Object…args)
在当前选定的框架或窗口的上下文中执行一段异步的 JavaScript。
执行脚本:
executeScript(java.lang.String 脚本,java.lang.Object…args)
使用以下语法执行 JavaScript:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(Script,Arguments);
详情请参阅link。如何根据这里讨论的不同情况应用此接口。
【讨论】:
我在 selenium3 中的解决方案: driver.execute_script("window.open()")
【讨论】: