Cucumber Duplicate and Ambiguous Step Definitions

Profile picture for user devraj

Sometimes, we get Ambiguous Step Definition or Duplicate Step Definition errors while writing Step Definition in Cucumber. 

If Cucumber encounters duplicate or ambiguous Steps, all the other Steps of the Scenarios are skipped, and the Scenario is marked as a fail.

These errors are common when we have multiple Steps Definitions files or Large Projects. 

You do not have to worry about this because Cucumber itself identifies it and returns an error for you, and it will also tell you the method name which is creating these problems.

Take an example of below Scenario:

@Duplicate
  Scenario: Click on login link
    Given I am on the homepage
    And I click on login link

Table of Contents

  1. Cucumber Duplicate Step Definitions
  2. Cucumber Ambiguous Step Definitions
  3. Video Tutorial

Cucumber Duplicate Step Definitions

When Cucumber finds multiple Step Definitions that are the same, it throws a Duplicate Step Definitions exception.

Check below step definition; the exact Step Definition has been declared twice for the Given and When Step. You can observe method name and keyword is different, but the regular expression is the same. 

When you execute below step definition, you will get duplicate step definition errors.

@Given("^I am on the homepage$")
public void homepage1() 
{
}

@Then("^I am on the homepage$")
public void homepage2() 
{
}

Error in console after executing the scenaro

io.cucumber.core.runner.DuplicateStepDefinitionException: 
Duplicate step definitions in 
com.pb.cucumbertest.stepdefinitions.FirstSD.homepage1() 
and 
com.pb.cucumbertest.stepdefinitions.FirstSD.homepage2()

This is because Cucumber doesn't distinguish between Given/When/Then. It only matches based on the regexp. If two or more regexen match, Cucumber can't figure out which one to run.

Cucumber Ambiguous Step Definitions

When Cucumber Finds a Step matches more than one Step Definitions using regular expressions, it throws an Ambiguous Step Definitions exception.

@Given("^I am on the homepage$")
public void homepage1() 
{
}

@Then("^I am on (.*?) homepage$")
public void homepage2() 
{
}

After execution error will be

io.cucumber.core.runner.AmbiguousStepDefinitionsException: 
"I am on the homepage" matches more than one step definition:
"^I am on (.*?) homepage$" in com.pb.cucumbertest.stepdefinitions.FirstSD.homepage2()
"^I am on the homepage$" in com.pb.cucumbertest.stepdefinitions.FirstSD.homepage1()