C# 如何在save类测试中实现网页模式和添加接口

C# 如何在save类测试中实现网页模式和添加接口,c#,selenium,C#,Selenium,请参阅此结构(来自): 现在这是Sonclass: public class GmailPage : AbstractPage<GmailPageElementsMap, GmailPageValidator>, ITest { public GmailPage() : base("http:...") { } } 和验证程序: public class GmailPageValidator : AbstractPageValidator<GmailPageEleme

请参阅此结构(来自):

现在这是
Son
class:

public class GmailPage : AbstractPage<GmailPageElementsMap, GmailPageValidator>, ITest
{
    public GmailPage() : base("http:...") { }
}
和验证程序:

public class GmailPageValidator : AbstractPageValidator<GmailPageElementsMap>
{

}
公共类Gmail页面验证程序:AbstractPageValidator
{
}

正如您所看到的,我在我的
Gmail
类中实现了
ITest
,但是我没有收到任何编译错误,尽管我没有添加这两个接口方法(登录和注销)。

这是因为这些方法是在父
抽象页面中实现的。如果要强制
GmailPage
(以及所有其他派生类)实现
Login()
Logout()
请在父
AbstractPage
类中将它们声明为
abstract

public abstract class AbstractPage<M, V> : AbstractPage<M>, ITest
    where M : AbstractPageEmenetsMap, new()
    where V : AbstractPageValidator<M>, new()
{
    public AbstractPage(VendorInfo vendorInfo) : base(vendorInfo) { }

    public V Validate()
    {
        return new V();
    }

    public abstract void Login();

    public abstract void Logout();
}
public IWebElement EmailAddressTextBox
{
    get
    {
        return WebDriver.WebDriverWait.Until(ExpectedConditions.ElementIsVisible(By.Id("identifierId")));
    }
}
public class GmailPageValidator : AbstractPageValidator<GmailPageElementsMap>
{

}
public abstract class AbstractPage<M, V> : AbstractPage<M>, ITest
    where M : AbstractPageEmenetsMap, new()
    where V : AbstractPageValidator<M>, new()
{
    public AbstractPage(VendorInfo vendorInfo) : base(vendorInfo) { }

    public V Validate()
    {
        return new V();
    }

    public abstract void Login();

    public abstract void Logout();
}
public class GmailPage : AbstractPage<GmailPageElementsMap, GmailPageValidator>
{
    public GmailPage() : base("http:...") { }
    public override void Login()
    {
        throw new System.NotImplementedException();
    }

    public override void Logout()
    {
        throw new System.NotImplementedException();
    }
}