C# + WebDriver PageFactory + Nunit 3 с возможностью распараллеливания

Я реализовал следующую настройку в своей структуре автоматизации:

  • С# Selenium веб-драйвер

  • IObjectContainer

  • Спецфлоу

  • Nunit 3 Распараллеливаемый

  • Xpaths (и все селекторы) просто определяются как «частная константная строка».

пример кода HomePageSteps (рабочий код):

[Binding]
    public class HomePageSteps
    {
        private IWebDriver _driver;

        public HomePageSteps(IWebDriver driver)
        {
            _driver = driver;
        }


        private const string LogoTwo = "//img[@alt='xpath']";

        [Given(@"I navigation to site")]
        public void GivenINavigationToSite()
        {
            _driver.Navigate().GoToUrl("http://website.com/");

            _driver.FindElement(By.XPath(LogoTwo)).Click();
        }
}

Но я хочу использовать атрибут webDriver PageFactory для обработки объектов моей страницы. Что я сделал / использовал в других проектах, которые не используют «Nunit 3 Parallelizable».

пример кода (НЕ рабочий код):

    [Binding]
    public class HomePageSteps
    {
        private IWebDriver _driver;

        public HomePageSteps(IWebDriver driver)
        {
            _driver = driver;
        }


        [FindsBy(How = How.XPath, Using = "//img[@alt='xpath']")]
        public IWebElement logo { get; set; }


        [Given(@"I navigation to site")]
        public void GivenINavigationToSite()
        {
            _driver.Navigate().GoToUrl("http://website.com/");

            logo.Click();
        }
}

Проблема здесь в том, что «логотип» имеет значение Null. И я не уверен, связана ли эта проблема с ограничением использования Nunit 3 Parallelizable с PageFactory, или с specflow, или с чем-то еще в моем дизайне.

Кто-нибудь может дать некоторые рекомендации?


person Benny Meade    schedule 18.11.2016    source источник


Ответы (1)


Причина, по которой Page Factory не инициализирует нестатический драйвер, заключается в том, что он использует статический драйвер. Если конструктор для страницы определен следующим образом:

ChromeDriverService service = ChromeDriverService.CreateDefaultService(startDirectory + @"\Drivers\", "chromedriver.exe");
    IWebDriver Static driver = new ChromeDriver(Service);
            public HomePageSteps()
            {
                PageFactory.InitElements(driver, this);
            }

Это позволит вам использовать элементы так, как вы их определили.

Пожалуйста, дайте мне знать, если вы нашли какую-либо другую работу вокруг этого.

person Community    schedule 22.08.2017