C#扩展Selenium Webdriver类

Mil*_*ilo 3 c# selenium class webdriver extending

我想添加一个静态字符串属性,该属性将跟踪当前正在运行的测试的名称。我认为解决此问题的最佳方法是使用WebDriver,因为它是唯一承载在我所有页面对象中的对象。

有没有一种方法可以扩展WebDriver类以添加可以设置的字符串属性?

编辑:由于WebDriver使用IWebDriver接口而不是我可能扩展该接口?

编辑#2:添加当前我必须加载WebDriver的示例:

protected static NLog.Logger _logger = LogManager.GetCurrentClassLogger();
protected static IWebDriver _driver;

/// <summary>
/// Spins up an instance of FireFox webdriver which controls the browser using a
/// FireFox plugin using a stripped down FireFox Profile.
/// </summary>
protected static void LoadDriver()
{
    ChromeOptions options = new ChromeOptions();
    try
    {
        var profile = new FirefoxProfile();
        profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream doc xls pdf txt");

        _driver = new FirefoxDriver(profile);
        _driver.Navigate().GoToUrl("http://portal.test-web01.lbmx.com/login?redirect=%2f");
    }
    catch(Exception e)
    {
        Console.WriteLine(e.Message);
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*kan 5

好吧,让我们停止半答案实践(即通用IWebDriver的完整实现),之后,您可以调用所有常规方法,就像在标准驱动程序中使用的那样,再加上附加的CurrentTest变量。

您可以添加更多的构造函数以获得最佳兼容性。

class MyWebDriver<T> where T : IWebDriver, new()
{
    IWebDriver driver;
    public string CurrentTest { get; set; }

    public MyWebDriver()
    {
        driver = new T();
    }

    public void Dispose()
    {
        this.driver.Dispose();
    }

    public IWebElement FindElement(By by)
    {
        return this.driver.FindElement(by);
    }

    public ReadOnlyCollection<IWebElement> FindElements(By by)
    {
        return this.driver.FindElements(by);
    }

    public void Close()
    {
        this.driver.Close();
    }

    public void Quit()
    {
        this.driver.Quit();
    }

    public IOptions Manage()
    {
        return this.driver.Manage();
    }

    public INavigation Navigate()
    {
        return driver.Navigate();
    }

    public ITargetLocator SwitchTo()
    {
        return this.SwitchTo();
    }

    public string Url
    {
        get
        {
            return this.driver.Url;
        }
        set
        {
            this.driver.Url = value;
        }
    }

    public string Title
    {
        get
        {
            return this.driver.Title;
        }
    }

    public string PageSource
    {
        get
        {
            return this.driver.PageSource;
        }
    }

    public string CurrentWindowHandle
    {
        get
        {
            return this.driver.CurrentWindowHandle;
        }
    }

    public ReadOnlyCollection<string> WindowHandles
    {
        get
        {
            return this.WindowHandles;
        }
    }
}

public class MyTest
{
    public void main()
    {
        MyWebDriver<FirefoxDriver> driver = new MyWebDriver<FirefoxDriver>();
        driver.CurrentTest = "Entering to google website with Firefox Driver";
        driver.Navigate().GoToUrl("www.google.com");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上,这个答案也是一半。您忘记提及“ using”语句:“使用OpenQA.Selenium;”使用“ System.Collections.ObjectModel”。无论如何,为此付出了很多努力。+1 (2认同)