Как управлять общими страницами в шаблоне объекта страницы - PullRequest
0 голосов
/ 27 февраля 2020

Используя шаблон объекта страницы, я создавал класс для каждой страницы. Затем я понял, что на некоторых страницах есть похожие css классы, я повторял слишком много кода. Пример: BasePage = все наследуемые от него страницы (где установлены драйвер и ожидания) Page1, Page2, Page3 = все они имеют одинаковые свойства, поэтому я сгруппировал их в один класс под названием commonPage

Используя хорошую практику pageObjetcs в commonPage, я разделил на 3 другие страницы (чтобы они могли быть меньше): CommonPage_Header , CommonPage_Menu и CommonPage_List .

Проблема в том, что, например, page1 не может наследоваться от CommonPage_Header, CommonPage_Menu и CommonPage_Header. Как я могу справиться с этой ситуацией? Я уже пытался использовать абстрактные классы и интерфейсы.

Мне нужно, чтобы каждая страница наследовала от commonPage_Header , commonPage_Menu и commonPage_List с их каким-либо конкретным свойством

Примечание Некоторые из этих «определенных свойств» - это методы с телами, поэтому я не собираюсь использовать интерфейсы

public class BasePage(){
 //browsers and timeouts
}

public abstract class CommonPage_Header extends BasePage {
     public PanelHeader(WebDriver driver) {
            super(driver);
        }
//similar methods
}

public class Page1 extends CommonPage_Header {
//overwriting some methods of CommonPage_Header, but setting some specification for the page 1
//The problem: I need to use methods of CommonPage_Menu and CommonPage_List too :(
}```

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Зачем наследовать?

Использовать is-a, has-a отношения, избегать наследования, использовать композицию. Думайте о заголовке, меню как о компонентах и ​​вставляйте их в объекты страницы, используя наследование.

Например, я бы не помещал заголовок, меню в каждый объект страницы, который предлагает пользовательский интерфейс.

Почему бы не иметь один общий объект страницы, который имеет эти общие компоненты, вместо того, чтобы иметь их во всех объектах страницы?
Использовать структуру, которую легко понять, сначала подумайте о высоком уровне> define> рефакторинг.

0 голосов
/ 28 февраля 2020

Вам не нужно наследовать на своей странице. Пожалуйста, создайте страницу, где другие объекты страницы являются переменными, такими как

Page 1 Object has
CommonHeader ch1 =new CommonHeader
CommonFooter ch2-=new CommonFooter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...