Skip to main content
Version: Latest

Project File Structure

Overviewโ€‹

A typical Brobot project organizes files by state, with each state having its own folder containing the State class and TransitionSet class.

Standard Project Layoutโ€‹

๐Ÿ“ my-automation-project/
โ”œโ”€โ”€ ๐Ÿ“ images/
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ castle.png
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ farms.png
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ forest.png
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ lakes.png
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ mines.png
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ mountains.png
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ searchButton.png
โ”‚ โ””โ”€โ”€ ๐Ÿ–ผ๏ธ toWorldButton.png
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ src/
โ”‚ โ””โ”€โ”€ ๐Ÿ“ main/
โ”‚ โ”œโ”€โ”€ ๐Ÿ“ java/
โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ“ com.example.demo/
โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ home/
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• HomeState.java
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ โ˜• HomeTransitions.java
โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ island/
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• IslandState.java
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• IslandTransitions.java
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• IslandActivities.java
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• IslandStatistics.java
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ โ˜• GetIslandType.java
โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ world/
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• WorldState.java
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ โ˜• WorldTransitions.java
โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• Application.java
โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• GetLabeledDataApp.java
โ”‚ โ”‚ โ””โ”€โ”€ โ˜• SaveLabeledImages.java
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ ๐Ÿ“ resources/
โ”‚ โ””โ”€โ”€ ๐Ÿ“„ application.properties
โ”‚
โ”œโ”€โ”€ ๐Ÿ“„ build.gradle
โ””โ”€โ”€ ๐Ÿ“„ pom.xml

Organized by State Foldersโ€‹

The recommended approach is to organize code by state, with each state in its own package:

๐Ÿ“ src/main/java/com/example/automation/
โ”œโ”€โ”€ ๐Ÿ“ states/
โ”‚ โ”œโ”€โ”€ ๐Ÿ“ menu/
โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• MenuState.java
โ”‚ โ”‚ โ””โ”€โ”€ โ˜• MenuTransitions.java
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ ๐Ÿ“ pricing/
โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• PricingState.java
โ”‚ โ”‚ โ””โ”€โ”€ โ˜• PricingTransitions.java
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ ๐Ÿ“ homepage/
โ”‚ โ”œโ”€โ”€ โ˜• HomepageState.java
โ”‚ โ””โ”€โ”€ โ˜• HomepageTransitions.java
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ runner/
โ”‚ โ””โ”€โ”€ โ˜• AutomationRunner.java
โ”‚
โ””โ”€โ”€ โ˜• Application.java

With Separate States and Transitions Foldersโ€‹

Alternatively, you can separate states and transitions into different folders:

๐Ÿ“ src/main/java/com/example/automation/
โ”œโ”€โ”€ ๐Ÿ“ states/
โ”‚ โ”œโ”€โ”€ โ˜• MenuState.java
โ”‚ โ”œโ”€โ”€ โ˜• PricingState.java
โ”‚ โ””โ”€โ”€ โ˜• HomepageState.java
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ transitions/
โ”‚ โ”œโ”€โ”€ โ˜• MenuTransitions.java
โ”‚ โ”œโ”€โ”€ โ˜• PricingTransitions.java
โ”‚ โ””โ”€โ”€ โ˜• HomepageTransitions.java
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ runner/
โ”‚ โ””โ”€โ”€ โ˜• AutomationRunner.java
โ”‚
โ””โ”€โ”€ โ˜• Application.java

Images Folder Organizationโ€‹

All Images in Rootโ€‹

For simple projects, keep all images in the root images/ folder:

๐Ÿ“ images/
โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ menu-logo.png
โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ menu-pricing.png
โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ pricing-start-free.png
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ homepage-email.png

Organized by Stateโ€‹

For larger projects, organize images by state:

๐Ÿ“ images/
โ”œโ”€โ”€ ๐Ÿ“ menu/
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ logo.png
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ pricing-button.png
โ”‚ โ””โ”€โ”€ ๐Ÿ–ผ๏ธ home-button.png
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ pricing/
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ header.png
โ”‚ โ””โ”€โ”€ ๐Ÿ–ผ๏ธ start-free-button.png
โ”‚
โ””โ”€โ”€ ๐Ÿ“ homepage/
โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ email-field.png
โ””โ”€โ”€ ๐Ÿ–ผ๏ธ submit-button.png

Complete Example Projectโ€‹

๐Ÿ“ brobot-automation-project/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ images/
โ”‚ โ”œโ”€โ”€ ๐Ÿ“ menu/
โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ menu-logo.png
โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ menu-pricing.png
โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ–ผ๏ธ menu-home.png
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ ๐Ÿ“ pricing/
โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ pricing-header.png
โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ–ผ๏ธ start-for-free.png
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ ๐Ÿ“ homepage/
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ hero-image.png
โ”‚ โ”œโ”€โ”€ ๐Ÿ–ผ๏ธ email-field.png
โ”‚ โ””โ”€โ”€ ๐Ÿ–ผ๏ธ submit-button.png
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ src/
โ”‚ โ”œโ”€โ”€ ๐Ÿ“ main/
โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ java/
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ“ com/example/automation/
โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ states/
โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• MenuState.java
โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• PricingState.java
โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ โ˜• HomepageState.java
โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ transitions/
โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• MenuTransitions.java
โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ โ˜• PricingTransitions.java
โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ โ˜• HomepageTransitions.java
โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“ runner/
โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ โ˜• AutomationRunner.java
โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ โ˜• Application.java
โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ“ resources/
โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ application.properties
โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ“„ application-mock.properties
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ ๐Ÿ“ test/
โ”‚ โ””โ”€โ”€ ๐Ÿ“ java/
โ”‚ โ””โ”€โ”€ ๐Ÿ“ com/example/automation/
โ”‚ โ””โ”€โ”€ โ˜• MockAutomationTest.java
โ”‚
โ”œโ”€โ”€ ๐Ÿ“„ build.gradle
โ”œโ”€โ”€ ๐Ÿ“„ pom.xml
โ”œโ”€โ”€ ๐Ÿ“„ README.md
โ””โ”€โ”€ ๐Ÿ“„ .gitignore

Key File Structure Rulesโ€‹

  1. Images Folder: Place all images in images/ at the project root
  2. State Classes: One per screen/page, contains only UI elements (StateImage, StateString)
  3. TransitionSet Classes: One per state, contains navigation methods
  4. Application.java: Spring Boot main class with @ComponentScan for Brobot
  5. Runner Classes: CommandLineRunner implementations to execute automation
  6. One TransitionSet per State: Each state has exactly ONE TransitionSet class

Icon Legendโ€‹

  • ๐Ÿ“ = Folder/Directory
  • ๐Ÿ–ผ๏ธ = Image file (.png, .jpg)
  • โ˜• = Java source file (.java)
  • ๐Ÿ“„ = Configuration file (.properties, .xml, .gradle, .md)

Best Practicesโ€‹

  • Organize by domain: Group related states together
  • Clear naming: Use descriptive names for states and images
  • Consistent structure: Follow the same pattern across all states
  • Separate concerns: Keep states and transitions in separate files
  • Image organization: Use subfolders for images when you have many states