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

Фотография

Одинаковые страницы


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

#1 Isidor2811

Isidor2811

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

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

Отправлено 30 августа 2018 - 08:05

Всем привет!
 
Есть небольшое замешательство и пока не пойму как лкчше делать не хочу дальше создавать тесты, так как потом нужно будет много переделывать.
 
Проблема: На прикрепленном изображении мы видим две страницы: Исходящий документ (OutComeDoc) и Внутренний документ (InternalDoc). Это два отдельных класса - использую page object.
 
Сначала работал над тестами для Исходящий документ. Мы находимся на вкладке адресат (тоже отдельный класс AddressTabOutcomeDoc) 
На этой вкладке есть 3 вебелемента с которыми я работаю: два поля и выпадающий список. Дальше пример кода для одного поля:
 
Поле наименование:
@FindBy(xpath = "//input[contains(@id,'lmr_contragents-cntrl')]")
WebElement addressNameField;

public AddressTabOutcomeDoc setAddressNameField(String name){
        waitHelper.waitForVisibility(addressNameField,10);     
        addressNameField.sendKeys(name);        
        return this;
}

Использую page factory я ищу елемент на странице, потом cоздаю метод с возвращаемым типом значения AddressTabOutcomeDoc

и возвращаю this, так как я не делаю переход на другую страницу, а просто возвращаю обновленый обект страницы(вкладки) Адресат

 

Дальше когда все поля заполнены мне нужно перейти на другую вкладку (страницу(отдельный класс)). Код для этого следующий:

 @FindBy(xpath = "//input[contains(@id,'lmr_contragents-cntrl-button')]")
    WebElement addAddresatButton;

    public SenderTabOutcomeDoc goToSenderTab(){
        waitHelper.waitForVisibility(addAddresatButton,10);
        addAddresatButton.click();
        return new SenderTabOutcomeDoc(driver);
    }

Здесь у меня уже идет переход на другую страницу, поэтому я возращаю новый обьект страницы(вкладки) SenderTabOutcomeDoc.

 

Дальше отрывок кода самого теста:

....
        addressTabOutComeDoc.setAddressNameField("Иванов И.И.");
        addressTabOutComeDoc.setRegisterNameField("Петров П.П.")
        addressTabOutComeDoc.selecCity("Киев");
        SenderTabOutComeDoc senderTabOutComeDoc = addressTabOutComeDoc.goToSenderTab
....

Теперь у меня есть Внутренний документ где есть точно такая же вкладка AddressTabInternalDoc, с точно такими же полями.

 

Как работать с этой вкладкой:

 

Вариант 1. Копипастить весь код с вкладки  AddressTabOutComeDoc на вкладку AddressTabInternalDoc с заменой возвращаемых значений в методах (c return new SenderTabOutcomeDoc(driver) на return new SenderTabInternalDoc(driver);)

 

Вариант2: Пробовал наследоваться от вкладки Адресат Исходящего Внутреним документом. Тоже не получаеться. В этом случае типы возвращаемых значений нужно делать void

 

Вариант3: Разработчики советуют использовать интерфейсы.

 

 

Как работать с одинаковыми страницами? 

 

Сейчас просто использовался вариантом 1. Но в случае изменения на этой вкладки нужно будет менять в двух местах

 

 

 

 

Прикрепленные файлы

  • Прикрепленный файл  123.jpg   67,62К   0 Количество загрузок:

  • 0

#2 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 30 августа 2018 - 09:34

Элементы, которые есть не только на одной странице - выносятся в отдельный класс, а потом путём композиции он добавляется на те страницы, где присутствует.


  • 2

#3 Isidor2811

Isidor2811

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

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

Отправлено 30 августа 2018 - 18:03

Элементы, которые есть не только на одной странице - выносятся в отдельный класс, а потом путём композиции он добавляется на те страницы, где присутствует.

Спасибо за ответ! Может еще найдется одна две ссылки хороших с материалом по композиции?


  • 0

#4 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 31 августа 2018 - 05:07

 

Элементы, которые есть не только на одной странице - выносятся в отдельный класс, а потом путём композиции он добавляется на те страницы, где присутствует.

Спасибо за ответ! Может еще найдется одна две ссылки хороших с материалом по композиции?

 

 

https://metanit.com/...atterns/1.2.php

 

 

Применительно к АТ - если вы используете ленивую инициализация через рефлексию (PageFactory.InitElements()), то достаточно просто поле/проперти обозначить в классе.

 

 

Приведу свой пример:

 

Есть страница:

[PageTitle("Новости")]
    public class NewsPage : BasePage
    {
        #region Elements

        [FindBy(Id = "dpp")] [ElementTitle("Пункт выдачи")]
        private ATextLabel _pvz;

        #region Blocks

        public NavigationBlock NavigationBlock { get; set; }

        #endregion

        #endregion

        public override bool IsLoaded => _pvz.Exists();
    }

В ней пропертя NagivationBlock - и есть класс, в котором находятся элементы, которые представлены не только на этой странице.


  • 1


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

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