Cucumber Project Setup with Java, JUnit or TestNG, Maven, and Selenium Integration
Set up a practical Cucumber automation project and understand how Cucumber fits into common Java-based test stacks.
Inside this chapter
- Typical Java Stack
- Basic Dependency Idea
- Common Project Structure
- Why Setup Discipline Matters
Series navigation
Study the chapters in order for the clearest path from beginner BDD concepts to advanced automation architecture. Use the navigation at the bottom of each page to move through the full tutorial series.
Typical Java Stack
Many teams use Cucumber with Java, Maven or Gradle, JUnit or TestNG, and Selenium for browser automation. This combination allows readable Gherkin scenarios to be backed by executable step definitions that drive browsers, APIs, or services.
Basic Dependency Idea
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>x.y.z</version>
<scope>test</scope>
</dependency>
Projects usually also include a runner dependency, test framework dependency, and tools such as Selenium if UI automation is involved.
Common Project Structure
src/test/resources/features
src/test/java/stepdefinitions
src/test/java/runners
src/test/java/hooks
src/test/java/pages
Organized structure becomes very important as feature files and step definitions grow. Clean separation between features, steps, hooks, and page objects keeps automation maintainable.
Why Setup Discipline Matters
Beginners often struggle because dependencies, runners, resource paths, and IDE execution setup are inconsistent. A good project structure and consistent package layout reduce confusion and make the rest of Cucumber learning much smoother.