Productivity
Testing modern web applications can be difficult, with frequent changes and complex features making it hard to keep up. That’s where Hercules comes in. Hercules is the world’s first open-source testing agent, built to handle the toughest testing tasks so you don’t have to. It turns simple, easy-to-write Gherkin steps into fully automated end to end tests—no coding skills needed. Whether you’re working with tricky platforms like Salesforce or running tests in your CI/CD pipeline, Hercules adapts to your needs and takes care of the details. With Hercules, testing becomes simple, reliable, and efficient, helping teams everywhere deliver better software. Here's a quick demo of lead creation using natural english language test (without any code):
As you saw, using Hercules is as simple as feeding in your Gherkin features, and getting the results:
At TestZeus, we believe that trustworthy and open-source code is the backbone of innovation. That's why we've built Hercules to be transparent, reliable, and community-driven.
Our mission? To democratize and disrupt test automation, making top-tier testing accessible to everyone, not just the elite few. No more gatekeeping—everyone deserves a hero on their testing team!
Introduction to TestZeus Hercules
Learn about the core features of TestZeus Hercules and how it can streamline end-to-end testing for your projects.
Installation and Setup Guide
Step-by-step instructions for installing and configuring TestZeus Hercules in your environment.
Watch now
Hercules offers multiple ways to get started, catering to different user preferences and requirements.
For a quick taste of the solution, you can try the notebook here:
Install Hercules from PyPI:
pip install testzeus-hercules
Hercules uses Playwright to interact with web pages, so you need to install Playwright and its dependencies:
playwright install --with-deps
Once installed, you will need to provide some basic parameters to run Hercules:
--input-file INPUT_FILE
: Path to the input Gherkin feature file to be tested.--output-path OUTPUT_PATH
: Path to the output directory. The path of JUnit XML result and HTML report for the test run.--test-data-path TEST_DATA_PATH
: Path to the test data directory. The path where Hercules expects test data to be present; all test data used in feature testing should be present here.--project-base PROJECT_BASE
: Path to the project base directory. This is an optional parameter; if you populate this, --input-file
, --output-path
, and --test-data-path
are not required, and Hercules will assume all the three folders exist in the following format inside the project base:PROJECT_BASE/
├── gherkin_files/
├── input/
│ └── test.feature
├── log_files/
├── output/
│ ├── test.feature_result.html
│ └── test.feature_result.xml
├── proofs/
│ └── User_opens_Google_homepage/
│ ├── network_logs.json
│ ├── screenshots/
│ └── videos/
└── test_data/
└── test_data.txt
--llm-model LLM_MODEL
: Name of the LLM model to be used by the agent (recommended is gpt-4o
, but it can take others).--llm-model-api-key LLM_MODEL_API_KEY
: API key for the LLM model, something like sk-proj-k.......
.After passing all the required parameters, the command to run Hercules should look like this:
testzeus-hercules --input-file opt/input/test.feature --output-path opt/output --test-data-path opt/test_data --llm-model gpt-4o --llm-model-api-key sk-proj-k.......
To set up and run Hercules on a Windows machine:
Open PowerShell in Administrator Mode:
Navigate to the Helper Scripts Folder:
cd
command to navigate to the folder containing the hercules_windows_setup.ps1
script. For example:
cd path\to\helper_scripts
Run the Setup Script:
.\hercules_windows_setup.ps1
Follow On-Screen Instructions:
Run Hercules:
testzeus-hercules --input-file opt/input/test.feature --output-path opt/output --test-data-path opt/test_data --llm-model gpt-4o --llm-model-api-key sk-proj-k.......
Upon running the command:
click_using_selector
tool.Once the execution is completed:
output-path
, which will have the JUnit XML result file as well as an HTML report regarding the test case execution.proofs
folder.chat_messages.json
in the log_files
. This will have exact steps that were planned by the agent.Here's a sample feature file:
Feature: Account Creation in Salesforce
Scenario: Successfully create a new account
Given I am on the Salesforce login page
When I enter my username "user@example.com" and password "securePassword"
And I click on the "Log In" button
And I navigate to the "Accounts" tab
And I click on the "New" button
And I fill in the "Account Name" field with "Test Account"
And I select the "Account Type" as "Customer"
And I fill in the "Website" field with "www.testaccount.com"
And I fill in the "Phone" field with "123-456-7890"
And I click on the "Save" button
Then I should see a confirmation message "Account Test Account created successfully"
And I should see "Test Account" listed in the account records
For all the scale lovers, Hercules is also available as a Docker image.
docker pull testzeus/hercules:latest
Run the container using:
docker run --env-file=.env \
-v ./agents_llm_config.json:/testzeus-hercules/agents_llm_config.json \
-v ./opt:/testzeus-hercules/opt \
--rm -it testzeus/hercules:latest
.env
file to the docker run
command.agents_llm_config.json
as a mount to the container. This is for advanced use cases and is not required for beginners. Refer to sample files .env-example
and agents_llm_config-example.json
for details and reference.opt
folder to the Docker container so that all the inputs can be passed to Hercules running inside the container, and the output can be pulled out for further processing. The repository has a sample opt
folder that can be mounted easily.--input-file
, --output-path
, --test-data-path
, or --project-base
as they are already handled by mounting the opt
folder in the docker run
command.CDP_ENDPOINT_URL
to set the CDP URL of the Chrome instance that has to be connected to the agent.After the command completion:
opt
folder, in the same way as described in the directory structure.For the hardcore enthusiasts, you can use Hercules via the source code to get a complete experience of customization and extending Hercules with more tools.
Clone the Repository
git clone git@github.com:test-zeus-ai/testzeus-hercules.git
Navigate to the Directory
cd testzeus-hercules
Use Make Commands
The repository provides handy make
commands.
make help
to check out possible options.Install Poetry
make setup-poetry
Install Dependencies
make install
Run Hercules
make run
This command reads the relevant feature files from the opt
folder and executes them, putting the output in the same folder.
The opt
folder has the following format:
opt/
├── input/
│ └── test.feature
├── output/
│ ├── test.feature_result.html
│ └── test.feature_result.xml
├── log_files/
├── proofs/
│ └── User_opens_Google_homepage/
│ ├── network_logs.json
│ ├── screenshots/
│ └── videos/
└── test_data/
└── test_data.txt
Interactive Mode
You can also run Hercules in interactive mode as an instruction execution agent, which is more useful for RPA and debugging test cases and Hercules's behavior on new environments while building new tooling and extending the agents.
make run-interactive
For those who want a fully automated setup experience on Linux/macOS environments, we provide a helper_script.sh. This script installs Python 3.11 (if needed), creates a virtual environment, installs TestZeus Hercules, and sets up the base project directories in an opt folder.
#!/bin/bash
# set -ex
# curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11
# Create a new Python virtual environment named 'test'
python3.11 -m venv test
# Activate the virtual environment
source test/bin/activate
# Upgrade the 'testzeus-hercules' package
pip install --upgrade testzeus-hercules
playwright install --with-deps
# create a new directory named 'opt'
mkdir -p opt/input opt/output opt/test_data
# download https://raw.githubusercontent.com/test-zeus-ai/testzeus-hercules/refs/heads/main/agents_llm_config-example.json
curl -sS https://raw.githubusercontent.com/test-zeus-ai/testzeus-hercules/main/agents_llm_config-example.json > agents_llm_config-example.json
mv agents_llm_config-example.json agents_llm_config.json
# prompt user that they need to edit the 'agents_llm_config.json' file, halt the script and open the file in an editor
echo "Please edit the 'agents_llm_config.json' file to add your API key and other configurations."
# halt the script and mention the absolute path of the agents_llm_config.json file so that user can edit it in the editor
echo "The 'agents_llm_config.json' file is located at $(pwd)/agents_llm_config.json"
read -p "Press Enter if file is updated"
# download https://raw.githubusercontent.com/test-zeus-ai/testzeus-hercules/blob/main/.env-example
curl -sS https://raw.githubusercontent.com/test-zeus-ai/testzeus-hercules/main/.env-example > .env-example
mv .env-example .env
# prompt user that they need to edit the .env file, halt the script and open the file in an editor
echo "The '.env' file is located at $(pwd)/.env"
read -p "Press Enter if file is updated"
# create a input/test.feature file
# download https://raw.githubusercontent.com/test-zeus-ai/testzeus-hercules/refs/heads/main/opt/input/test.feature and save in opt/input/test.feature
curl -sS https://raw.githubusercontent.com/test-zeus-ai/testzeus-hercules/main/opt/input/test.feature > opt/input/test.feature
# download https://raw.githubusercontent.com/test-zeus-ai/testzeus-hercules/refs/heads/main/opt/test_data/test_data.json and save in opt/test_data/test_data.json
curl -sS https://raw.githubusercontent.com/test-zeus-ai/testzeus-hercules/main/opt/test_data/test_data.json > opt/test_data/test_data.json
# Run the 'testzeus-hercules' command with the specified parameters
testzeus-hercules --project-base=opt
chmod +x helper_script.sh
./helper_script.sh
To disable telemetry, set the TELEMETRY_ENABLED
environment variable to 0
:
export TELEMETRY_ENABLED=0
If AUTO_MODE
is set to 1
, Hercules will not request an email during the run:
export AUTO_MODE=1
.env
)To configure Hercules in detail:
Copy the base environment file:
cp .env-example .env
Hercules is capable of running in two configuration forms:
Using single LLM for all work
LLM_MODEL_NAME
and LLM_MODEL_API_KEY
.LLM_MODEL_BASE_URL
URL as well.Custom LLMs for different work or using hosted LLMs
AGENTS_LLM_CONFIG_FILE
and AGENTS_LLM_CONFIG_FILE_REF_KEY
.Hercules considers a base folder that is by default ./opt
but can be changed by the environment variable PROJECT_SOURCE_ROOT
.
Connecting to an Existing Chrome Instance
CDP_ENDPOINT_URL
to set the CDP URL of the Chrome instance that has to be connected to the agent.Controlling Other Behaviors
You can control other behaviors of Hercules based on the following environment variables:
HEADLESS=true
RECORD_VIDEO=false
TAKE_SCREENSHOTS=false
BROWSER_TYPE=chromium
(options: firefox
, chromium
)CAPTURE_NETWORK=false
For example: If you would like to run with a "Headful" browser, you can set the environment variable with export HEADLESS=false
before triggering Hercules.
agents_llm_config-example.json
It's a list of configurations of LLMs that you want to provide to the agent.
Example:
{
"anthropic": {
"planner_agent": {
"model_name": "claude-3-5-haiku-latest",
"model_api_key": "",
"model_api_type": "anthropic",
"llm_config_params": {
"cache_seed": null,
"temperature": 0.0,
"top_p": 0.001,
"seed":12345
}
},
"nav_agent": {
"model_name": "claude-3-5-haiku-latest",
"model_api_key": "",
"model_api_type": "anthropic",
"llm_config_params": {
"cache_seed": null,
"temperature": 0.0,
"top_p": 0.001,
"seed":12345
}
}
}
}
The key is the name of the spec that is passed in AGENTS_LLM_CONFIG_FILE_REF_KEY
, whereas the Hercules information is passed in sub-dicts planner_agent
and nav_agent
.
Note: This option should be ignored until you are sure what you are doing. Discuss with us while playing around with these options in our Slack communication. Join us at our Slack
Hercules is production ready, and packs a punch with features:
Hercules makes testing as simple as Gherkin in, results out. Just feed your end-to-end tests in Gherkin format, and watch Hercules spring into action. It takes care of the heavy lifting by running your tests automatically and presenting results in a neat JUnit format. No manual steps, no fuss—just efficient, seamless testing.
With Hercules, you're harnessing the power of open source with zero licensing fees. Feel free to dive into the code, contribute, or customize it to your heart's content. Hercules is as free as it is mighty, giving you the flexibility and control you need.
Built to handle the most intricate UIs, Hercules conquers Salesforce and other complex platforms with ease. Whether it's complicated DOM or running your SOQL or Apex, Hercules is ready and configurable.
Say goodbye to complex scripts and elusive locators. Hercules is here to make your life easier with its no-code approach, taking care of the automation of Gherkin features so you can focus on what matters most—building quality software.
With multilingual support right out of the box, Hercules is ready to work with teams across the globe. Built to bridge language gaps, it empowers diverse teams to collaborate effortlessly on a unified testing platform.
Hercules records video of the execution, and captures network logs as well, so that you dont have to deal with "It works on my computer".
Autonomous and adaptive, Hercules takes care of itself with auto-healing capabilities. Forget about tedious maintenance—Hercules adjusts to changes and stays focused on achieving your testing goals.
Grounded in the powerful foundations of TestZeus, Hercules tackles UI assertions with unwavering focus, ensuring that no assertion goes unchecked and no bug goes unnoticed. It's thorough, it's sharp, and it's ready for action.
Run Hercules locally or integrate it seamlessly into your CI/CD pipeline. Docker-native and one-command ready, Hercules fits smoothly into your deployment workflows, keeping testing quick, consistent, and hassle-free.
With Hercules, testing is no longer just a step in the process—it's a powerful, streamlined experience that brings quality to the forefront.
Hercules supports running the browser in “mobile mode” for a variety of device types. Playwright provides a large list of device descriptors here: List of mobile devices supported
Set the RUN_DEVICE environment variable in your .env (or directly as an environment variable):
RUN_DEVICE="iPhone 15 Pro Max"
When Hercules runs, it will now launch the browser with the corresponding viewport and user-agent for the chosen device, simulating a real mobile environment. Here's a quick demo:
Hercules can be extended with more powerful tools for advanced scenarios. Enable it by setting:
LOAD_EXTRA_TOOLS=true
With LOAD_EXTRA_TOOLS enabled, Hercules looks for additional tool modules that can expand capabilities (e.g., geolocation handling).
For location-based tests, configure: supported geo providers are maps.co and google
GEO_API_KEY=somekey
GEO_PROVIDER=maps_co
This allows Hercules to alter or simulate user location during test execution, broadening your test coverage for scenarios that rely on user geography.
Hercules leverages a multi-agent architecture based on the AutoGen framework. Building on the foundation provided by the AutoGen framework, Hercules's architecture leverages the interplay between tools and agents. Each tool embodies an atomic action, a fundamental building block that, when executed, returns a natural language description of its outcome. This granularity allows Hercules to flexibly assemble these tools to tackle complex web automation workflows.
The diagram above shows the configuration chosen on top of AutoGen architecture. The tools can be partitioned differently, but this is the one that we chose for the time being. We chose to use tools that map to what humans learn about the web browser rather than allow the LLM to write code as it pleases. We see the use of configured tools to be safer and more predictable in its outcomes. Certainly, it can click on the wrong things, but at least it is not going to execute malicious unknown code.
At the moment, there are two agents:
At the core of Hercules's capabilities is the Tools Library, a repository of well-defined actions that Hercules can perform; for now, web actions. These tools are grouped into two main categories:
get_dom_with_content_type
and geturl
that help Hercules understand the current state of the webpage or the browser.click
, enter_text
, and openurl
.Each tool is created with the intention to be as conversational as possible, making the interactions with LLMs more intuitive and error-tolerant. For instance, rather than simply returning a boolean value, a tool might explain in natural language what happened during its execution, enabling the LLM to better understand the context and correct course if necessary.
Sensing Tools
geturl
: Fetches and returns the current URL.get_dom_with_content_type
: Retrieves the HTML DOM of the active page based on the specified content type.
text_only
: Extracts the inner text of the HTML DOM. Responds with text output.input_fields
: Extracts the interactive elements in the DOM (button, input, textarea, etc.) and responds with a compact JSON object.all_fields
: Extracts all the fields in the DOM and responds with a compact JSON object.get_user_input
: Provides the orchestrator with a mechanism to receive user feedback to disambiguate or seek clarity on fulfilling their request.Action Tools
click
: Given a DOM query selector, this will click on it.enter_text
: Enters text in a field specified by the provided DOM query selector.enter_text_and_click
: Optimized method that combines enter_text
and click
tools.bulk_enter_text
: Optimized method that wraps enter_text
method so that multiple text entries can be performed in one shot.openurl
: Opens the given URL in the current or new tab.Hercules's approach to managing the vast landscape of HTML DOM is methodical and essential for efficiency. We've introduced DOM Distillation to pare down the DOM to just the elements pertinent to the user's task.
In practice, this means taking the expansive DOM and delivering a more digestible JSON snapshot. This isn't about just reducing size; it's about honing in on relevance, serving the LLMs only what's necessary to fulfill a request. So far, we have three content types:
It's a surgical procedure, carefully removing extraneous information while preserving the structure and content needed for the agent's operation. Of course, with any distillation, there could be casualties, but the idea is to refine this over time to limit/eliminate them.
Since we can't rely on all web page authors to use best practices, such as adding unique IDs to each HTML element, we had to inject our own attribute (md
) in every DOM element. We can then guide the LLM to rely on using md
in the generated DOM queries.
To cut down on some of the DOM noise, we use the DOM Accessibility Tree rather than the regular HTML DOM. The accessibility tree, by nature, is geared towards helping screen readers, which is closer to the mission of web automation than plain old HTML DOM.
The distillation process is a work in progress. We look to refine this process and condense the DOM further, aiming to make interactions faster, cost-effective, and more accurate.
Hercules integrates with Nuclei to automate vulnerability scanning directly from Gherkin test cases, identifying issues like misconfigurations, OWASP Top 10 vulnerabilities, and API flaws. Security reports are generated alongside testing outputs for seamless CI/CD integration.
Hercules supports WCAG 2.0, 2.1, and 2.2 at A, AA, and AAA levels, enabling accessibility testing to ensure compliance with global standards. It identifies accessibility issues early, helping build inclusive and user-friendly applications.
We wanted to ensure that Hercules stands up to the task of end-to-end testing with immense precision. So, we have run Hercules through a wide range of tests such as running APIs, interacting with complex UI scenarios, clicking through calendars, or iframes. A full list of evaluations can be found in the tests folder.
To run the full test suite, use the following command:
make test
To run a specific test:
make test-case
Hercules builds on the work done by WebArena and Agent-E, and beyond that, to iron out the issues in the previous, we have written our own test cases catering to complex QA scenarios and have created tests in the ./tests
folder.
We believe that great quality comes from opinions about a product. So we have incorporated a few of our opinions into the product design. We welcome the community to question them, use them, or build on top of them. Here are some examples:
Gherkin is a Good Enough Format for Agents: Gherkin provides a semi-structured format for the LLMs/AI Agents to follow test intent and user instructions. It provides the right amount of grammar (verbs like Given, When, Then) for humans to frame a scenario and agents to follow the instructions.
Tests Should Be Atomic in Nature: Software tests should be atomic because it ensures that each test is focused, independent, and reliable. Atomic tests target one specific behavior or functionality, making it easier to pinpoint the root cause of failures without ambiguity.
Here's a good example (Atomic Test):
Feature: User Login
Scenario: Successful login with valid credentials
Given the user is on the login page
When the user enters valid credentials
And the user clicks the login button
Then the user should see the dashboard
A non-atomic test confuses both the tester and the AI agent.
Open Core and Open Source: Hercules is built on an open-core model, combining the spirit of open source with the support and expertise of a commercial company, TestZeus. By providing Hercules as open source (licensed under AGPL v3), TestZeus is committed to empowering the testing community with a robust, adaptable tool that's freely accessible and modifiable. Open source offers transparency, trust, and collaborative potential, allowing anyone to dive into the code, contribute, and shape the project's direction.
Telemetry : All great products are built on good feedback. We have setup telemetry so that we can take feedback, without disturbing the user. Telemetry is enabled by default, but we also believe strongly in the values of "Trust" and "Transparency" so it can be turned off by the users.
Hercules is an AI-native solution and relies on LLMs to perform reasoning and actions. Based on our experiments, we have found that a complex use case as below could cost up to $0.20 using OpenAI's APIs gpt-4o, check the properties printed in testcase output to calculate for your testcase:
Feature: Account Creation in Salesforce
Scenario: Successfully create a new account
Given I am on the Salesforce login page
When I enter my username "user@example.com" and password "securePassword"
And I click on the "Log In" button
And I navigate to the "Accounts" tab
And I click on the "New" button
And I fill in the "Account Name" field with "Test Account"
And I select the "Account Type" as "Customer"
And I fill in the "Website" field with "www.testaccount.com"
And I fill in the "Phone" field with "123-456-7890"
And I click on the "Save" button
Then I should see a confirmation message "Account Test Account created successfully"
And I should see "Test Account" listed in the account records
Hercules isn't just another testing tool—it's an agent. Powered by synthetic intelligence that can think, reason, and react based on requirements, Hercules goes beyond simple automation scripts. We bring an industry-first approach to open-source agents for software testing. This means faster, smarter, and more resilient testing cycles, especially for complex platforms.
With industry-leading performance and a fully open-source foundation, Hercules combines powerful capabilities with community-driven flexibility, making top-tier testing accessible and transformative for everyone.
We welcome contributions from the community!
Developing Tools
additional_tools
folder in your Pull Request.Fixes and Enhancements
Creating a New Tool
testzeus_hercules/core/tools/sql_calls.py
as an example of how to create a new tool.@tool
over the method that you want Hercules to execute.Adding the Tool
ADDITIONAL_TOOL_DIRS
to pass the path of the new tools folder where you have kept the new files.Direct Addition (Not Recommended)
In case you opt for adding the tools directly, then just put your new tools in the testzeus_hercules/core/tools
path of the cloned repository.
Note: This way is not recommended. We prefer you try to use the ADDITIONAL_TOOL_DIRS
approach.
Join us at our Slack to connect with the community, ask questions, and contribute.
Hercules would not have been possible without the great work from the following sources:
The Hercules project is inferred and enhanced over the existing project of Agent-E. We have improved lots of cases to make it capable of doing testing, especially in the area of complex DOM navigation and iframes. We have also added new tools and abilities (like Salesforce navigation) to Hercules so that it can perform better work over the base framework we had picked.
Hercules also picks some inspiration from the legacy TestZeus repo here.
With Hercules, testing is no longer just a step in the process—it's a powerful, streamlined experience that brings quality to the forefront.