![](/img/trans.png)
[英]What does arguments[0] and arguments[1] mean when using executeScript method from JavascriptExecutor interface through Selenium WebDriver?
[英]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.