C#接口?具有相同名称的类别方法

时间:2018-07-09 03:25:25

标签: c# selenium selenium-webdriver

如何做这样的事情。因此,情况是我在另一个平台(移动版,桌面版)中有2种“ DoLogin”方法

我想使代码更具可读性,看起来像这样

例如。

如果我想登录到桌面版本。

webDriver.Desktop.Dologin(accountModel)

如果我想登录到移动版本。

webDriver.Mobile.DoLogin(accountModel)

这是我目前拥有的。

public static class Desktop
{
    public static void DoLogin(this ChromeDriver webDriver, AccountModel account)
    {

    }
}

public static class Mobile
{
    public static void DoLogin(this ChromeDriver webDriver, AccountModel account)
    {

    }
}

编辑

这是我目前正在组织的工作。

public static class Desktop
    {
        public static void DesktopDoLogin(this ChromeDriver webDriver, AccountModel account)
        {

        }
    }

    public static class Mobile
    {
        public static void MobileDoLogin(this ChromeDriver webDriver, AccountModel account)
        {

        }
    }

每当我调用一个方法时,请说台式机。

webDriver.DesktopDoLogin(account)

webDriver.MobileDoLogin(account)

我想这很重要。

4 个答案:

答案 0 :(得分:0)

我个人不喜欢使用扩展方法。这是一个偏好。我很可能会如下实现它。我以前从未使用过Selenium,所以我不确定WebDriver是/实现了什么接口,但是您可以了解该模式的要旨。

public interface IPlatform
{
    void Login<T>(T model);
}

public class Desktop : IPlatform
{
    private readonly WebDriver _webDriver;
    public Desktop(WebDriver driver)
    {
        _webDriver = driver;
    }
    public void Login<T>(T model)
    {
        // do login here
    }
}
// usage
IPlatform desktop = new Desktop(/*chromedriver*/); // or inject
desktop.Login<AccountModel>(model);

答案 1 :(得分:0)

在我看来,您可以得到这个:

void Main()
{
    var webDriver = new ChromeDriver();

    webDriver.Desktop.DoLogin(new AccountModel());
    webDriver.Mobile.DoLogin(new AccountModel());
}

这样做:

public interface IDoLogin
{
    void DoLogin(AccountModel account);
}

public class Desktop : IDoLogin
{
    private ChromeDriver _webDriver;

    public Desktop(ChromeDriver webDriver)
    {
        _webDriver = webDriver;
    }

    public void DoLogin(AccountModel account) { }
}

public class Mobile : IDoLogin
{
    private ChromeDriver _webDriver;

    public Mobile(ChromeDriver webDriver)
    {
        _webDriver = webDriver;
    }

    public void DoLogin(AccountModel account) { }
}

public class ChromeDriver
{
    public Desktop Desktop;
    public Mobile Mobile;

    public ChromeDriver()
    {
        this.Desktop = new Desktop(this);
        this.Mobile = new Mobile(this);
    }
}

答案 2 :(得分:0)

您可以使用诸如此类的静态空隙轻松地做到这一点:-

Public class desktop {
    Public static void DoLogin(AccountModel val){
        //code for desktop
    }
}

Public class mobile {
    Public static void DoLogin(AccountModel val){
        //code for mobile
    }
}

Public class webDriver{
    Public static desktop Desktop;
    Public static mobile Mobile;
}

//usage
webDriver.mobile.DoLogin(...);
//or
mobile.DoLogin();

答案 3 :(得分:0)

为什么不使用接口?

使用DoLogin方法创建一个通用接口,并在Desktop和Mobile类中实现该接口。

常用界面:

public interface ICommon
 {
   void Login<T>(T model);
 }

在您的桌面和移动类中实现此界面。