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 Cloud Mobile Device Test Labs
BrowserStack
LambdaTest
Sauce Labs
✅
✅
✅
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
Automatic Screenshots / Video Recording
User Stories Linking
Reporting
✅
✅
✅
✅
✅
✅
✅
✅
Command line Executor Interface
Synchronization Handling
CI/CD integration
Test Data Generation
Notification System
✅
✅
✅
✅
✅
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.
CI/CD Integration: Seamless integration with popular CI/CD tools such as Jenkins, GitHub Actions, and GitLab.
Cloud Mobile Device Test Labs: Reliable exeuction with cloud platforms such as BrowserStack, LambdaTest, and Sauce Labs with mobile app uploader.
Automatic Video Recording: Configurable Web and Mobile execution Recording in synchronous and asynchronous modes based on video recording attachment flag.
Test Data Generation: Dynamically generate test data using Java Faker for realistic names, emails, addresses, and more.
Email Notifications: Automated SMTP email delivery with rich HTML reports and configurable triggers.
Slack Integration: Webhook-based notifications with structured messages and channel targeting.
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:
📚 Documentation
For comprehensive documentation and user guides, visit our official documentation site:
Step 3: Open the Termenal in the Project directory then run this command
mvn clean test
Option 1: BDD Mode With Cucumber
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);
// using config builder (after release 2.03)DriverConfigBuilderdriverConfig=newLocalDriverConfig(LocalDriverType.Chrome, // same for RemoteDriverConfig, MobileDriverConfigHeadlessMode.False, PrivateMode.False,
PageLoadStrategyMode.Normal,
WebSecurityMode.SecureMode,
SandboxMode.Sandbox);
driver=DriverFactory.getNewDriver(driverConfig);
// 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("False") 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: default Mode
Demo-Project for setup use after follow the following steps
Step 1: Create a BaseTest Class
Create a UI_BDD Package then create a new class named BaseTest that extends the NonBDDSetup class from Ellithium.
packageUI_NonBDD;
importEllithium.core.driver.DriverFactory;
importEllithium.core.base.NonBDDSetup;
importorg.openqa.selenium.WebDriver;
importorg.testng.annotations.*;
publicclassBaseTests {
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.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);
// using config builder (after release 2.03)DriverConfigBuilderdriverConfig=newLocalDriverConfig(LocalDriverType.Chrome, // same for RemoteDriverConfig, MobileDriverConfigHeadlessMode.False, PrivateMode.False,
PageLoadStrategyMode.Normal,
WebSecurityMode.SecureMode,
SandboxMode.Sandbox);
driver=DriverFactory.getNewDriver(driverConfig);
}
// 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
This should cover the steps to get your Ellithium framework up and running in a new Maven project.
📬 Contact
For questions, suggestions, or feedback, feel free to reach out to Abdelrahman Ellithyat abdelarhmanellithy@gmail.com.
About
Ellithium is a Unified powerful, flexible Test Automation Framework for Web, Mobile, API, DB Testing, designed to streamline and enhance the testing process. it provides an end-to-end solution for automated testing. With support for BDD.