Инициализировать все страницы на странице TestBase Правильно или неправильно? - PullRequest
0 голосов
/ 15 марта 2019

Я новичок в Selenium и Java и пытаюсь выяснить некоторые вещи.Квесты просты, это хорошая привычка инициализировать все страницы приложения из TestBase?например,

public class TestBase {

    protected static WebDriver driver;
    protected static PageBase base;
    protected static HomePage home;


    private void initPages()
    {
        base = new PageBase();
        base.setUpWebDriver(driver);
        home = new HomePage();
        home.setUpWebDriver(driver);
    }

    private void webDriverSetUp()
    {
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
    }

    private void webDriverClose() throws InterruptedException {
        if(driver!=null)
        {
            Thread.sleep(5000);
            driver.close();
        }
    }


    public void webDriverInit()
    {
        webDriverSetUp();
        initPages();
    }

    public void webDriverTerminate() throws InterruptedException {
        webDriverClose();
    }

}

или нет, поэтому каждый раз, когда вам нужно передать драйвер на страницу, которую вы хотите проверить.Является ли нагрузка настолько большой, что это может вызвать проблемы во время выполнения теста?Заранее спасибо за любые ответы.

1 Ответ

0 голосов
/ 15 марта 2019

Похоже, что вы вращаете два разных драйвера одновременно.Один для PageBase и один для HomePage.Я настоятельно рекомендую вам запускать только один исполняемый файл драйвера за один раз, если вы не используете многопоточность или не используете сетку селена.Или они просто добавляют ссылку на драйвер BaseTest в какое-то поле в объектах PageObjects?Не уверен в любом случае из приведенного выше кода.

Кроме того, почему у вас есть методы настройки драйвера на базовой странице и в базовом тесте?(page.setUpWebDriver () vs test.webDriverSetUp ()) Немного смущен этим.Я бы обработал все настройки драйвера в базовом тесте (вместе со всеми прямыми ссылками на него).Удалите все, что связано с этим, с моей страницы, на мой взгляд.Кроме того, я могу неправильно это интерпретировать.

Кроме того, я бы удалил экземпляры домашней и базовой страницы из TestBase.Вместо этого, если вы НЕ используете многопоточность и не собираетесь этого делать, я бы использовал синглтоны для объектов страниц.Пусть классы объектов страницы предоставляют статическое свойство, которое указывает на экземпляр объекта страницы, и сохраняют их все в каждом объекте страницы.Кроме того, базовая страница должна быть доступна с домашней страницы по умолчанию.Вы расширяете это, верно?Этому не нужен нигде экземпляр.

Синглтоны имеют дополнительный бонус, позволяющий очень легко раскрутить что-то по мере необходимости.Этакий процесс с отложенной загрузкой.Свойство, которое предоставляет статический объект self, должно инициализировать что-либо на странице, когда на него ссылаются, и только тогда.Также вы можете захотеть добавить логику, которая устанавливает флаг, чтобы сообщить странице, что она грязная.Если веб-драйвер перемещается или обновляется, этот флаг должен сообщать всем объектам страницы (если у вас есть ссылки IWebElement хранилища вашего ПО), что он должен повторно получить всю страницу элементов при повторной ссылке - что предотвращает ошибки устаревших элементов.

Хотя это предположения, основанные на том, что я читаю, без другого исходного кода, поэтому игнорируйте все, что является здесь неправильным предположением.

Пример синглтона, основанный на моем предложении выше;вид псевдокода:

public class LoginPage : BasePage {

    public static LoginPage Instance {
        get {
            if(_loginPage == null || BaseTest.IsDirty) {
                _loginPage = new LoginPage();
            }
            return _loginPage;
        }
    }
    private _loginPage;

    public IWebElement PasswordField ...
    ... any selenium logic that auto-populates values of page elements.

}

Я настоятельно рекомендую избегать автоматического заполнения объектов страницы значениями.Лично я предпочитаю сделать PageObjects единственным хранилищем идентификаторов, идентифицирующих селектор элемента страницы, а не экземпляром реального объекта.Это исключает большинство случаев, когда вам нужно беспокоиться об устаревших элементах и ​​отслеживать их.

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