{"id":22301820,"url":"https://github.com/abdelrhman-ellithy/ellithium","last_synced_at":"2025-07-29T03:32:43.309Z","repository":{"id":255864700,"uuid":"853316301","full_name":"Abdelrhman-Ellithy/Ellithium","owner":"Abdelrhman-Ellithy","description":"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, cross-browser testing,","archived":false,"fork":false,"pushed_at":"2024-12-02T06:05:55.000Z","size":58107,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-02T07:22:07.586Z","etag":null,"topics":["appium-framework","automation","java","mobile-testing","mobiletesting","sdet","selenium-webdriver","software-developement","software-testing","test-automation","test-automation-framework","test-automation-java","testing","testing-tools"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Abdelrhman-Ellithy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-06T12:18:35.000Z","updated_at":"2024-12-02T06:05:56.000Z","dependencies_parsed_at":"2024-11-22T22:36:41.710Z","dependency_job_id":null,"html_url":"https://github.com/Abdelrhman-Ellithy/Ellithium","commit_stats":null,"previous_names":["abdelrhman-ellithy/autoellithiumsphere","abdelrhman-ellithy/ellithium"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abdelrhman-Ellithy%2FEllithium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abdelrhman-Ellithy%2FEllithium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abdelrhman-Ellithy%2FEllithium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abdelrhman-Ellithy%2FEllithium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Abdelrhman-Ellithy","download_url":"https://codeload.github.com/Abdelrhman-Ellithy/Ellithium/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227976246,"owners_count":17850184,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appium-framework","automation","java","mobile-testing","mobiletesting","sdet","selenium-webdriver","software-developement","software-testing","test-automation","test-automation-framework","test-automation-java","testing","testing-tools"],"created_at":"2024-12-03T18:31:28.712Z","updated_at":"2025-07-29T03:32:43.290Z","avatar_url":"https://github.com/Abdelrhman-Ellithy.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌀 Ellithium\n\u003ctable border=\"0\" align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"3\" align=\"center\"\u003e\n      \u003ca href=\"https://www.linkedin.com/in/abdelrahman-ellithy-3841a7270/\" target=\"_blank\"\u003e\n        \u003cimg width=\"600\" alt=\"Ellithium\" src=\"src\\main\\resources\\logo\\Ellithium.png\"\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n     \u003ctd colspan=\"3\" align=\"center\"\u003e\n        \u003ca href=\"https://app.codacy.com/gh/Abdelrhman-Ellithy/Ellithium/dashboard\" target=\"_blank\"\u003e\n         \u003cimg alt=\"Codacy\" src=\"https://img.shields.io/codacy/grade/4d6d48aba396411fa3170184330ba089?style=for-the-badge\u0026color=blue\u0026label=Code%20Quality\" width=\"170\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://github.com/Abdelrhman-Ellithy/Ellithium/blob/main/LICENSE\" target=\"_blank\"\u003e\n            \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/apache/maven.svg?label=License\" width=\"200\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://central.sonatype.com/artifact/io.github.abdelrhman-ellithy/ellithium\" target=\"_blank\"\u003e\n            \u003cimg alt=\"Codacy\" src=\"https://central.sonatype.com/maven-central-logo.svg?\" width=\"200\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://www.udemy.com/course/master-ellithium-unified-test-automation-framework/?couponCode=DISCOUNT\" target=\"_blank\"\u003e\n            \u003cimg alt=\"Udemy Course\" src=\"https://5.imimg.com/data5/SELLER/Default/2023/11/358764345/KZ/ZL/SV/12869081/udemy-e-learning.png\" width=\"90\" height=\"30\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://abdelrhman-ellithy.github.io/ellithium.github.io/\" target=\"_blank\"\u003e\n            \u003cimg alt=\"Documentation\" src=\"https://img.shields.io/badge/Documentation-User%20Guide-blue\" width=\"200\"\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n## 🌀 Unified Test Automation Framework for Web, Mobile, API, SQL and NoSQL DBs Testing🚀\n\n**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.  \n\n### 👨‍💻 Supported Testing PlatForms\n|Web |Mobile| API|DB|\n| :---: |:---: |:---: |:---: |\n| ✅  |✅  |✅   |✅  |\n\n### 🚀 Supported DB Types with Caching Mechanisms 🚀\n|Mongo | Couchebase |Redis | MY_SQL| SQL_SERVER | ORACLE | IBM_DB2| POSTGRES_SQL|SQLITE |\n| :---: |:---: |:---: |:---: |:---: |:---: |:---: |:---: |:---: |\n| ✅  |✅  |✅   |✅  |✅  |✅  |✅   |✅  |✅  |\n\n### 🚀 Key Features\n \n|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|\n|:--------:|:--------:|:--------:|:------:|:------:|:------:|:------:|:-----:|:------:|:---: |:---: |:---: |\n|✅        |✅         |✅         |✅        |✅      |✅       |✅       |✅      |✅       |✅  |✅  |✅   |\n\n- **Allure Reporting**: Generate rich, interactive test reports with **Allure**, including test history and trend analysis.\n- **Modular Design**: A well-structured and modular framework promoting code reuse and easy maintenance.\n- **Executing OS Commands**: Execute system commands via the built-in **Command Executor Interface**.\n- **API Testing**: Full support for API testing with **Rest Assured** for RESTful services.\n- **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. \n- **Mobile Testing**: Test native, hybrid, and mobile apps on Android and IOS, with Appium integration and support for real devices and emulators. \n- **Test Data Generation**: Dynamically generate test data using **Java Faker** for realistic names, emails, addresses, and more.\n- **CI/CD Integration**: Seamless integration with popular CI/CD tools such as **Jenkins**, **GitHub Actions**, and **GitLab**.\n- **Exception Handling**: Robust mechanisms for capturing exceptions during test execution. \n\n### 👨‍💻 Supported OS with OS Command Executor Interface for Desktop OS\n\n|Windows|Mac|Linux|Android|IOS|\n|:-----:|:--:|:--:|:--:|:--:|\n|✅     |✅  |✅  |✅  |✅  |\n\n### 📄 Supported File Formats for Reading and Writing\n\nEllithium supports reading and writing data from various file formats, including:\n\n|JSON|CSV|Excel|Properties|Jar|PDF|Text|\n|:---:|:--:|:---:|:-----:|:--:|:--:|:--:|\n|✅   |✅  |✅   |    ✅     |✅  |✅  |✅  |\n\n\n## 👨‍💻 Developed using:\n\u003cdiv style=\"display: flex; flex-wrap: wrap; gap: 20px; align-items: center;\"\u003e\n  \u003ca href=\"https://www.oracle.com/eg/java/technologies/downloads/\" target=\"_blank\"\u003e\u003cimg src=\"https://www.chrisjmendez.com/content/images/2019/01/Java_logo_icon.png\" alt=\"Java\" style=\"height:50px; width:auto; max-width:100px;\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://maven.apache.org/\" target=\"_blank\"\u003e\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Apache_Maven_logo.svg/340px-Apache_Maven_logo.svg.png\" alt=\"Maven\" style=\"height:50px; width:auto; max-width:100px;\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.jetbrains.com/idea/\" target=\"_blank\"\u003e\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/IntelliJ_IDEA_Icon.svg/1200px-IntelliJ_IDEA_Icon.svg.png\" alt=\"IntelliJ IDEA\" style=\"height:50px; width:auto; max-width:100px;\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://code.visualstudio.com/\" target=\"_blank\"\u003e\u003cimg src=\"https://code.visualstudio.com/assets/images/code-stable.png\" alt=\"VS Code\" style=\"height:50px; width:auto; max-width:100px;\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u003cbr/\u003e\n\n## 🦸 Powered by:\n\u003cdiv style=\"display: flex; flex-wrap: wrap; gap: 20px; align-items: center;\"\u003e\n  \u003ca href=\"https://www.selenium.dev/\" target=\"_blank\"\u003e\u003cimg src=\"https://www.selenium.dev/images/selenium_4_logo.png\" alt=\"Selenium WebDriver\" style=\"height:50px; width:auto; max-width:120px;\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://rest-assured.io/\" target=\"_blank\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/19369327?s=280\u0026v=4\" alt=\"REST Assured\" style=\"height:50px; width:auto; max-width:120px;\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://cucumber.io/tools/cucumber-open/\" target=\"_blank\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/cucumber/cucumber-ruby/main/docs/img/cucumber-open-logo.png\" alt=\"Cucumber.io\" style=\"height:50px; width:auto; max-width:120px;\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://testng.org/doc/\" target=\"_blank\"\u003e\u003cimg src=\"https://545767148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MdBdUMSCcMYTyNwZf80%2Fuploads%2Fgit-blob-7e5b23257dbb5cc3262c56840d5cf9fa85b27dce%2Ftestng.png?alt=media\" alt=\"TestNG\" style=\"height:50px; width:auto; max-width:120px;\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://docs.qameta.io/allure/\" target=\"_blank\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5879127?s=200\u0026v=4\" alt=\"Allure Reports\" style=\"height:50px; width:auto; max-width:120px;\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://appium.io/docs/en/2.0/\" target=\"_blank\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/appium/appium/master/packages/appium/docs/overrides/assets/images/appium-logo-horiz.png\" alt=\"Appium\" style=\"height:50px; width:auto; max-width:120px;\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/brettwooldridge/HikariCP\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/brettwooldridge/HikariCP/raw/dev/logo.png\" alt=\"HikariCP\" style=\"height:50px; width:auto; max-width:120px;\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u003cbr/\u003e\n\n## 📚 Documentation\n\nFor comprehensive documentation and user guides, visit our official documentation site:\n\n- [**User Guide \u0026 Documentation**](https://abdelrhman-ellithy.github.io/ellithium.github.io/) - Complete documentation including:\n  - Detailed setup instructions\n  - Framework architecture\n  - API documentation\n  - Best practices\n  - Configuration guides\n  - Examples and tutorials\n\n\n### Prerequisites\n\nEnsure you have the following installed:\n- **Java Development Kit (JDK)**: 21 preferred\n- **Maven**: 3.8.1 or higher (last version 3.9.9 recommended)\n\n## 🏁 Getting Started\n\n- **Follow these steps to set up a new Maven project with Ellithium:**\nHere is the updated **Getting Started** section formatted for your README file:\n\n---\n### Step 1: Create a New Maven Project\n\n- **Create a new Maven project using your preferred IDE (e.g., IntelliJ IDEA).**\n\n### Step 2: Update the `pom.xml`\n\n- **Add the following configuration to your `pom.xml` to set the Java version, include the required dependencies, and configure the plugins.**\n\n```xml\n\n\u003cproperties\u003e\n    \u003cmaven.compiler.source\u003e21\u003c/maven.compiler.source\u003e\n    \u003cmaven.compiler.target\u003e21\u003c/maven.compiler.target\u003e\n    \u003cproject.build.sourceEncoding\u003eUTF-8\u003c/project.build.sourceEncoding\u003e\n    \u003cEllithiumversion\u003e2.1.1\u003c/Ellithiumversion\u003e\n\u003c/properties\u003e\n\u003cdependencies\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.abdelrhman-ellithy\u003c/groupId\u003e\n    \u003cartifactId\u003eellithium\u003c/artifactId\u003e\n    \u003cversion\u003e${Ellithiumversion}\u003c/version\u003e\n\u003c/dependency\u003e\n\u003c/dependencies\u003e\n\u003cbuild\u003e\n\u003cplugins\u003e\n    \u003c!-- Maven Compiler Plugin --\u003e\n    \u003cplugin\u003e\n        \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n        \u003cartifactId\u003emaven-compiler-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e3.14.0\u003c/version\u003e\n        \u003cconfiguration\u003e\n            \u003csource\u003e21\u003c/source\u003e\n            \u003ctarget\u003e21\u003c/target\u003e\n        \u003c/configuration\u003e\n    \u003c/plugin\u003e\n\n    \u003cplugin\u003e\n        \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n        \u003cartifactId\u003emaven-surefire-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e3.5.3\u003c/version\u003e\n        \u003cconfiguration\u003e\n            \u003creportsDirectory\u003e${project.build.directory}/surefire-reports\u003c/reportsDirectory\u003e\n            \u003ctestFailureIgnore\u003etrue\u003c/testFailureIgnore\u003e\n            \u003cfailIfNoTests\u003efalse\u003c/failIfNoTests\u003e\n            \u003csystemPropertyVariables\u003e\n                \u003ctestng.dtd.http\u003etrue\u003c/testng.dtd.http\u003e\n            \u003c/systemPropertyVariables\u003e\n            \u003cfailIfNoSpecifiedTests\u003efalse\u003c/failIfNoSpecifiedTests\u003e\n            \u003ctrimStackTrace\u003efalse\u003c/trimStackTrace\u003e\n            \u003cuseFile\u003efalse\u003c/useFile\u003e\n            \u003cencoding\u003eUTF-8\u003c/encoding\u003e\n            \u003cproperties\u003e\n                \u003cproperty\u003e\n                    \u003cname\u003elistener\u003c/name\u003e\n                    \u003cvalue\u003eEllithium.core.execution.listener.CustomTestNGListener\u003c/value\u003e\n                \u003c/property\u003e\n            \u003c/properties\u003e\n        \u003c/configuration\u003e\n    \u003c/plugin\u003e\n\n    \u003c!-- Exec Maven Plugin --\u003e\n    \u003cplugin\u003e\n        \u003cgroupId\u003eorg.codehaus.mojo\u003c/groupId\u003e\n        \u003cartifactId\u003eexec-maven-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e3.5.0\u003c/version\u003e\n        \u003cexecutions\u003e\n            \u003cexecution\u003e\n                \u003cid\u003eintialize\u003c/id\u003e\n                \u003cphase\u003einitialize\u003c/phase\u003e\n                \u003cgoals\u003e\n                    \u003cgoal\u003ejava\u003c/goal\u003e\n                \u003c/goals\u003e\n                \u003cconfiguration\u003e\n                    \u003cmainClass\u003eEllithium.core.execution.Internal.Loader.StartUpLoader\u003c/mainClass\u003e\n                    \u003cincludePluginDependencies\u003etrue\u003c/includePluginDependencies\u003e\n                    \u003cclasspathScope\u003ecompile\u003c/classpathScope\u003e\n                \u003c/configuration\u003e\n            \u003c/execution\u003e\n        \u003c/executions\u003e\n    \u003c/plugin\u003e\n\u003c/plugins\u003e\n\u003cresources\u003e\n    \u003cresource\u003e\n        \u003cdirectory\u003esrc/main/resources/properties\u003c/directory\u003e\n        \u003cincludes\u003e\n            \u003cinclude\u003e**/*\u003c/include\u003e\n        \u003c/includes\u003e\n    \u003c/resource\u003e\n\u003c/resources\u003e\n\u003c/build\u003e\n```\n\n\n\n### Step 3: Open the Termenal in the Project directory then run this command\n   ```bash\n   mvn clean test\n   ```\n\n### Option 1: BDD Mode With Cucumber\n- **[Demo-Project](https://github.com/Abdelrhman-Ellithy/Noon-Shopping-Website-Manual-Automation-) for setup use after follow the following steps**\n### Step 1: Create a Test Runner Class\n\n- **Create a Runner Package then create a new class named TestRunner that extends the `BDDSetup` class from Ellithium**.\n- **Specify the paths for your feature files and step definitions using the `@CucumberOptions`.**\n\n```java\npackage Runner;\n\nimport Ellithium.core.base.BDDSetup;\nimport io.cucumber.testng.CucumberOptions;\n\n@CucumberOptions(\n        glue = \"stepDefinitions\", // path to your stepDefinitions package, note you should use . instead of /\n        features = \"src/main/resources/features\" // path to your features folder\n        , tags = \"@Run\"\n)\npublic class TestRunner extends BDDSetup {\n}\n```\n\n### Step 2: To Create a BaseStepDefinitions Class.\n\n- **Create a BaseStepDefinitions class that will be used to extend the other StepDefinitions Classes from it**.\n\n```java\npackage Base;\n\nimport Ellithium.core.driver.DriverFactory;\nimport org.openqa.selenium.WebDriver;\n\npublic class BaseStepDefinitions {\n    protected WebDriver driver;\n\n    protected AndroidDriver androidDriver;\n    protected IOSDriver iosDriver;\n\n    public BaseStepDefinitions() {\n\n\n        // for Local Machine Web Execution\n        driver= DriverFactory.getNewLocalDriver(LocalDriverType.Chrome, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal,WebSecurityMode.SecureMode,SandboxMode.Sandbox);\n\n        // for Remote Machine Web Execution\n        driver= DriverFactory.getNewRemoteDriver(RemoteDriverType.Remote_Chrome,new URL(\"http://localhost:4723\"),capabilities, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal,WebSecurityMode.SecureMode,SandboxMode.Sandbox);\n\n        // for Android Mobile\n        androidDriver= DriverFactory.getNewMobileDriver(MobileDriverType.Android,new URL(\"http://localhost:4723\"),options);\n        \n        // for IOS Mobile\n        iosDriver=DriverFactory.getNewMobileDriver(MobileDriverType.IOS,new URL(\"http://localhost:4723\"),options);\n        \n\n        // using config builder (after release 2.03)\n\n        DriverConfigBuilder driverConfig=new LocalDriverConfig(LocalDriverType.Chrome, // same for RemoteDriverConfig, MobileDriverConfig\n                HeadlessMode.False, PrivateMode.False,\n                PageLoadStrategyMode.Normal,\n                WebSecurityMode.SecureMode,\n                SandboxMode.Sandbox);\n        driver=DriverFactory.getNewDriver(driverConfig);\n\n        // for DB SQL Provider [MY_SQL, SQL_SERVER, POSTGRES_SQL, ORACLE_SID, ORACLE_SERVICE_NAME, IBM_DB2]\n       SQLDatabaseProvider db=new SQLDatabaseProvider(\n                SQLDBType.MY_SQL,\n                username,\n                password,\n                serverIp,\n                port,\n                dbName);\n    }\n        // for DB SQL Provider [SQLite]\n        SQLDatabaseProvider SQLitedb= SQLDatabaseProvider( SQLDBType.SQLITE, pathToSQLiteDataBase);\n\n        // for NoSQL DB Provider\n        CouchbaseDatabaseProvider couchDB=CouchbaseDatabaseProvider(connectionString,  username,  password,  bucketName);\n        MongoDatabaseProvider mongoDB=MongoDatabaseProvider( connectionString,  dbName);\n        RedisDatabaseProvider redisDB=RedisDatabaseProvider( connectionString);\n    }\n}\n\n```\n- **The default values for WebDriver** if you **didn't pass all the paramaters** are:\n\n```java\n    @default(\"false\") String HeadlessMode,      // can be true or false (Not Supported with Safari)\n    @default(\"Normal\") String PageLoadStrategy, // can be Normal or Eager\n    @default(\"False\") String PrivateMode,        // can be true or false\n    @default(\"Sandbox\") String SandboxMode,     // can be Sandbox or NoSandbox (Not Supported with Safari)\n    @default(\"True\") String WebSecurityMode     // can be True or False (Not Supported with Safari)\n```\n\n### Option 2: default Mode\n- **[Demo-Project](https://github.com/Abdelrhman-Ellithy/The-Internet-Herokuapp) for setup use after follow the following steps**\n### Step 1: Create a BaseTest Class\n\n- **Create a UI_BDD Package then create a new class named BaseTest that extends the `NonBDDSetup` class from Ellithium**.\n\n```java\npackage UI_NonBDD;\n\nimport Ellithium.core.driver.DriverFactory;\nimport Ellithium.core.base.NonBDDSetup;\nimport org.openqa.selenium.WebDriver;\nimport org.testng.annotations.*;\n\npublic class BaseTests {\n    WebDriver driver;\n\n    // with Web and the Same Logic for Other\n    @BeforeClass\n    public void Setup() {\n\n        \n        // for Local Machine Web Execution\n        driver = DriverFactory.getNewLocalDriver(LocalDriverType.Chrome, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal, WebSecurityMode.SecureMode, SandboxMode.Sandbox);\n\n        // for Remote Machine Web Execution\n        driver = DriverFactory.getNewRemoteDriver(RemoteDriverType.Remote_Chrome, new URL(\"http://localhost:4723\"), capabilities, HeadlessMode.False, PrivateMode.True, PageLoadStrategyMode.Normal, WebSecurityMode.SecureMode, SandboxMode.Sandbox);\n\n        // for Android Mobile\n        androidDriver = DriverFactory.getNewMobileDriver(MobileDriverType.Android, new URL(\"http://localhost:4723\"), options);\n\n        // for IOS Mobile\n        iosDriver = DriverFactory.getNewMobileDriver(MobileDriverType.IOS, new URL(\"http://localhost:4723\"), options);\n\n        // for DB SQL Provider [MY_SQL, SQL_SERVER, POSTGRES_SQL, ORACLE_SID, ORACLE_SERVICE_NAME, IBM_DB2]\n        SQLDatabaseProvider db = new SQLDatabaseProvider(\n                SQLDBType.MY_SQL,\n                username,\n                password,\n                serverIp,\n                port,\n                dbName);\n\n        \n        // using config builder (after release 2.03)\n\n        DriverConfigBuilder driverConfig=new LocalDriverConfig(LocalDriverType.Chrome, // same for RemoteDriverConfig, MobileDriverConfig\n                HeadlessMode.False, PrivateMode.False,\n                PageLoadStrategyMode.Normal,\n                WebSecurityMode.SecureMode,\n                SandboxMode.Sandbox);\n        driver=DriverFactory.getNewDriver(driverConfig);\n\n    }\n\n    // for DB SQL Provider [SQLite]\n    SQLDatabaseProvider SQLitedb = SQLDatabaseProvider(SQLDBType.SQLITE, pathToSQLiteDataBase);\n\n    // for NoSQL DB Provider\n    CouchbaseDatabaseProvider couchDB = CouchbaseDatabaseProvider(connectionString, username, password, bucketName);\n    MongoDatabaseProvider mongoDB = MongoDatabaseProvider(String connectionString, String dbName);\n    RedisDatabaseProvider redisDB = RedisDatabaseProvider(String connectionString);\n}\n\n    @AfterClass\n    public void tareDown() {\n        DriverFactory.quitDriver();\n    }\n}\n```\n- **Complete your logic as you like here after that**\n- **this class will be used to extend the other classes from it**\n- **as here in step 2**\n### Step 2: Create a another Test Class and extend from the BaseTests class\n\n```java\npackage UI_BDD;\n\nimport Base.BaseTests;\nimport Ellithium.Utilities.assertion.AssertionExecutor;\nimport Pages.LoginPage;\nimport org.testng.annotations.DataProvider;\nimport org.testng.annotations.Test;\n\npublic class loginTests extends BaseTests {\n    @DataProvider(name = \"invalidLoginData\")\n    Object[][] getInvalidTestData() {\n        return new Object[][]{\n                {\"tomsmith\", \"hamada\", \"Your password is invalid\"},\n                {\"hamada\", \"SuperSecretPassword!\", \"Your username is invalid\"}\n        };\n    }\n\n    LoginPage login;\n\n    @Test(priority = 1, dataProvider = \"invalidLoginData\")\n    public void invalidLogin(String username, String password, String expectedMessage) {\n        login = home.clickFormAuthentication();\n        login.setUserName(username);\n        login.setPassword(password);\n        var secureAreaPage = login.clickLoginBtn();\n        String actualMessage = secureAreaPage.getLoginMassega();\n        AssertionExecutor.hard.assertTrue(actualMessage.contains(expectedMessage));\n    }\n\n    @Test(priority = 2)\n    public void validLogin() {\n        login = home.clickFormAuthentication();\n        login.setPassword(\"SuperSecretPassword!\");\n        login.setUserName(\"tomsmith\");\n        var secureAreaPage = login.clickLoginBtn();\n        String actualMessage = secureAreaPage.getLoginMassega();\n        String expectedMessage = \"You logged into a secure area!\";\n        AssertionExecutor.hard.assertTrue(actualMessage.contains(expectedMessage));\n    }\n}\n```\n### Step 3: Use Driver Actions Class to Perform actions on Web and Mobile, as It handles many steps and syncronization\n\n```java\npackage Pages;\n\nimport Ellithium.Utilities.interactions.DriverActions;\nimport org.openqa.selenium.By;\nimport org.openqa.selenium.WebDriver;\npublic class LoginPage {\n    WebDriver driver;\n    DriverActions driverActions;\n    public LoginPage(WebDriver driver) {\n        this.driver=driver;\n        driverActions=new DriverActions(driver);\n    }\n    public void setUserName(String username){\n        //                     locator,         data      , timeout, polling time \n        driverActions.elements().sendData(By.id(\"username\"),username, 5,           200);\n    }\n    public void setPassword(String password){\n        //                     locator,         data      , timeout\n        driverActions.elements().sendData(By.id(\"password\"),password, 5);\n    }\n    public SecureAreaPage clickLoginBtn(){\n                //                     locator\n        driverActions.elements().clickOnElement(By.tagName(\"button\"));\n        return new SecureAreaPage(driver);\n    }\n\n}\n\n```\n### *This should cover the steps to get your **Ellithium** framework up and running in a new Maven project.*\n\n## 📬 Contact\n\n- **For questions, suggestions, or feedback, feel free to reach out to Abdelrahman Ellithy**\n**at [abdelarhmanellithy@gmail.com](mailto:abdelarhmanellithy@gmail.com).**\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdelrhman-ellithy%2Fellithium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabdelrhman-ellithy%2Fellithium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdelrhman-ellithy%2Fellithium/lists"}