Передать экземпляр 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);
}