这是如何实现的?这里说java版本是:
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");
但是我找不到执行此操作的 C# 代码。
这是如何实现的?这里说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");
请注意,可以在此链接中找到用于 .NET 的 WebDriver API 的完整文档。
我更喜欢使用扩展方法来获取脚本对象:
public static IJavaScriptExecutor Scripts(this IWebDriver driver)
{
return (IJavaScriptExecutor)driver;
}
用作此:
driver.Scripts().ExecuteScript("some script");
nuget 包Selenium.Support
已经包含一个扩展方法来帮助解决这个问题。一旦包含在内,执行程序脚本的一个衬里
Driver.ExecuteJavaScript("console.clear()");
或者
string result = Driver.ExecuteJavaScript<string>("console.clear()");
@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);
}