Инициализируя WebDriver в базовом классе, вы можете использовать этот базовый класс, чтобы отслеживать ваш драйвер для легкой установки и демонтажа, способом, который изолирован от остальной части вашего кода.
Разработка наВаш код немного:
public class Base
{
public WebDriver driver;
public Base(WebDriver driver){
driver = this.driver;
}
[SetUp]
public WebDriver GetDriver()
{
// perform steps to initialize WebDriver
driver = this.driver
}
[TearDown]
public void DestroyDriver()
{
driver.Close();
driverQuit();
}
}
Теперь вы можете написать тестовые классы, которые наследуются от Base
. Это дает вам экземпляр WebDriver для использования в вашем коде, и вам не нужно выполнять Setup или Teardown в вашем тестовом классе:
public class MyTestClass : Base
{
// this test method will perform setup (inherited from base), run the test, then teardown (also inherited from base)
public void MyTest_1()
{
// perform webdriver actions in the test case
element = driver.FindElement(someSelector);
// initialize a PageObject
PageObject myPageObject = new PageObject(driver);
// perform some action using a PageObject
myPageObject.EnterTextIntoForm();
}
}
Вы также можете использовать этот экземпляр driver
для инициализацииPageObjects:
public class MyPageObject
{
public MyPageObject(driver)
{ }
public void EnterTextIntoField
{
// we can use the same driver instance here
driver.FindElement(someSelector).SendKeys(someField);
}
}
Таким образом, этот шаблон позволяет использовать ваш экземпляр WebDriver в тестовых примерах и объектах страницы для выполнения всевозможных функций тестирования. Вы можете абстрагировать установку и разбор в базовый класс, и вам не нужно будет снова и снова писать один и тот же метод установки и разрыва в своем коде.
Единственным недостатком этого подхода является то, что для написания фреймворка требуется больше времени, что усложняет код. Но в этом нет никакой обратной стороны, и абстрагирование вашего WebDriver в базовый класс как таковое обычно считается лучшей практикой.