Как использовать дженерики и фабричный дизайн для создания экземпляров классов PageObject - PullRequest
0 голосов
/ 23 июня 2019

Я разрабатываю селеновые рамки в c #. Классы страниц создаются с использованием фабричного дизайна, чтобы скрыть логику создания экземпляров, и я хотел бы иметь возможность создавать экземпляры класса, используя var myPageClass = HelperSelenium.Instance(MyPageClass) вместо var myPageClass = MyPageClass.Instance(driver)

Я пытался создать универсальную функцию в классе HelperSelenium, но пока не могу полностью понять, как работают универсальные функции.

Пример класса PageObject (обратите внимание, я использую метод Instance для создания экземпляра класса

public class HomePage : BasePage
{       
    private HomePage(IWebDriver driver, CountryEnum enum) : base(driver) { }

    private static HomePage homePage { get; set; }

    public static HomePage Instance(IWebDriver driver, CountryEnum enum)
    {
        switch (enum)
        {
             case CountryEnum.Sweden:
                 HomePage = new HomePage_SWE(driver);
                 break;
             case CountryEnum.Germany:
                 HomePage = new HomePage_GER(driver);
                 break;
             case CountryEnum.Italy:
                 HomePage = new HomePage_ITA(driver);
                 break;
             default:
                 HomePage = new HomePage_UK(driver);
                 break;
        }

        return homePage;
    }

...
}
public T InstancePage<T>() where T : BasePage
{
    return (T).Instance(WebDriver, CountryEnum.Sweden);
}
Error   CS0119  'T' is a type, which is not valid in the given context  InfrastructureSelenium  C:\testSelenium\Infrastructure\Helper\HelperSelenium.cs 140 Active
Error   CS0119  'T' is a type parameter, which is not valid in the given context    InfrastructureSelenium  C:\testSelenium\Infrastructure\Helper\HelperSelenium.cs 140 Active
...