Answers:
.NET语言绑定中的对象,方法和属性名称与Java绑定中的对象,方法和属性名称不完全对应。该项目的原则之一是,每种语言绑定都应该使那些习惯于该语言的人“感到自然”。在C#中,您想要执行JavaScript的代码如下
IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string title = (string)js.ExecuteScript("return document.title");
请注意,可以在此链接中找到WebDriver API .NET的完整文档。
arguments[0].click();
对我不起作用的答案?当我执行代码时,我也不例外,但是它没有单击按钮。
ExecuteJavascript
不只是一种方法driver
呢?
WebDriver.Support.dll
,可通过Selenium.Support
包中的NuGet提供)中,有一个扩展方法可以为您处理转换,并使其看起来像驱动程序具有ExecuteJavaScript
方法。
我更喜欢使用扩展方法来获取脚本对象:
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");
nuget包Selenium.Support
已经包含扩展方法来帮助解决此问题。一旦包含,执行程序脚本的一个衬里
Driver.ExecuteJavaScript("console.clear()");
要么
string result = Driver.ExecuteJavaScript<string>("console.clear()");
IJavaScriptExecutor
并且如果返回类型为null,则不应将其强制转换为所需的返回类型,如果该返回类型为null,则会提供更好的异常消息。
Driver
?VS无法识别
您也可以这样做:
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 static class Webdriver
{
public static void ExecuteJavaScript(string scripts)
{
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript(scripts);
}
public static T ExecuteJavaScript<T>(string scripts)
{
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
return (T)js.ExecuteScript(scripts);
}
}
然后,您可以在代码中执行
string test = Webdriver.ExecuteJavaScript<string>(" return 'hello World'; ");
int test = Webdriver.ExecuteJavaScript<int>(" return 3; ");
最短的代码
ChromeDriver drv = new ChromeDriver();
drv.Navigate().GoToUrl("/programming/6229769/execute-javascript-using-selenium-webdriver-in-c-sharp");
drv.ExecuteScript("return alert(document.title);");