这是如何实现的? 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