Цель передачи объекта веб-драйвера в конструктор базового класса объекта страницы - PullRequest
4 голосов
/ 03 октября 2019

Я видел объект веб-драйвера в конструкторе уровня базового класса объекта страницы следующим образом.

Пример:

public class PageObjectBase 
{
    protected WebDriver driver;

    public PageObjectBase(WebDriver driver){

        driver = this.driver;
    }
}

public class LoginPage extends PageObjectBase 
{

    public LoginPage(WebDriver driver){

        super(driver);
    }
}

Каковы преимущества и недостатки этого подхода? Почему мы всегда передаем объект драйвера базовому конструктору?

1 Ответ

4 голосов
/ 03 октября 2019

Инициализируя 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 в базовый класс как таковое обычно считается лучшей практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...