Search code examples
javacucumbercucumber-java

Cucumber Java - How to use returned String from a step in next step?


I need to automate some webservices, i create some methods for that and i want to use Cucumber for that but i can't figure how to use returned value in next step.

So, i have this Feature:

Feature: Create Client and place order

  Scenario: Syntax
    Given I create client type: "66"
    And I create for client: "OUTPUTVALUEfromGiven" an account type "123"
    And I create for client: "OUTPUTVALUEfromGiven" an account type "321"
    And I want to place order for: "outputvalueFromAnd1"

and i have this Steps:

public class CreateClientSteps {


@Given("^I create client type: \"([^\"]*)\"$")
public static String iCreateClient(String clientType) {

    String clientID = "";
    System.out.println(clientType);
    try {
      clientID = util.createClient(clientType);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return clientID;

}

@And("^I create for client: \"([^\"]*)\" an account type \"([^\"]*)\"$")
public static String createAccount(String clientID, String accountType) {


    String orderID = "";
    try {
        orderID = util.createAccount(clientID,accountType);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return orderID;
    }
}

It's any way to use the returned values from step to step?

Thank you!


Solution

  • I solved in other way, i know the question it's from last year but maybe someone will find this usefull in the future.

    So, i created a 'ClientsMap.java' where i store the outputs from last sentences. EX:

    public class ClientsMap {
    
    private static ArrayListMultimap<Integer, String> multimapCardNumber = ArrayListMultimap.create();
    
    ...
    
    public static void addCardNumber(String cardNumberValue) {
            multimapCardNumber.put(multimapCardNumber.size(), cardNumberValue);
        }
    
    public static String returnSpecificCardNumber(int specificCardNumberPosition) {
            String returnedCardNumber = multimapCardNumber.get(specificCardNumberPosition - 1).get(0);
            return returnedCardNumber;
        }
    
        }
    

    Then i created some specific keywords to be used in sentences like:

    And I want to make a card transaction with this parameters:
          | XXX                   | 9999                        |
          | accountNumber         | account1-client1            |
          | cardNumber            | cardNumber1                 |
    

    Then i have a method behind who check for keywords like 'cardNumber' and retrieve position of card like this:

    if (paramsList[i].startsWith("cardNumber")) {
                    String cardNumberPosition = paramsList[i].replaceAll("[^0-9]", "");
                    paramsList[i] = returnSpecificCardNumber(Integer.valueOf(cardNumberPosition));
                }
    

    And after each Scenario don't forget to delete map.