‹Cucumber-JVM› передает значения между шагами в огурце

Как передать значения между двумя шагами в JVM огурца?

В следующем сценарии я хочу получить доступ к имени пользователя, предоставленному на шаге Then. Как передать значения между двумя шагами в JVM огурца? В настоящее время я обращаюсь к ним, сохраняя это значение в общедоступной переменной. Правильный ли подход (или) каким-либо другим способом я могу получить доступ к ним между этапами?

Сценарий:

Данный пользователь находится на странице входа в систему, когда пользователь вводит имя пользователя как user1 и пароль как pass1 и нажимает кнопку входа, затем отображается страница входа в систему.

@When("^user enters username as ([^\"]*) and password as ([^\"]*)$")
public void enterLoginDetails(String username,String password){
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).sendKeys(password);
}

В следующем определении шага я хочу получить доступ к имени пользователя из определения предыдущего шага.

@Then("^post login page is displayed$")
public void postLoginValidation(){
// i would like access username and verify username is displayed
}

Заранее спасибо


person user3188928    schedule 11.02.2014    source источник
comment
ищу ответ на этот вопрос. Удалось ли вам придумать что-нибудь, кроме следующего ответа   -  person Shruti Kapoor    schedule 04.09.2014
comment
возможный дубликат: stackoverflow.com/questions/26422470/   -  person Marit    schedule 18.01.2018


Ответы (3)


Лучшее решение:

Если вы используете схему сценария:

When user enters username as <username> and password as <password>
Then post login page is displayed with <username>

Examples:

| username|password|
|Kiran|1234|

Код определения шага:

@When("user enters username as (.*) and password as (.*)")
public void enterLoginDetails(String userName,String password)
{
    //You will get userName=Kiran and Password=1234

}
@Then("post login page is displayed with (.*)")
public void postLoginValidation(String userName)
{
   //You will be access the same username which is you are passing while login
  ////You will get userName=Kiran
}
person Kiran Yadav    schedule 14.02.2020

Вы можете обмениваться состоянием между шагами, используя переменные, как предлагает Бала.

Другое решение в Java - использовать внедрение зависимостей. Cucumber-JVM поддерживает множество различных платформ внедрения зависимостей. Один из них - Весна. Зависимости могут быть доступны там, где они необходимы, с помощью аннотаций. Использование Spring - хороший вариант, если в вашем проекте уже используется Spring. В противном случае он может быть слишком большим и громоздким.

Простая в использовании альтернатива Spring - использовать PicoContainer.

Для получения дополнительной информации по любому из них, пожалуйста, посмотрите:

http://www.thinkcode.se/blog/2017/06/24/sharing-state-between-steps-in-cucumberjvm-using-spring

http://www.thinkcode.se/blog/2017/04/01/sharing-state-between-steps-in-cucumberjvm-using-picocontainer

person Marit    schedule 02.01.2018

person    schedule
comment
Любая другая альтернатива для передачи значений между шагами без использования переменных. - person user3188928; 12.02.2014
comment
Да, попробуйте использовать внедрение зависимостей. Cucumber поддерживает несколько фреймворков внедрения зависимостей. - person Marit; 08.04.2018