首页 文章

在C#中使用Selenium WebDriver执行JavaScript

提问于
浏览
91

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

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

但我找不到C#代码来做到这一点 .

7 回答

  • 10

    .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的完整文档 .

  • 192

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

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

    用作:

    driver.Scripts().ExecuteScript("some script");
    
  • 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");
    
  • 7

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

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

    要么

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

    你也可以这样做:

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

相关问题