Перейти к содержимому

sanchos0210

Регистрация: 07 дек 2017
Offline Активность: 20 дек 2017 10:29
-----

Мои темы

Как вынести создание объекта из теста

07 декабря 2017 - 12:45

Доброго времени суток!

Я недавно начал изучать автоматизированное тестирование с помощью selenium; пишу на Java. В качестве тестового фреймворка использую TestNG.

Также недавно познакомился с таким паттерном, как PageObject и на основе этого паттерна проектирую архитектуру автотестов. В данный момент имею следующую архитектуру: классы с тестами, которые наследуются от базового тестового класса (BaseTest); отдельно лежат классы с пэйджами, которые наследуются от базового пейджа (BasePage) и в самом вверху лежит абстрактный класс API, который наследуют два класса: BaseTest и BasePage. В этом классе API лежат хелперы и константы, которые я использую и в пейджах и в тестах. Вот в крации об архитектуре.

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

Пример: допустим есть тестовый класс LoginTests в котором лежит один тестовый метод loginWithInvalidEmail(). в этом тестовом методе я использую объект класса LoginPage. Я хочу это создание объекта вынести из метода в тестовый класс, вот как в в моем коде ниже: 

 

public class LoginTests extends BaseTest {

 

LoginPage loginPage = new LoginPage(driver);

@Test
public void loginWithInvalidEmail() {
open(TESTPROLINE);
loginPage.emailInput.sendKeys(invalidEmail);
loginPage.passwordInput.sendKeys(PASSWORD);
loginPage.submitButton.click();
assertThat(textToBePresentInElement((loginPage.errorMessage), "Email or password is incorrect!"));
}

 

Но проблема в том, что когда я запускаю этот тест, то происходит следующее: открывается браузер, он настраивается(размер на полный экран, задаются неявные ожидания) и после этого загружается моя страница TESTPROLINE и когда дело доходит до строчки "loginPage.emailInput.sendKeys(invalidEmail);", то тест падает с ошибкой java.lang.NullPointerException. я так понимаю тут проблема в базовом тестовом классе, в котором происходит та самая "настройка браузера", поэтому привожу также код из класса BaseTest:

public class BaseTest extends API {

public static WebDriver driver ;

@BeforeMethod
public void initializeDriver() {
System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
}

@AfterMethod
public void tearDown() {
// Close all browser windows and safely end the session
driver.quit();
}

}

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