Передать экземпляр IWebDriver конструктору класса, как параметр

Столкнулся с проблемой и не могу её решить. Есть PageObject-классы, в них методы, которые работают с этими страницами. В параметры каждому методу я передаю экземпляр IWebDriver. Хочу сделать так, чтобы он был передан один раз при создании объекта. Как это правильно сделать? Сам драйвер для работы инициализирую в другом классе через фабрику.

Инициализация драйвера:

public class TestsBase
    {
        public IWebDriver Driver { get; }

        InfoFromJsonFile _jsonFile = new InfoFromJsonFile();
        TestData _testData;

        protected TestsBase()
        {
            var browser = "Chrome";
            
            if (!Enum.TryParse(browser, out BrowserType browserType))
            {                
                throw new Exception("Browser parameter is not valid");
            }
            var driverFactory = new BrowserFactory();
            Driver = driverFactory.GetDriver(browserType);
        }

        [SetUp]
        public void Setup()
        {
            _testData = _jsonFile.GetTestData();
            Driver.Manage().Window.Maximize();
         }

При передаче параметра в конструктор возникает ошибка: введите сюда описание изображения

Пример кода страницы:

class EmailPage
    {
        private string _userName = "//span[text()='AutotestUser']";
        private string _accountOptionsButton = "//span[@class='user-account__name'][1]";
        private string _exitButton = "//span[contains(text(),'Выйти из сервисов Яндекса')]";    

        public string GetUserName(IWebDriver _driver)//ToDo: Thread sleep убрать
        {
            _driver.SwitchTo().Window(_driver.WindowHandles[1]);
            Thread.Sleep(3000);
            return _driver.FindElement(By.XPath(_userName)).Text;
        }

        public void LogOut(IWebDriver _driver)
        {
            _driver.SwitchTo().Window(_driver.WindowHandles[1]);
            Thread.Sleep(1000);
            _driver.FindElement(By.XPath(_accountOptionsButton)).Click();
            Thread.Sleep(1000);
            _driver.FindElement(By.XPath(_exitButton)).Click();
        }
    }

Хочу сделать, чтобы было вот так:

 class EmailPage
    {
        private string _userName = "//span[text()='AutotestUser']";
        private string _accountOptionsButton = "//span[@class='user-account__name'][1]";
        private string _exitButton = "//span[contains(text(),'Выйти из сервисов Яндекса')]";
        private IWebDriver _driver;

        public EmailPage(IWebDriver webDriver)
        {
            _driver = webDriver;
        }


        public string GetUserName()//ToDo: Thread sleep убрать
        {
            _driver.SwitchTo().Window(_driver.WindowHandles[1]);
            Thread.Sleep(3000);
            return _driver.FindElement(By.XPath(_userName)).Text;
        }

        public void LogOut()
        {
            _driver.SwitchTo().Window(_driver.WindowHandles[1]);
            Thread.Sleep(1000);
            _driver.FindElement(By.XPath(_accountOptionsButton)).Click();
            Thread.Sleep(1000);
            _driver.FindElement(By.XPath(_exitButton)).Click();
        }
    }


Ответы (1 шт):

Автор решения: Павел Панасюк

Проблема заключалась в том что производилась неправильная инициализация. Ниже указан правильный код.

public class EmailTest : TestBase
    {
        private MainPage _mainPage;
        private EmailPage _emailPage;
        private LoginPage _loginPage;
        private InfoFromJsonFile _jsonFile;
        private TestData _testData;
      
        public EmailTest()
        {
            _mainPage = new MainPage(Driver);
            _emailPage = new EmailPage(Driver);
            _loginPage = new LoginPage(Driver);
            _jsonFile = new InfoFromJsonFile();
            _testData = _jsonFile.GetTestData();
        }

        [SetUp]
        public void Setup()
        {
            Driver.Manage().Window.Maximize();
            Driver.Navigate().GoToUrl(_testData.YandexUrl);
        }
→ Ссылка