Executar JavaScript usando o Selenium WebDriver em C #

Como isso é conseguido? Aqui diz que a versão do java é:

WebDriver driver; // Assigned elsewhere JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("return document.title"); 

Mas não consigo encontrar o código C # para fazer isso.

Os nomes de object, método e propriedade nas ligações de linguagem .NET não correspondem exatamente àqueles nas ligações Java. Um dos princípios do projeto é que cada binding de linguagem deve “parecer natural” àquelas codificações confortáveis ​​nesse idioma. Em C #, o código que você deseja para executar o JavaScript é o seguinte

 IWebDriver driver; // assume assigned elsewhere IJavaScriptExecutor js = (IJavaScriptExecutor)driver; string title = (string)js.ExecuteScript("return document.title"); 

Observe que a documentação completa da API do WebDriver para .NET pode ser encontrada neste link .

Eu prefiro usar um método de extensão para obter o object de scripts:

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

Usado como este:

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

Que tal uma versão ligeiramente simplificada da idéia do método de extensão legal do @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"); 

ou talvez a versão genérica:

 public static T Execute(this IWebDriver driver, string script) { return (T)((IJavaScriptExecutor)driver).ExecuteScript(script); } // usage var title = driver.Execute("return document.title"); 

O pacote nuget Selenium.Support já contém um método de extensão para ajudar com isso. Uma vez incluído, um liner para o script executor

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

ou

  string result = Driver.ExecuteJavaScript("console.clear()"); 

Você também pode fazer:

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