Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Нужно создать класс для перехода по меню. Как лучше описать меню сайта?

java
maven
webdriver
testng
javascript
Теги: #<Tag:0x00007f7b6467c140> #<Tag:0x00007f7b64683ee0> #<Tag:0x00007f7b64683c10> #<Tag:0x00007f7b64683a08> #<Tag:0x00007f7b646837d8>

(Alex) #1

Подскажите пожалуйста как лучше всего на java описать меню класса?

Например в меню есть 253 пункта для каждого из них я создам в классе Menu переменную. После чего необходимо создать метод, который будет отвечать за переход (допустим для перехода используется javascript, чтобы не открывать меню). Я правильно понимаю логику? Или на каждую переменную нужно создавать метод для перехода к нему? Спасибо.


(Sewa Makhinya) #2

Что именно тестируете, какова роль класса? Это тест работоспособности меню? Или это прекондишены к другому тесту? На чём?


(Alex) #4

Тестирую админку. Нет, я создаю framework, но появилась проблема в
понимании ООП скорее всего. Использую: java, webdriver, TestNG, за
основу взят шаблон PageObject.


(Taras) #5
public <T extends Page> T openMenuPage(String menuItem, Class<T> meanuPageObjectClazz) {
		menuElement.findElement(By.xpath("бла бла бла 'menuItem' ")).click(); //локатор елемента по имени елемента меню
		return PageFactory.initElements(webDriver, meanuPageObjectClazz);
}

(Alex) #6

Я тоже так предполагал сделать, но как человек будет знать какое название из (а их 253 пункта меню), он должен использовать вместо menuItem?

Вот тут есть ответ: там предлагают описать каждый элемент в виде переменной. Но опять же как я буду переключатся по меню?


(5am) #7

можно вынести в константы…
не ужели сейчас вам нужны все 253 пункта для начала разработки тестов ? я бы добавлял их по мере необходимости.


(Yaroslav Pernerovskyy) #8

как человек будет знать какое название из (а их 253 пункта меню), он должен использовать вместо menuItem

Если вы создаете автотест, то человек вообще не должен этого знать, это должно быть описано в дата провайдере, а метод обхода/клика/проверки и т.п. этого меню, должен как параметр принимать значение типа возвращаемого этим датапровайдером.
Если же вам нужно в процессе написания тестов, использовать какое то конкретное значение из “меню-выпадайки”, то проще всего создать enum в котором будет храниться все, что относиться к этим данным. Но блин, меню на 253 пункта… это явно перебор) Что за данные в этом меню?


(Alex) #9

Обычная Админка для Интерактивного Телевидения (Сериалы, учетные записи, тарифные планы, фильмы, тв, отчеты, настройки пользовательского интерфейса, и многое, многое другое). Дело в том что я пока не пишу автотесты я проектирую фрэймворк. Поэтому и сам вопрос в принципе заключается в том, как описать “меню”.


(Sergey Korol) #10

Как уже сказали выше, параметризованный enum вам в помощь. В качестве параметров можно хранить либо локаторы, либо href и т.п. Ну а универсальный метод clickMenuItem будет брать значение аргумента, переданного enum value, обрабатывая его с учетом выбранного подхода. И опять-таки, не стоит описывать все 250+ элементов. Добавляйте их по мере надобности в тестах.


(Евгений Бухгаммер) #11

250 элементов…когда-нибудь и админов будут считать за юзеров и людей, которым не чуждо удобство :slight_smile:


(Alex) #12

Спасибо огромное за ответы, вы очень помогли.


(Taras) #13

не совсем понял контекст вашего предложения " но как человек будет знать какое название из (а их 253 пункта меню), он должен использовать вместо menuItem" - ну Ви же тести пишите, Ви должни описать ети все пункти ?)


(5am) #14

немного оффтопика, интересно было бы увидеть скриншот этого “меню-монстра” :slight_smile:


(Alex) #15

Вы немного не поняли, например есть человек который пишет автотест:

@Test
public void testSerials(){
pageManager.homePage.getMenu().open("******").createForm(); // А что он должен вписать вместо "******", - Serial, Serials, serial,serials? Без заглядывания внутрь кода.
}

Поэтому я и говорю, человек изначально который пишет тесты не должен задумываться как устроен Framework, я себе это так представляю


(Yaroslav Pernerovskyy) #16

Я подозреваю что даные в этом меню формируются динамически и они могут меняться/дополняться со временем. Если это так, то это точно не стоит хардкодить в виде списка статических констант, это будет боль и унижение. Параметризированиый enum, кторый дополняется по мере необходимости, самое оптимальное решение тут.


(Alex) #17

Еще раз спасибо за ответ.


(Taras) #18

человек воторий не знает о фреймворке и пишет тести ? Ви из SoftServe ??))))