You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
🌀 Unified Test Automation Framework for Web, Mobile, API, SQL and NoSQL DBs Testing🚀
Ellithium is a Unified powerful, flexible, and scalable test automation framework designed to streamline and enhance the testing process. Leveraging tools such as TestNG, Cucumber, Rest Assured, and others, it provides an end-to-end solution for automated testing. With support for BDD, cross-browser testing, parallel execution, headless testing, and detailed Allure reporting, Ellithium aims to make your test automation faster, more reliable, and easier to maintain.
👨💻 Supported Testing PlatForms
Web
Mobile
API
DB
✅
✅
✅
✅
🚀 Supported DB Types with Caching Mechanisms 🚀
Mongo
Couchebase
Redis
MY_SQL
SQL_SERVER
ORACLE
IBM_DB2
POSTGRES_SQL
SQLITE
✅
✅
✅
✅
✅
✅
✅
✅
✅
🚀 Key Features
BDD Support
Parallel Execution
Cross-Browser Testing
Headless Testing
Logging
Screenshots Attaching
User Stories Linking
Reporting
Command line Executor Interface
Synchronization Handling
CI/CD integration
Test Data Generation
✅
✅
✅
✅
✅
✅
✅
✅
✅
✅
✅
✅
Allure Reporting: Generate rich, interactive test reports with Allure, including test history and trend analysis.
Modular Design: A well-structured and modular framework promoting code reuse and easy maintenance.
Executing OS Commands: Execute system commands via the built-in Command Executor Interface.
API Testing: Full support for API testing with Rest Assured for RESTful services.
Database Testing: Extends coverage to both SQL and NoSQL databases, including MySQL, SQL Server, PostgreSQL, Oracle, IBM DB2, SQLite, Couchbase, MongoDB, and Redis, enabling comprehensive backend testing.
Mobile Testing: Test native, hybrid, and mobile apps on Android and IOS, with Appium integration and support for real devices and emulators.
Test Data Generation: Dynamically generate test data using Java Faker for realistic names, emails, addresses, and more.
CI/CD Integration: Seamless integration with popular CI/CD tools such as Jenkins, GitHub Actions, and GitLab.
Exception Handling: Robust mechanisms for capturing exceptions during test execution.
👨💻 Supported OS with OS Command Executor Interface for Desktop OS
Windows
Mac
Linux
Android
IOS
✅
✅
✅
✅
✅
📄 Supported File Formats for Reading and Writing
Ellithium supports reading and writing data from various file formats, including:
JSON
CSV
Excel
Properties
Jar
PDF
Text
✅
✅
✅
✅
✅
✅
✅
👨💻 Developed using:
🦸 Powered by:
Prerequisites
Ensure you have the following installed:
Java Development Kit (JDK): Version 17 or above (21 preferred)
Maven: 3.8.1 or higher
🏁 Getting Started
Follow these steps to set up a new Maven project with Ellithium:
Here is the updated Getting Started section formatted for your README file:
Step 1: Create a New Maven Project
Create a new Maven project using your preferred IDE (e.g., IntelliJ IDEA).
Step 2: Update the pom.xml
Add the following configuration to your pom.xml to set the Java version, include the required dependencies, and configure the plugins.
Step 3: Open the Termenal in the Project directory then run this command
mvn clean test
Option 1: BDD Mode
Demo-Project for setup use after follow the following steps
Step 1: Create a Test Runner Class
Create a Runner Package then create a new class named TestRunner that extends the BDDSetup class from Ellithium.
Specify the paths for your feature files and step definitions using the @CucumberOptions.
packageRunner;
importEllithium.core.base.BDDSetup;
importio.cucumber.testng.CucumberOptions;
@CucumberOptions(
glue = "stepDefinitions", // path to your stepDefinitions package, note you should use . instead of /features = "src/main/resources/features"// path to your features folder
, tags = "@Run"
)
publicclassTestRunnerextendsBDDSetup {
}
Step 2: To Create a BaseStepDefinitions Class.
Create a BaseStepDefinitions class that will be used to extend the other StepDefinitions Classes from it.
packageBase;
importEllithium.core.driver.DriverFactory;
importorg.openqa.selenium.WebDriver;
publicclassBaseStepDefinitions {
protectedWebDriverdriver;
protectedAndroidDriverandroidDriver;
protectedIOSDriveriosDriver;
publicBaseStepDefinitions() {
// for Local Machine Web Executiondriver= DriverFactory.getNewLocalDriver(LocalDriverType.Chrome, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal,WebSecurityMode.SecureMode,SandboxMode.Sandbox);
// for Remote Machine Web Executiondriver= DriverFactory.getNewRemoteDriver(RemoteDriverType.Remote_Chrome,newURL("http://localhost:4723"),capabilities, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal,WebSecurityMode.SecureMode,SandboxMode.Sandbox);
// for Android MobileandroidDriver= DriverFactory.getNewMobileDriver(MobileDriverType.Android,newURL("http://localhost:4723"),options);
// for IOS MobileiosDriver=DriverFactory.getNewMobileDriver(MobileDriverType.IOS,newURL("http://localhost:4723"),options);
// for DB SQL Provider [MY_SQL, SQL_SERVER, POSTGRES_SQL, ORACLE_SID, ORACLE_SERVICE_NAME, IBM_DB2]SQLDatabaseProviderdb=newSQLDatabaseProvider(
SQLDBType.MY_SQL,
username,
password,
serverIp,
port,
dbName);
}
// for DB SQL Provider [SQLite]SQLDatabaseProviderSQLitedb= SQLDatabaseProvider( SQLDBType.SQLITE, pathToSQLiteDataBase);
// for NoSQL DB ProviderCouchbaseDatabaseProvidercouchDB=CouchbaseDatabaseProvider(connectionString, username, password, bucketName);
MongoDatabaseProvidermongoDB=MongoDatabaseProvider( connectionString, dbName);
RedisDatabaseProviderredisDB=RedisDatabaseProvider( connectionString);
}
}
The default values for WebDriver if you didn't pass all the paramaters are:
@default("false") StringHeadlessMode, // can be true or false (Not Supported with Safari)@default("Normal") StringPageLoadStrategy, // can be Normal or Eager@default("True") StringPrivateMode, // can be true or false@default("Sandbox") StringSandboxMode, // can be Sandbox or NoSandbox (Not Supported with Safari)@default("True") StringWebSecurityMode// can be True or False (Not Supported with Safari)
Option 2: NonBDD Mode
Demo-Project for setup use after follow the following steps
Step 1: Create a BaseTest Class
Create a Tests Package then create a new class named BaseTest that extends the NonBDDSetup class from Ellithium.
packageTests;
importEllithium.core.driver.DriverFactory;
importEllithium.core.base.NonBDDSetup;
importorg.openqa.selenium.WebDriver;
importorg.testng.annotations.*;
publicclassBaseTestsextendsNonBDDSetup {
WebDriverdriver;
// with Web and the Same Logic for Other@BeforeClasspublicvoidSetup() {
// for Local Machine Web Executiondriver= DriverFactory.getNewLocalDriver(LocalDriverType.Chrome, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal,WebSecurityMode.SecureMode,SandboxMode.Sandbox);
// for Remote Machine Web Executiondriver= DriverFactory.getNewRemoteDriver(RemoteDriverType.Remote_Chrome,newURL("http://localhost:4723"),capabilities, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal,WebSecurityMode.SecureMode,SandboxMode.Sandbox);
// for Android MobileandroidDriver= DriverFactory.getNewMobileDriver(MobileDriverType.Android,newURL("http://localhost:4723"),options);
// for IOS MobileiosDriver=DriverFactory.getNewDriver(MobileDriverType.IOS,newURL("http://localhost:4723"),options);
// for DB SQL Provider [MY_SQL, SQL_SERVER, POSTGRES_SQL, ORACLE_SID, ORACLE_SERVICE_NAME, IBM_DB2]SQLDatabaseProviderdb=newSQLDatabaseProvider(
SQLDBType.MY_SQL,
username,
password,
serverIp,
port,
dbName);
}
// for DB SQL Provider [SQLite]SQLDatabaseProviderSQLitedb= SQLDatabaseProvider( SQLDBType.SQLITE, pathToSQLiteDataBase);
// for NoSQL DB ProviderCouchbaseDatabaseProvidercouchDB=CouchbaseDatabaseProvider(connectionString, username, password, bucketName);
MongoDatabaseProvidermongoDB=MongoDatabaseProvider(StringconnectionString, StringdbName);
RedisDatabaseProviderredisDB=RedisDatabaseProvider(StringconnectionString);
}
@AfterClasspublicvoidtareDown() {
DriverFactory.quitDriver();
}
}
Complete your logic as you like here after that
this class will be used to extend the other classes from it
as here in step 2
Step 2: Create a another Test Class and extend from the BaseTests class