在C#中使用Selenium WebDriver执行JavaScript

这是如何实现的? 这里说java版本是:

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 for .NET的完整文档可以在此链接中find。

我更喜欢使用扩展方法来获取脚本对象:

 public static IJavaScriptExecutor Scripts(this IWebDriver driver) { return (IJavaScriptExecutor)driver; } 

用作:

 driver.Scripts().ExecuteScript("some script"); 

@Morten Christiansen的漂亮扩展方法思想的稍微简化版本如何?

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

你也可以这样做:

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

nuget包Selenium.Support已经包含一个扩展方法来帮助这个。 一旦包含,一个class轮执行脚本

  Driver.ExecuteJavaScript("console.clear()"); 

要么

  string result = Driver.ExecuteJavaScript<string>("console.clear()"); 
 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); }