Пытаюсь разобраться с паттерном Page object
и возник вопрос:
Пытаюсь автоматизировать тестирование сайта на котором есть
1)Страница входа(логин/пароль/кнопка входа). 2)После ввода логина и пароля нас переводит на страницу c "ВашАккаунт". На странице ВашАккаунт есть кнопка "Создать обьяление" После нажатия на кнопку происходит переход страницу с полями которые необходимо заполнить.
Для автоматизации тестирования страницы при использовании паттерна Page object
нужно:
Создать класс для логина:
public class AutoQALogin {
WebDriver driver;
By userName = By.id("user_login");
By password = By.id("user_pass");
By login = By.id("wp-submit");
public AutoQALogin(WebDriver driver){
this.driver = driver;
}
//Set user name in textbox
public void setUserName(String strUserName){
driver.findElement(userName).sendKeys(strUserName);
}
//Set password in password textbox
public void setPassword(String strPassword){
driver.findElement(password).sendKeys(strPassword);
}
//Click on login button
public void clickLogin(){
driver.findElement(login).click();
}
public void loginToAutoQA(String strUserName,String strPasword){
//Fill user name
this.setUserName(strUserName);
//Fill password
this.setPassword(strPasword);
//Click Login button
this.clickLogin();
}
}
Создать класс для создания обьявления:
public class AutoQAcreateMail{
WebDriver driver;
By captionName = By.xpath("//*[@id="title"]/div[1]/label");
By description= By.xpath("//*[@id="description"]/div[1]/label");
By createButton= By.xpath("//*[@id="button"]");
public AutoQAcreateMail(WebDriver driver){
this.driver = driver;
}
//Set tools name in captionName
public void setCaptionName(String captionName){
driver.findElement(captionName).sendKeys(captionName);
}
//Set description in description textbox
public void setDescription(String description){
driver.findElement(description).sendKeys(description);
}
//Click on create button
public void clickCreate(){
driver.findElement(createButton).click();
}
public void createMail(String strCaptionName, String strDescription){
//Fill Caption Name
this.setCaptionName(strCaptionName);
//Fill Description
this.setDescription(strDescription);
//Click Create button
this.clickCreate();
}
}
Выполнение теста
public class TestAutoQALogin {
WebDriver driver;
AutoQALogin objLogin;
AutoQAHomePage objHomePage;
@BeforeTest
public void setup(){
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://autoqa.pp.ua/wp-login.php");
}
@Test(priority=0)
public void test_Home_Page_Appear_Correct(){
objLogin = new AutoQALogin(driver);
//login to application
objLogin.loginToAutoQA("subscriber", "subscriberpass");
// go the next page
objMailPage = new AutoQAcreateMail(driver);
//Create mail
createMail("testFillCaption", "testFillDecRiption")
//Verify create mail
Assert.assertTrue(objMailPage.getHomePageDashboardName().toLowerCase().contains("profile"));
}
}
Так вот подскажите правильно ли я все делаю согласно паттерну Page Object
Это не лучший способ реализации данного шаблона, потому что в вашем классе AutoQAcreateMail
по сути действия выполняются над страницей AutoQALogin
, а это не есть хорошо.
Предлагаю ознакомиться с данным туториалом по реализации паттерна PageObject. Здесь основная идея заключается в том, что методы конкретной страницы возвращают новое состояние текущей страницы:
public LoginPage typeUsername(String username) {
driver.findElement(usernameLocator).sendKeys(username);
return this;
})
либо возвращают страницу, на которую осуществляется переход после выполнения определенного действия:
public HomePage submitLogin() {
driver.findElement(loginButtonLocator).submit();
return new HomePage(driver);
}
В вашем случае необходимо будет создать 3 класса: "Страница входа", "Страница Ваш аккаунт", "Страница с формой заполнения".
И никаких переходных классов наподобие AutoQAcreateMail
не нужно создавать. Если в приложении есть всего 3 страницы HTML, то всего будет 3 класса, описывающих страницы. Больше классов не следует создавать.
UPD. Единственный минус данной реализации - это то, что при большом количестве переходов между страницами каждый раз будет создаваться новый объект, т.е. необходимо задуматься о том, как хранить состояния страниц. Для этого можно использовать один из нижеперечисленных способов:
передавать в метод старый экземпляр страницы;
создать конструктор, инициализирующий состояние страницы.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Uri сохраняется и изображения подгружаются через uri(через SharedPreferences), но эти изображения еще и должны сохранятся, что я делаю через uri
Есть приложение, которое воспроизводит через интернет радио потокиПрисутствуют кнопки, чтобы останавливать проигрывание и продолжать его
Надо напечатать вот так пирамидукак сделать, чтобы она вот так была "отцентрована" по правому краю? Пробелами? Размер пирамиды задается с клавиатуры
Имеется прямоугольное отверстие размерами a и b, определить, можно ли его полностью закрыть круглой картонкой радиусом r