簡體   English   中英

如何通過WebDriver在Microsoft Edge中通過Java執行executeScript方法

[英]How to execute executeScript method through Java in Microsoft Edge through WebDriver

我正在嘗試通過 WebDriver 在 Microsoft Edge 中運行以下代碼

ExpectedCondition<Boolean> jsLoad = driver -> ((JavascriptExecutor) driver).executeScript("return 
document.readyState").toString().equals("complete");

JavascriptExecutor js = (JavascriptExecutor) getDriver();
boolean jsReady = (Boolean) js.executeScript("return document.readyState").toString().equals("complete");

我們遇到以下異常:

Exception class:org.openqa.selenium.JavascriptException

原因是:

org.openqa.selenium.JavascriptException: javascript error: Function is not a constructor

我們像下面這樣設置 EdgeOptions

DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setBrowserName("MicrosoftEdge");
EdgeOptions edgeOptions = new EdgeOptions();
edgeOptions.setCapability("ms:inPrivate", true);
edgeOptions.setCapability("prefs", edgePrefs);
edgeOptions.setCapability("useAutomationExtension", false);
edgeOptions.merge(desiredCapabilities);
edgeOptions.setPageLoadStrategy("eager");
edgeOptions.setCapability("ms:inPrivate", true);
edgeOptions.setCapability("useAutomationExtension", false);
edgeOptions.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
edgeOptions.setCapability(CapabilityType.HAS_NATIVE_EVENTS, true);
driver = new EdgeDriver(edgeOptions);

有什么建議么

執行腳本()

在當前選定的框架或 window 的上下文中執行 JavaScript。提供的腳本片段將作為匿名 function 的主體執行。在腳本中,使用 document 來引用當前文檔。 請注意,一旦腳本執行完畢,局部變量將不可用,但全局變量將持續存在。 如果腳本有返回值(即如果腳本包含返回語句),那么將執行以下步驟:

  • 對於 HTML 元素,此方法返回一個 WebElement
  • 對於小數,返回 Double
  • 對於非十進制數,返回 Long
  • 對於 boolean,返回 Boolean
  • 對於所有其他情況,返回一個字符串。
  • 對於數組,按照上述規則返回一個列表,其中每個 object。 我們支持嵌套列表。
  • 對於 map,返回一個 Map<String, Object>,其值遵循上述規則。
  • 除非值為null或者沒有返回值,其中返回null

Arguments 必須是數字、boolean、字符串、WebElement 或上述任意組合的列表。 如果 arguments 不滿足這些條件,將拋出異常。 arguments 將通過“arguments”魔法變量提供給 JavaScript,就好像 function 是通過“Function.apply”調用的一樣


這個用例

如果您的用例是等待document.readyState等於complete ,您可以按如下方式引入WebDriverWait

new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(d => ((IJavaScriptExecutor)d).ExecuteScript("return document.readyState").Equals("complete"));

暫無
暫無

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

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