簡體   English   中英

Selenium 中的 JavaScriptExecutor 是什么?

[英]What is JavaScriptExecutor in Selenium?

Selenium WebDriver 中的 JavaScript Executor 是什么?

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

一個例子將不勝感激

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);

請參閱鏈接了解更多詳情。 如何根據此處討論的不同情況應用此接口。

我在 selenium3 中的解決方案:driver.execute_script("window.open()")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM