Делаю свои первые попытки освоить автоматизацию. Написал следующие классы:
BasePage
public class BasePage {
@FindBy(css = ".toast-success")
private WebElement message;
WebDriver driver;
BasePage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
void login(){
LoginPage loginTPage = new LoginPage(driver) ;
loginTPage.goToLoginPage();
loginTPage.enterName("IT");
loginTPage.enterPassword("IT");
loginTPage.clickLoginButton();
}
public String getTitlePage(){
return driver.getTitle();
}
public boolean checkMessage() {
Assert.assertTrue(message.isDisplayed());
return true;
}
void contextClick(WebElement element){
Actions actions = new Actions(driver);
actions.contextClick(element).build().perform();
}
void doubleClick(WebElement element) {
Actions actions = new Actions(driver);
actions.doubleClick(element).build().perform();
}
}
LoginPage
public class LoginPage extends BasePage {
//*********Constructor*********
public LoginPage(WebDriver driver) {
super(driver);
}
//*********Page Methods*********
public void goToLoginPage() {
driver.get(baseURL);
}
public void enterName(String username) {
this.username.clear();
this.username.sendKeys(username);
}
public void enterPassword(String password) {
this.password.clear();
this.password.sendKeys(password);
}
public MainPage clickLoginButton() {
loginButton.click();
return new MainPage(driver);
}
public void verifyLoginUserNameError(String expectedText) {
Assert.assertEquals(expectedText, errorMessagePassword.getText());
}
public void verifyLoginPasswordError(String expectedText) {
Assert.assertEquals(expectedText, errorMessageUsername.getText());
}
}
MainPage
public class MainPage extends BasePage {
private LoginPage loginPage = new LoginPage(driver);
//*********Web Elements*********
@FindBy(xpath = "//span[@class='username']")
private WebElement username;
@FindBy(id = "btn-mdl-int")
private WebElement serviceButton;
@FindBy(id = "btn-mdl-all")
private WebElement moduleButton;
@FindBy(id = "6-10")
private WebElement enumModule;
@FindBy(id = "18-12")
private WebElement exportBDModule;
@FindBy(id = "7-10")
private WebElement calculationModule;
@FindBy(id = "2-10")
private WebElement userModule;
@FindBy(id = "9-10")
private WebElement groupUserModule;
@FindBy(id = "8-10")
private WebElement unitModule;
@FindBy(id = "5-10")
private WebElement referenceModule;
@FindBy(id = "12-10")
private WebElement interfaceModule;
@FindBy(id = "3-10")
private WebElement treeTypeModule;
//*********Page Methods*********
public MainPage(WebDriver driver) {
super(driver);
}
public void openModule(WebElement module) {
loginPage.login();
moduleButton.click();
module.click();
}
public String checkHeader() {
return driver.findElement(By.xpath("//div[@class='page-content']//span[.='Главная']")).getText();
}
public String checkUsername() {
return username.getText();
}
public String checkURL() {
return driver.getCurrentUrl();
}
public String checkElementWall() {
return driver.findElement(By.xpath("//div[@id='freewall']/legend[.='Оборудование']")).getText();
}
public boolean getFooter() {
driver.findElement(By.xpath("//div[@class='page-footer-inner']")).getText();
return true;
}
public boolean checkServiceButton() {
serviceButton.isDisplayed();
return true;
}
public boolean CheckModuleButton() {
moduleButton.isDisplayed();
return true;
}
}
BaseTest
public class BaseTest {
protected WebDriver driver;
@BeforeClass
public void setup() {
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
@AfterClass
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
}
И два теста этих страниц
LoginPageTest
public class LoginTest extends BaseTest {
@DataProvider
public Object[][] invalidLoginData() {
return new Object[][]{
{" ", " "},
{" ", "Test"},
};
}
@DataProvider
public Object[][] invalidPassData() {
return new Object[][]{
{"Test", " "},
{"IT", "it"},
{"it", "IT"}
};
}
@Epic(value = "Проверка модуля логина в систему")
@Test(dataProvider = "invalidLoginData")
@Feature("Авторизацияв системе")
@Description(value = "Проверка логина в систему с некорректным именем пользователя")
public void invalidLoginTest(String username, String password) {
LoginPage loginPage = new LoginPage(driver);
loginPage.goToLoginPage();
loginPage.enterName(username);
loginPage.enterPassword(password);
loginPage.clickLoginButton();
loginPage.verifyLoginUserNameError("Неверное имя пользователя или пароль");
loginPage.verifyLoginPasswordError("Поле Имя пользователя обязательно для заполнения.");
}
@Epic(value = "Проверка модуля логина в систему")
@Test(dataProvider = "invalidPassData")
@Feature("Авторизацияв системе")
@Description(value = "Проверка логина в систему с некорректным паролем")
public void invalidPassTest(String username, String password) {
LoginPage loginPage = new LoginPage(driver);
loginPage.goToLoginPage();
loginPage.enterName(username);
loginPage.enterPassword(password);
loginPage.clickLoginButton();
loginPage.verifyLoginUserNameError("Неверное имя пользователя или пароль");
}
@Epic(value = "Проверка модуля логина в систему")
@Test
@Feature("Авторизацияв системе")
@Description(value = "Проверка логина в систему с корректными данными")
public void validLoginTest() {
LoginPage loginPage = new LoginPage(driver);
loginPage.goToLoginPage();
loginPage.enterName(username);
loginPage.enterPassword(password);
loginPage.clickLoginButton();
MainPage mainPage = new MainPage(driver);
String string = " Главная ";
Assert.assertEquals(mainPage.getTitlePage().trim(), string.trim(),"Invalid page title");
Assert.assertEquals(mainPage.checkUsername(), USERNAME, "Wrong username");
Assert.assertEquals(mainPage.checkURL(), HOME_URL, "Wrong URL mainpage");
}
}
MainPageTest
public class MainPageTest extends BaseTest {
private MainPage mainPage = new MainPage(driver);
@Epic(value = "Проверка главной страницы")
@Feature(value = "Проверка элементов страниц")
@Test
@Description(value = "Проверка имени пользователя")
public void testCheckUsername() {
Assert.assertEquals(mainPage.checkUsername(), USERNAME, "Wrong username");
}
@Epic(value = "Проверка главной страницы")
@Feature(value = "Проверка элементов страниц")
@Test
@Description(value = "Проверка URL страницы")
public void testCheckURL() {
Assert.assertEquals(mainPage.checkURL(), HOME_URL, "Wrong URL mainpage");
}
.............................
@Epic(value = "Проверка главной страницы")
@Feature(value = "Проверка элементов страниц")
@Test
@Description(value = "Проверка футера")
public void testGetFooter() {
Assert.assertTrue(mainPage.getFooter());
}
}
}
С прогоном теста страницы логина проблем нет, всё прекрасно. Проблемы начинаются с прогоном теста главной страницы. Сразу рагуется на java.lang.NullPointerException. Вроде понимаю суть проблемы, не использую объект, который создается при успешном логине в методе
public MainPage clickLoginButton() {
loginButton.click();
return new MainPage(driver);
}
Но каким образом переписать MainPageTest пока понять не могу. Вариант с
loginPage.clickLoginButton().checkUsername();
или
loginPage.clickLoginButton().openModule(mainPage.getUnitModule());
мне кажется неправильным.
Подскажите пожалуйста возможные варианты.