How to Share Test Context between Cucumber Steps, in this post we will explain it and share our implementation
Scenario Context class holds the test data information explicitly. It helps you store values in a key-value pair between the steps. Moreover, it helps in organizing step definitions better rather than using private variables in step definition classes.
We are going to implement the Scenario Context in cucumber for sharing data between our Step Definitions in a generic way.
Step 1: Create a Scenario Context class
private static final Map<ScenarioKeys, Object> data = new HashMap<>(); public void save(ScenarioKeys scenarioKeys, Object value) { data.put(scenarioKeys, value); } public <T> T getData(ScenarioKeys scenarioKeys) { return (T) data.get(scenarioKeys); } }
Step 2: Create an Interface that will be implemented by enum
public interface ScenarioKeys { }
Step 3: Implement ScenarioKeys by an enum for type-safe
public enum PageScenarioKeys implements ScenarioKeys { CURRENT_PAGE;
Step 4: Use it in your steps
For saving data:
scenarioContext.save(PageScenarioKeys.CURRENT_PAGE, object);
For getting data:
AbstractPageObject currentPage = scenarioContext.getData(PageScenarioKeys.CURRENT_PAGE);
Because we are returning a generic type <T> then we are getting data from HashMap we don’t need to cast it in step implementation and another advantage is that we can save any type of data in our scenario context that why this is a generic way to use a scenario context for sharing data between scenarios and steps.