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โ
- Images Folder: Place all images in
images/
at the project root - State Classes: One per screen/page, contains only UI elements (StateImage, StateString)
- TransitionSet Classes: One per state, contains navigation methods
- Application.java: Spring Boot main class with
@ComponentScan
for Brobot - Runner Classes: CommandLineRunner implementations to execute automation
- 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