在C#中使用Selenium WebDriver执行JavaScript

时间:2011-06-03 16:12:57

标签: javascript c# selenium-webdriver webdriver

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

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

但我找不到C#代码来执行此操作。

8 个答案:

答案 0 :(得分:197)

.NET语言绑定中的对象,方法和属性名称与Java绑定中的对象,方法和属性名称不完全对应。该项目的原则之一是每种语言绑定应该对那些语言中的舒适编码“感觉自然”。在C#中,您要执行JavaScript的代码如下

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

请注意,可以在this link找到WebDriver API for .NET的完整文档。

答案 1 :(得分:49)

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

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

用作:

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

答案 2 :(得分:12)

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

答案 3 :(得分:10)

nuget包Selenium.Support已经包含一个扩展方法来帮助解决这个问题。一旦它被包括在内,一个衬垫到执行者脚本

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

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

答案 4 :(得分:7)

你也可以这样做:

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

答案 5 :(得分:0)

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

    }

答案 6 :(得分:0)

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

答案 7 :(得分:0)

最短的代码

ChromeDriver drv = new ChromeDriver();

drv.Navigate().GoToUrl("https://stackoverflow.com/questions/6229769/execute-javascript-using-selenium-webdriver-in-c-sharp");

drv.ExecuteScript("return alert(document.title);");