1.使用executeScript 返回一個WebElement .
下例中我們將一個瀏覽器中的JavaScript 對象返回到客戶端(C#,JAVA,Python等)。
IWebElement element = (IWebElement) ((IJavaScriptExecutor)driver).ExecuteScript("return $('.cheese')[0]");
2.使用executeScript 和參數組合返回一個WebElement列表。
下例中我們將客戶端中的一個 IList<IWebElement> 對象傳遞到 瀏覽器中作為一個 JaveScript 對象使用。
IList<IWebElement> labels = driver.FindElements(By.TagName("label")); IList<IWebElement> inputs = (IList<IWebElement>) ((IJavaScriptExecutor)driver).ExecuteScript( "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +
"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);
函數詳細解釋:
//
// Summary:
// Executes JavaScript in the context of the currently selected frame or window.
//
// Parameters:
// script:
// The JavaScript code to execute.
//
// args:
// The arguments to the script.
//
// Returns:
// The value returned by the script.
//
// Remarks:
// The OpenQA.Selenium.IJavaScriptExecutor.ExecuteScript(System.String,System.Object[])method
// executes JavaScript in the context of the currently selected frame or window.
// This means that "document" will refer to the current document. If the script
// has a return value, then the following steps will be taken:
// For an HTML element, this method returns a OpenQA.Selenium.IWebElement For a
// number, a System.Int64 is returned For a boolean, a System.Boolean is returned
// For all other cases a System.String is returned. For an array,we check the first
// element, and attempt to return a System.Collections.Generic.List`1 of that type,
// following the rules above. Nested lists are not supported. If the value is null
// or there is no return value, null is returned.
// Arguments must be a number (which will be converted to a System.Int64), a System.Boolean,
// a System.String or a OpenQA.Selenium.IWebElement. An exception will be thrown
// if the arguments do not meet these criteria. The arguments will be made available
// to the JavaScript via the "arguments" magic variable, as if the function were
// called via "Function.apply"
object ExecuteScript(string script, params object[] args);
翻譯一下 :
1.作用域:當前frame 或 window ,如果是在frame下執行,應該受到frame 的范圍影響。
2.返回值:我們客戶端以C#為例
JavaScript | c# |
HTML element | OpenQA.Selenium.IWebElement |
number | System.Int64 |
boolean | System.Boolean |
其它類型 | System.String |
array | 檢查第一個元素,嘗試轉換為System.Collections.Generic.List`1 |
null | null |
沒有返回 | null |
Nested lists | 不支持 |
3.參數:
C# | JavaScript |
OpenQA.Selenium.IWebElement | HTML element |
System.Int64 | number |
System.Boolean | boolean |
System.String | string |
其它類型 | thrown exception |
其他