为多个类提供附加功能

时间:2018-05-11 13:15:25

标签: c# class selenium

Selenium有多个类,为某些浏览器提供机制。

所以有以下驱动程序(我最关心):FireFoxDriverChromeDriverInternetExplorerDriver

所有这些都继承自RemoteWebDriver

public class FireFoxDriver : RemoteWebDriver { ... }
public class ChromeDriver : RemoteWebDriver { ... }
public class InternetExplorerDriver : RemoteWebDriver { ... }

现在,我想为每个驱动程序提供其他功能/帮助程序,例如,转到URL并执行脚本:

public void Goto(string url)
{
    Navigate().GoToUrl(url);
    ExecuteScript("console.log('Using selenium');");
}

我想为每个驱动程序(FireFox,Chrome和IE)提供此功能,所以我可以这样做:

var chrome = new ChromeDriver();
chrome.Goto("https://google.com/");

所以是的,这样做的正确方法是什么?

基本上,我可以使用它来创建BaseRemoteWebDriver类,将我的功能放在那里,然后创建BaseChromeDriverBaseFireFoxDriverBaseIEDriver并继承自{ {1}}。

这样,我也许可以实现我想要的,但是我最终会有三个基本上是空的继承自BaseRemoteWebDriver的类,只包含生成的构造函数。

这是在C#中扩展类的唯一(有效)方法吗?

1 个答案:

答案 0 :(得分:1)

您也可以使用Extension Methods

然后你可以这样写:

public static class RemoteWebDriverExtensions
{
    public static void Goto(this RemoteWebDriver driver, string url)
    {
         driver.Navigate().GoToUrl(url);
         driver.ExecuteScript("console.log('Using selenium');");
    }
}

然后就这样称呼它:

RemoteWebDriver chromedriver = new ChromeDriver();
chromedriver.Goto("https://google.com");