這是如何實現的? Here它說,Java版本是:使用C#中的Selenium WebDriver執行JavaScript#
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");
但我找不到C#代碼來做到這一點。
這是如何實現的? Here它說,Java版本是:使用C#中的Selenium WebDriver執行JavaScript#
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");
但我找不到C#代碼來做到這一點。
.NET語言綁定中的對象,方法和屬性名稱並不完全對應於Java綁定中的對象,方法和屬性名稱。該項目的原則之一是每種語言的綁定應該對那些舒適的語言編碼「感到自然」。在C#中,你會想要執行JavaScript代碼如下
IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string title = (string)js.ExecuteScript("return document.title");
注意,webdriver的API用於.NET的完整的文檔可以在this link找到。
我更喜歡使用的擴展方法來獲取腳本對象:
public static IJavaScriptExecutor Scripts(this IWebDriver driver)
{
return (IJavaScriptExecutor)driver;
}
用作這樣的:
driver.Scripts().ExecuteScript("some script");
很乾淨。我喜歡這個! – 2015-11-11 22:06:55
同意,超級清潔 – 2016-05-20 16:59:37
如何@Morten克里斯琴森的很好的擴展方法理念的略微簡化的版本:
public static object Execute(this IWebDriver driver, string script)
{
return ((IJavaScriptExecutor)driver).ExecuteScript(script);
}
// usage
var title = (string)driver.Execute("return document.title");
或者可能的通用版本:
public static T Execute<T>(this IWebDriver driver, string script)
{
return (T)((IJavaScriptExecutor)driver).ExecuteScript(script);
}
// usage
var title = driver.Execute<string>("return document.title");
這可以用來獲得WebElement和布爾呢? – rahoolm 2015-03-27 09:34:44
你也可以這樣做:
public static IWebElement FindElementByJs(this IWebDriver driver, string jsCommand)
{
return (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript(jsCommand);
}
public static IWebElement FindElementByJsWithWait(this IWebDriver driver, string jsCommand, int timeoutInSeconds)
{
if (timeoutInSeconds > 0)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
wait.Until(d => d.FindElementByJs(jsCommand));
}
return driver.FindElementByJs(jsCommand);
}
public static IWebElement FindElementByJsWithWait(this IWebDriver driver, string jsCommand)
{
return FindElementByJsWithWait(driver, jsCommand, s_PageWaitSeconds);
}
public void javascriptclick(String element)
{
WebElement webElement=driver.findElement(By.xpath(element));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();",webElement);
System.out.println("javascriptclick"+" "+ element);
}
的NuGet包Selenium.Support
已經包含了一個擴展方法,以幫助這一點。一旦它被包括在內,一個班輪執行器腳本
Driver.ExecuteJavaScript("console.clear()");
或
string result = Driver.ExecuteJavaScript<string>("console.clear()");
這是一個不錯的現代化解決方案。 擴展方法增加了驗證,即驅動程序實現'IJavaScriptExecutor'並在返回類型爲空時提供更好的異常消息,當它不應該或不能轉換爲所需的返回類型時。 – 2017-10-20 15:41:21
注意在Java中***秒*** CRIPT單詞的大小寫。這讓我失望了。 – WheretheresaWill 2015-11-12 06:45:22
吉姆的回答就像你可以得到的權威一樣。查看提交歷史記錄,以及每個Selenium .NET文件:-) – 2016-05-18 13:24:54
請告訴我如何單擊C#中的按鈕?像'arguments [0] .click();'這樣的答案不適合我?當我執行我的代碼時,我沒有任何異常,但它不會單擊按鈕。 – 2016-06-23 04:42:19