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

Фотография

Как передать значения параметра из класса java в переменную Cucumber


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

#1 FinalVerdict

FinalVerdict

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

  • Members
  • Pip
  • 17 сообщений

Отправлено 02 октября 2020 - 16:13

Начал разбираться Cucumber.
До недавнего времени, лезть в файлы java  мне не требовалось.
Но вот возникла задача получить из конфигурационного файла адрес текущего стенда, на котором запускается тест. 
Стенды каждый раз могут быть разные. По этому писать в фичафайле жёсткую ссылку на сервер не вариант. Ссылка должна генериться автоматически.
Собственно адрес я взял без проблем, а вот как его передать в сценарий, забуксовал. Прошу помощи коллективного разума.

Адрес беру так:
 

@Пусть("^(.+?) находится по адресу$")

Public String берем_адрес_текущего_стенда() throws IOException {
  URL standUrl = new URL(Props.get("bs.secure.soft.url")) ;

  String hostname = standUrl.getHost();

  return hostname;


 

Собственно вопрос, как переменной, название которой я задаю (.+?) присвоить возвращаемое значение hostname?

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

Пусть Стенд находится по адресу

|  URL | Сцепить(Стенд;"/чччч.jsps?ProductOfferNo=";productOfferNo) |

Переходим по url: URL

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

 


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 03 октября 2020 - 12:27

Сделать переменную hostname глобальной.

Например так:

String hostname = "";

@Пусть("^(.+?) находится по адресу$")
Public String берем_адрес_текущего_стенда() throws IOException {
  URL standUrl = new URL(Props.get("bs.secure.soft.url")) ;
  hostname = standUrl.getHost();
  return hostname;
}

И вы теперь в коде можете в других методах использовать эту переменную.

 

Вы немного не правильно поняли: ^(.+?) - это дело можно передать в параметр метода берем_адрес_текущего_стенда
Вот так:

@Пусть("^(.+?) находится по адресу$")
Public String берем_адрес_текущего_стенда(String символы_что_мы_нашли_из_верхнего_правила) throws IOException {
  делаем что хотим с данными из символы_что_мы_нашли_из_верхнего_правила
}

 


  • 0

#3 FinalVerdict

FinalVerdict

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

  • Members
  • Pip
  • 17 сообщений

Отправлено 04 октября 2020 - 14:24


И вы теперь в коде можете в других методах использовать эту переменную.

 

Вы немного не правильно поняли: ^(.+?) - это дело можно передать в параметр метода берем_адрес_текущего_стенда
Вот так:

@Пусть("^(.+?) находится по адресу$")
Public String берем_адрес_текущего_стенда(String символы_что_мы_нашли_из_верхнего_правила) throws IOException {
  делаем что хотим с данными из символы_что_мы_нашли_из_верхнего_правила
}

Тогда я не понял, как полученное значение hostname  присвоить переменной Стенд, которой я буду далее оперировать уже в фичафайле?
Толку с того что я получил  адрес текущего сервера, если я не могу с ним ничего сделать?

Подскажи пожалуйста, как это должно выглядеть.


  • 0

#4 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 04 октября 2020 - 18:36

Вы не правильно думаете. Вы не можете из кода что-то добавлять в фича-файл.

Вы из него только читаете то что там есть.

Я понял, у вас в фиче-файле есть слово стенд, объедините 2 шага "Пусть Стенд находится по адресу" и "Переходим по url: URL"

В один - "Открыть стенд" (а в методе для этого шага берите адрес из конфигурационного файла).

Если же у вас урл может разный быть, то напишите простой метод - отрыть страницу по такому-то адресу.

 

Вот эта муть зачем?   "Сцепить(Стенд;"/чччч.jsps?ProductOfferNo=";productOfferNo)"

Предавайте уже готовый урл, либо пишите общий метод для открытия продукта - открыть_страницу_продукта(String productOfferNo), в котором вы возьмёте productOfferNo и адрес стенда из конфиг-файла, и сформируете полный урл в методе.

Зачем так фиче-файл усложнять?

----------------------------------------------------------

Ещё подумав, понял

Пусть Стенд находится по адресу   - сделайте метод который берёт адрес стенда из конфиг-файла, и сетит глобальную переменную, как я показал.

|  URL | Сцепить(Стенд;"/чччч.jsps?ProductOfferNo=";productOfferNo) |   - у вас где-то реализована эта функция Сцепить? - доработайте её, чтобы она брала в теле уже вместо первого параметра глобальную переменную, если она не пуста, что засетили на предыдущем шаге.

Переходим по url: URL


  • 0

#5 FinalVerdict

FinalVerdict

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

  • Members
  • Pip
  • 17 сообщений

Отправлено 04 октября 2020 - 20:22

Вы не правильно думаете. Вы не можете из кода что-то добавлять в фича-файл.

Вы из него только читаете то что там есть.

Я понял, у вас в фиче-файле есть слово стенд, объедините 2 шага "Пусть Стенд находится по адресу" и "Переходим по url: URL"

В один - "Открыть стенд" (а в методе для этого шага берите адрес из конфигурационного файла).

Если же у вас урл может разный быть, то напишите простой метод - отрыть страницу по такому-то адресу.

 

Вот эта муть зачем?   "Сцепить(Стенд;"/чччч.jsps?ProductOfferNo=";productOfferNo)"

Предавайте уже готовый урл, либо пишите общий метод для открытия продукта - открыть_страницу_продукта(String productOfferNo), в котором вы возьмёте productOfferNo и адрес стенда из конфиг-файла, и сформируете полный урл в методе.

Зачем так фиче-файл усложнять?

----------------------------------------------------------

Ещё подумав, понял

Пусть Стенд находится по адресу   - сделайте метод который берёт адрес стенда из конфиг-файла, и сетит глобальную переменную, как я показал.

|  URL | Сцепить(Стенд;"/чччч.jsps?ProductOfferNo=";productOfferNo) |   - у вас где-то реализована эта функция Сцепить? - доработайте её, чтобы она брала в теле уже вместо первого параметра глобальную переменную, если она не пуста, что засетили на предыдущем шаге.

Переходим по url: URL

 

Спасибо, разобрался. Помогло.


  • 0


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

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