Добрый день. Коллеги, решил попробовать на проекте такую штуку как Html Elements. Собственно говоря тут и начинается, что то мистическое для (меня). Проект основан на архетипе Алексея Баранцевая хороший архетип
Подключил в pom зависимость и тут начинается самое интересное. Как любой начинающий, решил сделать тест на логин
Описал форму авторизации
package com.block;
@Name("Authorization form")
@FindBy(id = "id='cv-travel-agent-login-form")
public class AuthorizationForm {
@Name("Industry input")
@FindBy(id = "edit-arc")
public TextInput industryInput;
@Name("Email input")
@FindBy(id = "edit-email")
public TextInput emailInput;
@Name("Password input")
@FindBy(id = "edit-passwd")
public TextInput passwordInput;
@Name("Get started button")
@FindBy(id = "edit-submit")
public Button getStartedButton;
public void login(String industry, String email, String password) {
industryInput.sendKeys(industry);
emailInput.sendKeys(email);
passwordInput.sendKeys(password);
getStartedButton.click();
}
}
Описал страницу логина
package com.pages;
public class LoginPage {
public AuthorizationForm authorizationForm;
public LoginPage (WebDriver driver) {
PageFactory.initElements(new HtmlElementDecorator(driver), this);
}
public void loginAsTA(String industry, String email, String password) {
authorizationForm.login(industry, email, password);
}
}
Пробую вызывать в тесте
package com.wdtests;
public class TestTAHome {
public LoginPage loginPage = new LoginPage(driver);
public void id01testCase) throws InterruptedException {
loginPage.loginAsTA("87654321" , "ashipovalov@.com" , "2014");
Летит `NullPointerException, который показывает, что форма не проинициализирована. При это браузер стартуер, файлик xlsx, в ДатаПровайдере прочитан и данные идут в тест - то есть все скомпилировалось. Может кто нибудь сталкивался с нюансами инициализации блоков в Html Elements - буду очень благодарен за помощь
Не зря там это не важно (но в будущем будет важно при задании xpath не забывать ставить в начале точечку, которая будет значить “искать в блоке”)
А важно объявлять страничку с HtmlElement-ами, а не обычной PageFactory
public class LoginPage {
public AuthorizationForm authorizationForm;
public LoginPage (WebDriver driver) {
HtmlElementLoader.populatePageObject(LoginPage, driver);
}
public void loginAsTA(String industry, String email, String password) {
authorizationForm.login(industry, email, password);
}
}
Странно, я примеры брал из документации на GitHub. Хотя компилятору все равно не нравится, что LoginPage идет в параметрах…хотя это наверное странно…передавать в конструкторе ссылку на самого себя
Та да очень странно Ты получается вместо экземпляра класса, который проинициализировать хочешь кидаешь в метод сам класс, а это не правильно %)
Мой кусочек не из пейджи вырван, а из PageFactory своей и в том случае page это экземпляр класса…
Версия 1.12. А вот инструкция была какая то совсем древняя:
Раз уж пошла такая пьянка, и мне повезло сразу налететь на специалиста в HTML Elements. Может быть загляните сюда