C# 为多个类提供附加功能

C# 为多个类提供附加功能,c#,class,selenium,C#,Class,Selenium,Selenium有多个类为某些浏览器提供机制 因此有以下驱动程序(我最关心):FireFoxDriver,ChromeDriver,InternetExplorerDriver 所有这些都继承自RemoteWebDriver public class FireFoxDriver : RemoteWebDriver { ... } public class ChromeDriver : RemoteWebDriver { ... } public class InternetExplorerDri

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

因此有以下驱动程序(我最关心):
FireFoxDriver
ChromeDriver
InternetExplorerDriver

所有这些都继承自
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
类,将我的功能放在其中,然后创建一个
BaseChromeDriver
BaseFireFoxDriver
BaseIEDriver
并从
BaseRemoteWebDriver
继承

public class FireFoxDriver : RemoteWebDriver { ... }
public class ChromeDriver : RemoteWebDriver { ... }
public class InternetExplorerDriver : RemoteWebDriver { ... }
通过这种方式,我也许可以实现我想要的,但是最终我将拥有三个基本上为空的类,它们继承自
BaseRemoteWebDriver
,只包含生成的构造函数

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

您也可以使用

然后你可以这样写:

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

所以你想要一个这样你就不必调用
driver.Navigate().gotour
?是的,所以我可以简单地调用
driver.Goto
,例如。但是这怎么比
driver.Navigate().gotour
更好呢?除了混淆你对其他查看你代码的人所做的事情之外,这不是更好或更短的问题,而是在一个地方有额外的功能,我可以在一秒钟内修改,无论何时我导航到一个页面。我的意思是,为什么我要重复相同的代码多次。。。如果有更改,请深入研究多个文件。@DavidG whops忘记了函数定义中的static看起来很有希望,我将尝试一下!