Skip to main content

Cucumber Duplicate and Ambiguous Step Definitions

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

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()

Video Tutorial: Cucumber Duplicate and Ambiguous Step Definitions

Submitted by tgoswami on August 30, 2020

Tarun has 11+ years of experience in Quality Assurance in different domains like Banking, E-commerce, Health and Education.

About

At ProgramsBuzz, you can learn, share and grow with millions of techie around the world from different domain like Data Science, Software Development, QA and Digital Marketing. You can ask doubt and get the answer for your queries from our experts.