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

Логи как инструмент тестировщика
онлайн, начало 21 мая
Автоматизация функционального тестирования
онлайн, начало 25 мая
Управление требованиями
онлайн, начало 25 мая
Школа тест-менеджеров v. 2.0
онлайн, начало 23 мая
Фотография

Page object model, Maven и еще пару вопросов

Page object model Page object Maven

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 Isidor2811

Isidor2811

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Дацюк Олег

Отправлено 14 Май 2018 - 08:42

Всем привет! 

 

Начал изучать автоматизацию в тестировании, и хочется с самого начала делать все правильно, поэтому изучил Page object model, и пока читал но не практиковал, то все было понятно, но когда начал писать код, то немного запутался.

 

Сейчас напишу как я это вижу с кусками кода.

 

1. Создаю класс MainPage в котором будут храниться локаторы с которыми я буду работать. Для примера создал myAccountButton и signUpButton. 

2. Создаю конструктор для инициализации WebDriver и WebDriverWait. 

3. Потом создаю методы.

 

Код ниже. Тут для меня все понятно. Разве что инициализация  WebDriverWait. Для себя я решил, что добавлю ее в конструктор вместе с WebDriver.

И тут первый вопрос! Надо ли это делать - добавлять в конструктор? Или можно с ним (WebDriverWait) работать по другому. Блин..прочитал даже мне стало не совсем понятно, но надеюсь что Вы поймете.

public class MainPage {

    WebDriver driver;
    WebDriverWait howLong;

    By myAccountButton = By.xpath("//div[contains(@class,'col-md-6')]//li[@id='li_myaccount']/a");
    By signUpButton = By.xpath("//li[@id='li_myaccount' and @class='open']//ul//child::li[2]/a");

    public MainPage(WebDriver driver, WebDriverWait howLong){
        this.driver = driver;
        this.howLong = howLong;
    }

    public void clickMyAccountButton(){
        howLong.until(ExpectedConditions.elementToBeClickable(myAccountButton));
        driver.findElement(myAccountButton).click();
    }
    public void clickSignUpButton(){
        howLong.until(ExpectedConditions.elementToBeClickable(signUpButton));
        driver.findElement(signUpButton).click();
    }
}

Дальше: 

Я создаю класс SignUp уже в другом пакете и тут пишу код для самого теста.

 

Вопрос №1. Я создал метод driverStart() с аннотацией @BeforeMethod и там я уже создаю обьект WebDriver driver,  WebDriverWait howLong. 

Это можно делать в этом методе? Или же дальше есть метод signUpTest() и эту инициализацию нужно делать в нем?

 

Вопрос №2. System.setProperty("webdriver.chrome.driver","E:\\chromedriver.exe"); можно прописать в pom.xml?

public class SignUp {

    WebDriver driver;
    WebDriverWait howLong;

    @BeforeMethod
    public void driverStart(){
        System.setProperty("webdriver.chrome.driver","E:\\chromedriver.exe");
        driver = new ChromeDriver();
        howLong = new WebDriverWait(driver,30);
        driver.manage().window().maximize();
        driver.get("https://www.phptravels.net/");
    }

    @Test
    public void signUpTest(){
       MainPage mp = new MainPage(driver,howLong);
       mp.clickMyAccountButton();
       mp.clickSignUpButton();
    }

    @AfterMethod
    public void quiteDriver(){
        driver.quit();
    }

}

Вообщем объяснил немного не так как хотел. Просто сделайте замечания по коду. Хочется по крайней мере начать правильно. Заранее спасибо.


  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 742 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 14 Май 2018 - 14:33

1)Неправильно ты понял PageObject
 
public void clickMyAccountButton - ты либо возвращай this, либо следующий класс. Но никак не void
 
2)Ты мешаешь неявные Implicit  и явные Explicit(WebDriverWait и ExpectedCondition) ожидания. Поэтому получается ерунда
 
3)По поводу "System.setProperty("webdriver.chrome.driver","E:\\chromedriver.exe"); можно прописать в pom.xml?"
 
Используют эту либу:
 

  • 0

#3 Little_CJIOH

Little_CJIOH

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 083 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 14 Май 2018 - 16:22

Таки концепцию PageObject, как инкапсуляцию взаимодействия со страницей в объект, топикстартер понял вполне. 

 

Почему любой экшн-метод пейдж-обжекта должен возвращать пейдж-обжект станет понятно как только в тесте появится второй ПО.

Микс явных и неявных ожиданий к концепции ПО отношения не имеет. А почему это плохо - уже на всех конференциях доложили и во всех блогах написали, гуглите.


  • 0

#4 Isidor2811

Isidor2811

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Дацюк Олег

Отправлено 15 Май 2018 - 06:06

Почему любой экшн-метод пейдж-обжекта должен возвращать пейдж-обжект станет понятно как только в тесте появится второй ПО.

ПО? извините за тупость, но розшифруйте пожалуйста аббревиатуру 

А то я и прям не понимаю зачем возвращать что то, если метод просто делает какое то действие. И набор таких методов даст мне проверку тест кейса


  • 0

#5 Isidor2811

Isidor2811

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Дацюк Олег

Отправлено 15 Май 2018 - 06:12

 

2)Ты мешаешь неявные Implicit  и явные Explicit(WebDriverWait и ExpectedCondition) ожидания. Поэтому получается ерунда
 
 

 

Микс явных и неявных ожиданий к концепции ПО отношения не имеет. А почему это плохо - уже на всех конференциях доложили и во всех блогах написали, гуглите.

 

Хоть убейте не могу понять где я делаю микс. Согласно этой ссылке я использую только явные ожидания https://kreisfahrer....ozhidaniya.html

 

а вот собстевенно код от туда 

Более предпочтительно использовать WebDriverWait и ExpectedCondition:
WebDriver driver = new FirefoxDriver();
driver.get("http://some_url");
WebElement dynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("dynamicElement_id")));

Если я что то не понял, ткните пожалуйста носом на ссылку, а то это довольно таки важная тема


  • 0

#6 Little_CJIOH

Little_CJIOH

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 083 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 15 Май 2018 - 11:05

 

Почему любой экшн-метод пейдж-обжекта должен возвращать пейдж-обжект станет понятно как только в тесте появится второй ПО.

ПО? извините за тупость, но розшифруйте пожалуйста аббревиатуру 

А то я и прям не понимаю зачем возвращать что то, если метод просто делает какое то действие. И набор таких методов даст мне проверку тест кейса

 

это я устал писать "пэйдж обджект".

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

 

ЗЫ: С возвратом ПО, кстати, не единственное возможное решение.


  • 0


Программирование на С# для тестировщиков
онлайн, начало 1 июня
Эффективное использование TestNG и JUnit
онлайн, начало 25 мая
Selenium WebDriver: полное руководство
онлайн, начало 15 июня
Автоматизированное тестирование Android-приложений
онлайн, начало 13 июня




Темы с аналогичным тегами Page object model, Page object, Maven

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале