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

Фотография

Как правильно писать cucumber file

cucumber

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

#1 MoshneagaOleg

MoshneagaOleg

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

  • Members
  • Pip
  • 48 сообщений
  • ФИО:Мошняга Олег Михайлович

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

Проблема в том что, когда я пишу в сucumber к примеру Login Page это страница описанная в page object
 

Given user is on the Login Page

и в стэп дифинишн пишу это 

@Given("^user is on the (.*) page$")
    public void onPage(String pageName) throws Throwable { 

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

Given user is on the Index Page 

Как этого избегать? чтобы не писать всегда уникальные сценарии в feature file следующего типа 

Given user is on the Login Page login (login дописываю, чтобы сделать ее уникальной)

Given user is on the Index Page index (как этого избегать????)

 

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

  • Прикрепленный файл  image.png   15,29К   0 Количество загрузок:

  • 0

#2 Noksa

Noksa

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

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

Отправлено 23 августа 2018 - 12:23

Что-то вы какую-то дичь спрашиваете, если честно...

Если вы в этом совсем не разбираетесь, зачем в это влезать?

 

Чтобы избегать дублирования - его не надо создавать (КЭП).

@Given("^user is on the (.*) page$")
    public void onPage(String pageName) throws Throwable { 

Этого достаточно один раз, как общие шаги... 

 

И да, вот это 

throws Throwable { 

просто ужас.


  • 1

#3 MoshneagaOleg

MoshneagaOleg

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

  • Members
  • Pip
  • 48 сообщений
  • ФИО:Мошняга Олег Михайлович

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

Что-то вы какую-то дичь спрашиваете, если честно...

Если вы в этом совсем не разбираетесь, зачем в это влезать?

 

Чтобы избегать дублирования - его не надо создавать (КЭП).

@Given("^user is on the (.*) page$")
    public void onPage(String pageName) throws Throwable { 

Этого достаточно один раз, как общие шаги... 

 

И да, вот это 

throws Throwable { 

просто ужас.

Столкнулся с проблеммой и ищу решение, т.е получается что он передает всегда, нам достаточно один щаг написать и он будет передавать туда разные страницы, правильно, можно вообще подробнее, спасибо заранее


  • 0

#4 Noksa

Noksa

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

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

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

@Given("^user is on the (.*) page$") 

это регулярное выражение.

 

https://agileforall....Cheat-Sheet.pdf

 

Вот подробнее.


  • 0

#5 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


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

В защиту автора "throws Throwable" - сам кукумбер добавляет, там по умолчанию генерятся методы с эксепшенами о нереализованности шагов. Видимо не удалил просто.

 

 

MoshneagaOleg,

@Given("^user is on the (.*) page$")
public void onPage(String pageName) {}

 

предполагает, что в теле метода Вы анализируете, какое имя страницы передано и уже в зависимости от этого - для разных Page Object'ов дергается проверка.

 

Что-то вроде 

if (pageName.equals("Login")) {

   loginPage.onPage()

}

if (pageName.equals("Index")) {

   indexPage.onPage()

}

 
То, что Вы просите, это вот так:
@Given("^user is on the Login page$")
public void onLoginPage() {}
 

 

@Given("^user is on the Index page$")

public void onIndexPage() {}


  • 0

#6 Noksa

Noksa

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

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

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

 

Что-то вроде 

if (pageName.equals("Login")) {

   loginPage.onPage()

}

if (pageName.equals("Index")) {

   indexPage.onPage()

}

 

Такой подход плохой.

 

Добавится у вас страница - надо переписывать метод...

И так по кругу. 

А если таких методов мульон - это утопия %)

 

Я бы предложил автору написать хелпер-метод, который ищет в текущем контексте теста поля с определенными аннотациями.
 

Есть два пути - либо вынести метод onPage() в базовый класс для всех страниц, либо воспользоваться интерфейсом.

 

И работать с объектами как с абстракцией, а не с конкретикой. В таком случае при появлении новых страниц вам не надо будет дописывать методы. И сам метод будет коротким и лаконичным.

 

Но судя по уровню ТС, он не потянет, поэтому я ему просто предложил заюзать уже готовое решение от sbtqa (в одной из его тем) - но он упорно хочет строить свои велосипеды и везде расставлять грабли. 


  • 0

#7 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


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

Так я и не говорю, что хороший. Я расписала автору, к чему он шёл с тем вариантом кода. В т.ч. "по уровню".

 

С точки зрения "правильности" именно кукумбера - не могу судить, сама знаю лишь общие основы, но в моём понимании - кукумбер в принципе не настолько низкоуровневый, чтобы вот так страницы проверять...

Там должно быть "Given user is on LoginPage..." только как одна проверялка для теста функции авторизации.

А все остальное уже в стиле "Given user is authorized", причем по "authorized" идет не просто проверка, а корректная авторизация и уже потом проверка, что пользователь на нужной странице, т.к. такое начало предполагает, что тестируют уже не функционал авторизации.


  • 0

#8 MoshneagaOleg

MoshneagaOleg

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

  • Members
  • Pip
  • 48 сообщений
  • ФИО:Мошняга Олег Михайлович

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

 

 

Что-то вроде 

if (pageName.equals("Login")) {

   loginPage.onPage()

}

if (pageName.equals("Index")) {

   indexPage.onPage()

}

 

Такой подход плохой.

 

Добавится у вас страница - надо переписывать метод...

И так по кругу. 

А если таких методов мульон - это утопия %)

 

Я бы предложил автору написать хелпер-метод, который ищет в текущем контексте теста поля с определенными аннотациями.
 

Есть два пути - либо вынести метод onPage() в базовый класс для всех страниц, либо воспользоваться интерфейсом.

 

И работать с объектами как с абстракцией, а не с конкретикой. В таком случае при появлении новых страниц вам не надо будет дописывать методы. И сам метод будет коротким и лаконичным.

 

Но судя по уровню ТС, он не потянет, поэтому я ему просто предложил заюзать уже готовое решение от sbtqa (в одной из его тем) - но он упорно хочет строить свои велосипеды и везде расставлять грабли. 

 

Да, спасибо большое ваш совет и подсказка реально помогла, уже сделал общий класс BasicUISteps и там просто как генерик 
 

@Given("^user is on the (.*)$")
    public void userIsOnThePage(String pageName) throws Throwable {
        Page page = uiScenarioContext.getPage(pageName);
        page.open();
        basicActions.makeSureOnPage(page);
    }

и так же с кликом на элемент есть, теперь я понимаю всю прелесть, не писать куча одного и того же

 

@When("^(?:user)? clicks on (.*)$")
    public void clickOnElement(String elementName) throws Exception {
        Clickable element = (Clickable) basicActions.findControlOnCurrentPage(elementName);
        logger.info("User clicks on {}", elementName);
        element.click();
    }

  • 0



Темы с аналогичным тегами cucumber

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

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