{"id":19493955,"url":"https://github.com/anhtester/automationframeworkcucumbertestng","last_synced_at":"2025-07-04T05:02:42.464Z","repository":{"id":60952266,"uuid":"494889500","full_name":"anhtester/AutomationFrameworkCucumberTestNG","owner":"anhtester","description":"Test Automation Framework Cucumber TestNG with Selenium Java building by Anh Tester","archived":false,"fork":false,"pushed_at":"2025-03-15T21:46:57.000Z","size":804,"stargazers_count":51,"open_issues_count":0,"forks_count":34,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-20T09:06:51.272Z","etag":null,"topics":["allure-reports","anhtester","automated-testing","automation-framework","automation-selenium","cucumber-java","cucumber-reports","java","log4j2","maven","selenium","selenium-java","selenium-webdriver","testng-framework"],"latest_commit_sha":null,"homepage":"https://anhtester.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anhtester.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.txt","contributing":null,"funding":null,"license":null,"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":"2022-05-21T20:35:15.000Z","updated_at":"2025-04-23T19:31:24.000Z","dependencies_parsed_at":"2024-05-27T22:16:45.398Z","dependency_job_id":"47dffa26-e8e5-40ec-bc1c-9c85f4085ee4","html_url":"https://github.com/anhtester/AutomationFrameworkCucumberTestNG","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/anhtester/AutomationFrameworkCucumberTestNG","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhtester%2FAutomationFrameworkCucumberTestNG","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhtester%2FAutomationFrameworkCucumberTestNG/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhtester%2FAutomationFrameworkCucumberTestNG/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhtester%2FAutomationFrameworkCucumberTestNG/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anhtester","download_url":"https://codeload.github.com/anhtester/AutomationFrameworkCucumberTestNG/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhtester%2FAutomationFrameworkCucumberTestNG/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263449897,"owners_count":23468148,"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":["allure-reports","anhtester","automated-testing","automation-framework","automation-selenium","cucumber-java","cucumber-reports","java","log4j2","maven","selenium","selenium-java","selenium-webdriver","testng-framework"],"created_at":"2024-11-10T21:27:58.697Z","updated_at":"2025-07-04T05:02:42.451Z","avatar_url":"https://github.com/anhtester.png","language":"Java","readme":"![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Java CI with Maven](https://github.com/anhtester/AutomationFrameworkCucumberTestNG/actions/workflows/maven.yml/badge.svg)](https://github.com/anhtester/AutomationFrameworkCucumberTestNG/actions/workflows/maven.yml)\n\n## Test Automation Framework Cucumber TestNG and Selenium Java building by Anh Tester\n\n### 💥Important: when clone this repo, you should select 'Recursive' to get all submodules\n\n**🌟SOME FEATURES IN FRAMEWORK**\n\n1. Run the parallel Scenario on feature file\n2. Cucumber Report\n3. Extent Report\n4. Allure Report\n5. Send Mail after the run test (Report information and HTML file attachment)\n6. Write Log to file\n7. Record video and Screenshot test case\n8. Read data test from Excel file (xlsx, csv, json,...)\n9. Base function in the package: utils, helpers\n10. Read data test from Json file\n11. Main keyword is WebUI\n12. Sample test feature\n13. Use DataFaker and JavaFaker to generate data \n14. Javadoc for this source\n\n### **⚙️SYSTEM REQUIREMENTS**\n\n- Install Java JDK (recommend JDK \u003e= 17)\n- Install Chrome Browser, Edge Browser, Firefox Browser\n- Setup **Allure environment**:\n  https://mvnrepository.com/artifact/io.qameta.allure/allure-java-commons\n  or\n  https://anhtester.com/blog/selenium-java/selenium-java-tai-nguyen-cai-dat-moi-truong)\n  Download jar and setting Variable Environment as Java JDK\n\n  ![image](https://user-images.githubusercontent.com/87883620/161661705-b8706957-5a26-4faf-8ddf-2f9aef78418e.png)\n\n- **IntelliJ IDEA** is the best choice (easy to change JDK version)\n\n![image](https://user-images.githubusercontent.com/87883620/161707184-7ad558f2-0d7d-4851-bfd6-2796d4e46593.png)\n\n### **✳️HOW TO USE**\n\n**1. Run parallel the test case**\n\n- Run Cucumber TestRunner from **src/test/java/anhtester/com/runners**\n- Run Feature file (**src/test/resources/features/**)\n- Run Feature in suite XML (**src/test/resources/suites/**)\n- Run Feature from Maven pom.xml file\n  (**```mvn clean test```**)\n- ```mvn clean test -Dbrowser=chrome```\n- ```mvn clean test -Dbrowser=edge```\n- ```mvn clean test -Dbrowser=firefox```\n\n\n  ![image](https://user-images.githubusercontent.com/87883620/161658761-5040e527-b410-46b3-8697-3298523e201d.png)\n\n**2. Cucumber Report**\n\n![image](https://user-images.githubusercontent.com/87883620/194338092-1046970c-2ca4-40da-b0e8-b03f71656c09.png)\n\n**3. Extent Report**\n\n- Config from src/test/resources/extent.properties\n- Config PDF from src/test/resources/pdf-config.yaml\n\n![image](https://user-images.githubusercontent.com/87883620/194404333-306a6d53-514a-4229-ba47-f3c42e7cce1f.png)\n![image](https://user-images.githubusercontent.com/87883620/194404351-706fb702-6efd-4783-bc1e-2b20c56c902a.png)\n\n![image](https://user-images.githubusercontent.com/87883620/194403666-ad996860-6f53-426d-b606-609cd9689ede.png)\n![image](https://user-images.githubusercontent.com/87883620/194403696-2ac21bc5-4855-49fa-8a39-c032f6f59d46.png)\n![image](https://user-images.githubusercontent.com/87883620/194403721-96198d1b-b8fe-4058-9b16-403d0437f8ab.png)\n![image](https://user-images.githubusercontent.com/87883620/194403743-55aa0e59-39c3-470e-92bf-14275ab2e502.png)\n\n**4. Allure Report**\n\n- Open Terminal: **_allure serve target/allure-results_**\nor\n- ```allure generate --single-file target/allure-results -o allure-report --clean```\n\n![image](https://user-images.githubusercontent.com/87883620/161662507-9e4dc698-e452-4b43-a4f5-9808c81419a2.png)\n\n- Insert **@Step(\"title/message\")** above **_@Test_** or any **_Method_** in the project\n- (As sample picture above step 3)\n\n![image](https://user-images.githubusercontent.com/87883620/161657680-af29973d-4e52-451f-b1d6-40b12d182845.png)\n\n![image](https://user-images.githubusercontent.com/87883620/161657689-10365747-ed8f-4ca8-9d84-8060514f216b.png)\n\n**5. Send Mail after the run test**\n\n- Config **true/false** in config.properties\n  (**_src/test/resources/config/config.properties_**)\n- send_email_to_users=**true** is enable send mail\n- Config mail with email and password in **_src/main/java/anhtester/com/mail/EmailConfig.java_**\n- Note: if Gmail, you use Password App\n\n![image](https://user-images.githubusercontent.com/87883620/161658851-2aa41091-ac99-45d9-a79f-aaa828052efb.png)\n\n![image](https://user-images.githubusercontent.com/87883620/194458308-18000685-6785-415f-9e0c-020ae6ed0ebf.png)\n\n**6. Write Log to file**\n\n- Call class: Log.info , Log.pass, Log.error,... (**Log** is a custom global class from Log4j2)\n  (**_import anhtester.com.utils.Log.java_**)\n\n![image](https://user-images.githubusercontent.com/87883620/161657858-d333ac1d-9e7b-4c1b-baac-151a237a1fa0.png)\n\n**7. Record video and Screenshot**\n\n- Setup in **_config.properties_** file\n  (**_src/test/resources/config/config.properties_**)\n- screenshot_passed_steps=yes or no\n- screenshot_failed_steps=yes or no\n- screenshot_skipped_steps=yes or no\n- screenshot_all_steps=yes or no\n\n  ![image](https://user-images.githubusercontent.com/87883620/161657881-5235139a-9982-43c0-ac37-09f22fff1206.png)\n\n**8. Read data test from Excel file**\n\n- Create function with annotaion **DataSupplier** on **_src/main/java/anhtester/com/utils/DataProviderUtils.java_**\n- Call the name of **DataSupplier** above in the test cases as DataProvider of TestNG\n- Read excel with Map and Hashtable\n\n**9. Base function in the package**\n\n- **_src/main/java/anhtester/com/utils_**\n- **_src/main/java/anhtester/com/helpers_**\n\n**10. Read data test from JSON file**\n\n- **JsonUtils** class select the json file path and call **\"get\"** method with **key**\n\n**11. Main keyword is WebUI**\n\n- WebUI class is main keyword in Framework. It contains common functions\n- How to use: WebUI.function_name\n- Example: WebUI.setWindowSize(1024, 768), WebUI.screenshotElement(By by, String elementName),...\n\n**12. Call test case sample**\n\n- Run test case TestNG: src/test/java/anhtester/com/projects/website/crm/testcases\n- Run test case Gherkin: src/test/resources/suites/RunSuiteFeature.xml\n- Or run with maven in **pom.xml** file:  ***mvn clean test***\n\n```\n+ src/test/resources/suites/RunSuiteFeature.xml\n+ ClientTest\n+ SignInTest\n+ TestHandle\n+ TestSimpleCode\n```\n\n### 📙Project structure\n\n```\n📦AutomationFrameworkCucumberTestNG\n ┣ 📂.github\n ┃ ┗ 📂workflows\n ┃ ┃ ┗ 📜maven.yml\n ┣ 📂src\n ┃ ┣ 📂main\n ┃ ┃ ┣ 📂java\n ┃ ┃ ┃ ┗ 📂com\n ┃ ┃ ┃ ┃ ┗ 📂anhtester\n ┃ ┃ ┃ ┃ ┃ ┣ 📂annotations\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FrameworkAnnotation.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂config\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ConfigFactory.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Configuration.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂constants\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜FrameworkConstants.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂driver\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BrowserFactory.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DriverManager.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TargetFactory.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂enums\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AuthorType.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜Browser.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CategoryType.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FailureHandling.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜Platform.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜Project.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜Target.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂exceptions\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FrameworkException.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜HeadlessNotSupportedException.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜InvalidPathForExcelException.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜InvalidPathForExtentReportFileException.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜InvalidPathForFilesException.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜InvalidRemoteWebDriverURLException.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TargetNotValidException.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂helpers\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CaptureHelpers.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DatabaseHelpers.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ExcelHelpers.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜FileHelpers.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜Helpers.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜PropertiesHelpers.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ScreenRecoderHelpers.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂keywords\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜WebUI.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂mail\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EmailAttachmentsSender.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜EmailConfig.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂report\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AllureManager.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ExtentReportManager.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ExtentTestManager.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TelegramManager.java\n ┃ ┃ ┃ ┃ ┃ ┗ 📂utils\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BrowserInfoUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DataFakerUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DataGenerateUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DateUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DecodeUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜EmailSendUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜IconUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜JsonUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LanguageUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LocalStorageUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LogUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ObjectUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ReportUtils.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ZipUtils.java\n ┃ ┃ ┗ 📂resources\n ┃ ┃ ┃ ┣ 📂META-INF\n ┃ ┃ ┃ ┃ ┗ 📂services\n ┃ ┃ ┃ ┃ ┃ ┗ 📜io.qameta.allure.listener.TestLifecycleListener\n ┃ ┃ ┃ ┗ 📜log4j2.properties\n ┃ ┗ 📂test\n ┃ ┃ ┣ 📂java\n ┃ ┃ ┃ ┗ 📂com\n ┃ ┃ ┃ ┃ ┗ 📂anhtester\n ┃ ┃ ┃ ┃ ┃ ┣ 📂common\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜BaseTest.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CommonPageCRM.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜CommonSteps.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂dataprovider\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜DataProviderManager.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂hooks\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CucumberListener.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜Hooks.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TestContext.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂listeners\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AllureListener.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TestListener.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂projects\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂website\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂cms\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂pages\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CommonPageCMS.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜LoginPage.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂stepdefinitions\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜LoginSteps.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂crm\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂models\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ClientModel.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SignInModel.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂pages\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂Clients\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ClientPageCRM.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂Dashboard\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜DashboardPageCRM.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂Projects\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProjectPageCRM.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂SignIn\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SignInPageCRM.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂Tasks\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TaskPage.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂stepdefinitions\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DashboardSteps.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜LoginSteps.java\n ┃ ┃ ┃ ┃ ┃ ┗ 📂runners\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LoginCMSTestRunner.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SigninCRMTestRunner.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜TestRunnerAllFeatureByTag.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TestRunnerForDashboardHRM.java\n ┃ ┃ ┗ 📂resources\n ┃ ┃ ┃ ┣ 📂config\n ┃ ┃ ┃ ┃ ┣ 📜config.json\n ┃ ┃ ┃ ┃ ┣ 📜config.properties\n ┃ ┃ ┃ ┃ ┗ 📜data.properties\n ┃ ┃ ┃ ┣ 📂features\n ┃ ┃ ┃ ┃ ┣ 📜Dashboard.feature\n ┃ ┃ ┃ ┃ ┣ 📜LoginCMS.feature\n ┃ ┃ ┃ ┃ ┗ 📜SigninCRM.feature\n ┃ ┃ ┃ ┣ 📂objects\n ┃ ┃ ┃ ┃ ┗ 📜crm_locators.properties\n ┃ ┃ ┃ ┣ 📂suites\n ┃ ┃ ┃ ┃ ┣ 📜SuiteFeatureAll.xml\n ┃ ┃ ┃ ┃ ┣ 📜SuiteFeatureByTag.xml\n ┃ ┃ ┃ ┃ ┗ 📜SuiteFeatureLoginCMS.xml\n ┃ ┃ ┃ ┣ 📂testdata\n ┃ ┃ ┃ ┃ ┣ 📜ClientsDataExcel.xlsx\n ┃ ┃ ┃ ┃ ┣ 📜DOCX_File_01.docx\n ┃ ┃ ┃ ┃ ┣ 📜LoginCSV.csv\n ┃ ┃ ┃ ┃ ┗ 📜TxtFileData.txt\n ┃ ┃ ┃ ┣ 📜cucumber.properties\n ┃ ┃ ┃ ┣ 📜extent.properties\n ┃ ┃ ┃ ┗ 📜pdf-config.yaml\n ┃ ┃ ┣ 📂config\n ┃ ┃ ┃ ┣ 📜config.json\n ┃ ┃ ┃ ┣ 📜config.properties\n ┃ ┃ ┃ ┗ 📜data.properties\n ┃ ┃ ┣ 📂features\n ┃ ┃ ┃ ┣ 📜Dashboard.feature\n ┃ ┃ ┃ ┣ 📜LoginCMS.feature\n ┃ ┃ ┃ ┗ 📜SigninCRM.feature\n ┃ ┃ ┣ 📂objects\n ┃ ┃ ┃ ┗ 📜crm_locators.properties\n ┃ ┃ ┣ 📂suites\n ┃ ┃ ┃ ┣ 📜SuiteFeatureAll.xml\n ┃ ┃ ┃ ┣ 📜SuiteFeatureByTag.xml\n ┃ ┃ ┃ ┗ 📜SuiteFeatureLoginCMS.xml\n ┃ ┃ ┣ 📂testdata\n ┃ ┃ ┃ ┣ 📜ClientsDataExcel.xlsx\n ┃ ┃ ┃ ┣ 📜DOCX_File_01.docx\n ┃ ┃ ┃ ┣ 📜LoginCSV.csv\n ┃ ┃ ┃ ┗ 📜TxtFileData.txt\n ┃ ┃ ┣ 📜cucumber.properties\n ┃ ┃ ┣ 📜extent.properties\n ┃ ┃ ┗ 📜pdf-config.yaml\n ┣ 📜.gitignore\n ┣ 📜CHANGELOG.txt\n ┣ 📜pom.xml\n ┗ 📜README.md\n```\n\n## ✅Copyright 2022-2025 Anh Tester\n\n### ⭐️ I will support your company if needed\n\n#### **📗 Documents:** https://deepwiki.com/anhtester/AutomationFrameworkCucumberTestNG\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/anhtester/AutomationFrameworkCucumberTestNG)\n\n\u003e Anh Tester Blog: https://anhtester.com/\n\n![Alt text](https://anhtester.com/uploads/logo/anhtester_logo_512.png?raw=true \"Anh Tester - Automation Testing\")\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanhtester%2Fautomationframeworkcucumbertestng","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanhtester%2Fautomationframeworkcucumbertestng","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanhtester%2Fautomationframeworkcucumbertestng/lists"}