{"id":14978814,"url":"https://github.com/anhtester/automationframeworkselenium","last_synced_at":"2025-04-12T15:39:20.369Z","repository":{"id":39890174,"uuid":"476802081","full_name":"anhtester/AutomationFrameworkSelenium","owner":"anhtester","description":"Test Automation Framework Selenium Java with TestNG building by Anh Tester","archived":false,"fork":false,"pushed_at":"2025-03-15T21:41:22.000Z","size":1978,"stargazers_count":195,"open_issues_count":0,"forks_count":121,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-03T17:11:17.133Z","etag":null,"topics":["allure-reports","anhtester","automation-framework","automation-selenium","automation-testing","extent-reports","java","log4j2","selenium","selenium-java","selenium-webdriver","testng-framework","webdriver"],"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-04-01T16:55:39.000Z","updated_at":"2025-03-31T06:00:49.000Z","dependencies_parsed_at":"2023-10-14T21:07:28.458Z","dependency_job_id":"d614b577-a84c-4b62-a327-3fdb2cc4d3e8","html_url":"https://github.com/anhtester/AutomationFrameworkSelenium","commit_stats":{"total_commits":161,"total_committers":3,"mean_commits":"53.666666666666664","dds":0.5217391304347826,"last_synced_commit":"2fc95c111e33e5b736df77fe86b3f7003e3b1fa4"},"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhtester%2FAutomationFrameworkSelenium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhtester%2FAutomationFrameworkSelenium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhtester%2FAutomationFrameworkSelenium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anhtester%2FAutomationFrameworkSelenium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anhtester","download_url":"https://codeload.github.com/anhtester/AutomationFrameworkSelenium/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248590661,"owners_count":21129870,"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","automation-framework","automation-selenium","automation-testing","extent-reports","java","log4j2","selenium","selenium-java","selenium-webdriver","testng-framework","webdriver"],"created_at":"2024-09-24T13:58:27.610Z","updated_at":"2025-04-12T15:39:20.337Z","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 on Windows](https://github.com/anhtester/AutomationFrameworkSelenium/actions/workflows/maven.yml/badge.svg)](https://github.com/anhtester/AutomationFrameworkSelenium/actions/workflows/maven.yml)\n\n## Test Automation Framework Selenium Java with TestNG building by Anh Tester\n\n🔆 **SOME FEATURES IN FRAMEWORK**\n\n1. Run the parallel test case\n2. Read Config from Properties file\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: WebUI (call common function)\n12. Sample test all function in WebUI keyword\n13. Send message/report to Telegram Bot\n14. Run Selenium Grid (remote)\n15. Use DataFaker and JavaFaker to generate data\n16. Retry Failed Test in TestNG with IRetryAnalyzer and IAnnotationTransformer\n17. 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- Run well on the **Windows** platform\n- Setup **Allure ENV**:\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- Use **IntelliJ IDEA** is the best choice (easy change the 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 test case in suite XML (**src/test/resources/suites/**)\n- Run test case from Maven pom.xml file\n  (**mvn clean test**)\n\n  ![image](https://user-images.githubusercontent.com/87883620/161658761-5040e527-b410-46b3-8697-3298523e201d.png)\n\n**2. Read Config from Properties file**\n\n![image](https://user-images.githubusercontent.com/87883620/194396141-eb0e2750-9b8d-42bb-803d-43b7b5199a73.png)\n\n**3. Extent Report**\n\n- Insert \"FrameworkAnnotation\" as sample or None:\n\n![image](https://user-images.githubusercontent.com/87883620/161657646-3dd652c6-a310-4006-a0cb-de63e2e87e36.png)\n\n- The base value read from Enums (src/main/java/anhtester/com/enums)\n- Setup on TestListener and BaseTest\n\n![image](https://user-images.githubusercontent.com/87883620/161657754-c29b1ee9-f2fb-44b3-bee0-9f425a7cab6f.png)\n\n- **Pdf Report**\n\n![image](https://user-images.githubusercontent.com/87883620/194396654-5b01cb68-161a-4caf-824d-b57cd6091586.png)\n![image](https://user-images.githubusercontent.com/87883620/194396689-ac5381cc-8689-4ce0-8c7f-d2487047faec.png)\n![image](https://user-images.githubusercontent.com/87883620/194396707-ed1308a0-e4bf-4cac-b5b6-0fde44c81091.png)\n\n**4. Allure Report**\n\n- Open Terminal: `allure serve target/allure-results`\n- or command: `allure generate --single-file target/allure-results --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 App Password\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/161659238-88337f69-b742-4cd7-87f2-76670519c8dd.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 utils.com.anhtester.LogUtils.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 **DataProvider** on *\n  *src/test/java/anhtester/com/projects/website/crm/dataprovider/DataProviderManager.java**\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: 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 function to using sample**\n\n- All in one package: src/test/java/anhtester/com/projects/website/crm/testcases\n\n```\n+ ClientTest\n+ SignInTest\n+ TestHandle\n+ TestSimpleCode\n```\n\n**13. Send message/report to Telegram Bot**\n\n- Setup in src/main/java/anhtester/com/report/TelegramManager.java\n- Example: src/test/java/anhtester/com/projects/website/crm/testcases/TestSimpleCode.java\n- Call in TestListener at onFinish TelegramManager.sendReportPath()\n\n===How to get Token and start Bot===\n\n- Read blog: https://blog.devgenius.io/automation-of-reporting-2abe7f101801\n- Copy Token of your Bot =\u003e Paste to TelegramManager class\n- Click your Bot =\u003e input **/start** to start your Bot\n\n===How to get ChatID===\n\n- After starting your Bot, your use Postman and using your Token:\n  Get: https://api.telegram.org/bot{token}/getUpdates =\u003e chat.id\n- Example: https://api.telegram.org/bot19468772:AAHtlc_BH8zlJAGDHuTJy3J72XumY5LxWcE/getUpdates\n\n```\n\"chat\": {\n    \"id\": 123456789,\n    \"first_name\": \"Anh Tester\",\n    \"username\": \"anhtester\",\n    \"type\": \"private\"\n}\n```\n\n**14. Use Selenium Grid**\n\n### Download and Install\n\n1. Download Selenium Grid 4: https://www.selenium.dev/downloads/\n\n(tải bản Latest stable version)\n\n**selenium-server-4.22.0.jar** (updated 24/06/2024)\n\n2. Set PATH for driver in Environment variables:\n\nFollow with link:\nhttps://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/#2-the-path-environment-variable\n\n🔆 Đặt file **selenium-server-4.22.0.jar** vào thư mục nào đó và mở CMD tại thư mục đó lên\n\n### Run default 1 node\n\n✅ Mở 1 Hub với 1 Node mặc định (port 4444)\n\n\u003e java -jar selenium-server-4.22.0.jar standalone\n\n### Run multi Node\n\n✅ Mở 1 Hub với 3 Node: (chạy 4 lệnh mở 4 CMD nhé)\n\n\u003e java -jar selenium-server-4.22.0.jar hub\n\n\u003e java -jar selenium-server-4.22.0.jar node --port 5556\n\n\u003e java -jar selenium-server-4.22.0.jar node --port 6667\n\n\u003e java -jar selenium-server-4.22.0.jar node --port 7778\n\n\n**📝 NOTE: Thực thi nhiều lệnh thì mở nhiều CMD**\n\n### Edit Grid in Config.properties\n\n\u003e TARGET=remote\n\n\u003e REMOTE_URL=192.168.1.13 (url Grid của bạn)\n\n\u003e REMOTE_PORT=4444 (port của Grid)\n\n![image](https://user-images.githubusercontent.com/87883620/200506141-b738104c-b012-4ced-8335-4dadfecd6f66.png)\n\n![image](https://user-images.githubusercontent.com/87883620/200506279-e1496849-70ab-4602-be44-0f44926ab826.png)\n\n![image](https://user-images.githubusercontent.com/87883620/200506218-dbe10f1c-7e65-47e4-a7ac-f29a2b2db43b.png)\n\n**15. Use DataFaker and JavaFaker to generate data**\n\nDocument DataFaker: https://www.datafaker.net/documentation/getting-started/\nor of Anh Tester blog: https://anhtester.com/blog/selenium-java/tao-du-lieu-gia-voi-datafaker\n\n\n### 🔆 Project structure\n\n```\n📦AutomationFrameworkSelenium\n ┣ 📂.github\n ┃ ┗ 📂workflows\n ┃ ┃ ┗ 📜maven.yml\n ┣ 📂src\n ┃ ┣ 📂main\n ┃ ┃ ┣ 📂java\n ┃ ┃ ┃ ┗ 📂anhtester\n ┃ ┃ ┃ ┃ ┗ 📂com\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 ┃ ┃ ┃ ┗ 📂anhtester\n ┃ ┃ ┃ ┃ ┗ 📂com\n ┃ ┃ ┃ ┃ ┃ ┣ 📂common\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BaseTest.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂dataprovider\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜DataProviderAddProduct.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜DataProviderManager.java\n ┃ ┃ ┃ ┃ ┃ ┣ 📂listeners\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AllureListener.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TestListener.java\n ┃ ┃ ┃ ┃ ┃ ┗ 📂projects\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂cms\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂admin\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂model\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂pages\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂brands\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BrandPage.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂category\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜CategoryPage.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂logins\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜LoginPageCMS.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂products\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜AddProductPage.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂testcases\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AddProductTest.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CategoryTest.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LoginTest.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OrderTest.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductInfoTest.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProfileTest.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂users\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂model\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂pages\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dashboard\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜DashboardPage.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂logins\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂order\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜OrderPage.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂products\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProductInfoPageCMS.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂profiles\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProfilePage.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜CommonPageCMS.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 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜CommonPageCRM.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂testcases\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ClientTest.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SignInTest.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜TestHandle.java\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TestSimpleCode.java\n ┃ ┃ ┗ 📂resources\n ┃ ┃ ┃ ┣ 📂config\n ┃ ┃ ┃ ┃ ┣ 📜allure.properties\n ┃ ┃ ┃ ┃ ┣ 📜config.json\n ┃ ┃ ┃ ┃ ┣ 📜config.properties\n ┃ ┃ ┃ ┃ ┗ 📜data.properties\n ┃ ┃ ┃ ┣ 📂objects\n ┃ ┃ ┃ ┃ ┗ 📜crm_locators.properties\n ┃ ┃ ┃ ┣ 📂suites\n ┃ ┃ ┃ ┃ ┣ 📜Clients-parallel.xml\n ┃ ┃ ┃ ┃ ┣ 📜Clients-simple.xml\n ┃ ┃ ┃ ┃ ┣ 📜Clients-testAddClient.xml\n ┃ ┃ ┃ ┃ ┣ 📜Clients-testSearch.xml\n ┃ ┃ ┃ ┃ ┣ 📜SignIn-parallel-methods.xml\n ┃ ┃ ┃ ┃ ┣ 📜SignIn-simple.xml\n ┃ ┃ ┃ ┃ ┗ 📜SuiteAll.xml\n ┃ ┃ ┃ ┣ 📂testdataCMS\n ┃ ┃ ┃ ┃ ┣ 📜Book1.xlsx\n ┃ ┃ ┃ ┃ ┣ 📜ChocoPie.jpg\n ┃ ┃ ┃ ┃ ┣ 📜CMS_DATA.xlsx\n ┃ ┃ ┃ ┃ ┣ 📜CocaCola.png\n ┃ ┃ ┃ ┃ ┣ 📜Cosy.png\n ┃ ┃ ┃ ┃ ┣ 📜GetProductInfo.xlsx\n ┃ ┃ ┃ ┃ ┣ 📜Login.xlsx\n ┃ ┃ ┃ ┃ ┣ 📜Nabati.jpg\n ┃ ┃ ┃ ┃ ┗ 📜quatet.jpg\n ┃ ┃ ┃ ┣ 📂testdataCRM\n ┃ ┃ ┃ ┃ ┣ 📜ClientsDataExcel.xlsx\n ┃ ┃ ┃ ┃ ┣ 📜DOCX_File_01.docx\n ┃ ┃ ┃ ┃ ┣ 📜LoginCSV.csv\n ┃ ┃ ┃ ┃ ┗ 📜TxtFileData.txt\n ┃ ┃ ┃ ┗ 📜pdf-config.json\n ┣ 📂target\n ┃ ┣ 📂classes\n ┃ ┃ ┣ 📂anhtester\n ┃ ┃ ┃ ┗ 📂com\n ┃ ┃ ┃ ┃ ┣ 📂annotations\n ┃ ┃ ┃ ┃ ┃ ┗ 📜FrameworkAnnotation.class\n ┃ ┃ ┃ ┃ ┣ 📂config\n ┃ ┃ ┃ ┃ ┃ ┣ 📜ConfigFactory.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜Configuration.class\n ┃ ┃ ┃ ┃ ┣ 📂constants\n ┃ ┃ ┃ ┃ ┃ ┗ 📜FrameworkConstants.class\n ┃ ┃ ┃ ┃ ┣ 📂driver\n ┃ ┃ ┃ ┃ ┃ ┣ 📜BrowserFactory$1.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜BrowserFactory$2.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜BrowserFactory$3.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜BrowserFactory$4.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜BrowserFactory.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜DriverManager.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜TargetFactory.class\n ┃ ┃ ┃ ┃ ┣ 📂enums\n ┃ ┃ ┃ ┃ ┃ ┣ 📜AuthorType.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜Browser.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜CategoryType.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜FailureHandling.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜Platform.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜Project.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜Target.class\n ┃ ┃ ┃ ┃ ┣ 📂exceptions\n ┃ ┃ ┃ ┃ ┃ ┣ 📜FrameworkException.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜HeadlessNotSupportedException.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜InvalidPathForExcelException.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜InvalidPathForExtentReportFileException.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜InvalidPathForFilesException.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜InvalidRemoteWebDriverURLException.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜TargetNotValidException.class\n ┃ ┃ ┃ ┃ ┣ 📂helpers\n ┃ ┃ ┃ ┃ ┃ ┣ 📜CaptureHelpers.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜DatabaseHelpers.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜ExcelHelpers.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜FileHelpers.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜Helpers.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜PropertiesHelpers.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜ScreenRecoderHelpers.class\n ┃ ┃ ┃ ┃ ┣ 📂keywords\n ┃ ┃ ┃ ┃ ┃ ┗ 📜WebUI.class\n ┃ ┃ ┃ ┃ ┣ 📂mail\n ┃ ┃ ┃ ┃ ┃ ┣ 📜EmailAttachmentsSender$1.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜EmailAttachmentsSender.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜EmailConfig.class\n ┃ ┃ ┃ ┃ ┣ 📂report\n ┃ ┃ ┃ ┃ ┃ ┣ 📜AllureManager.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜ExtentReportManager.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜ExtentTestManager.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜TelegramManager.class\n ┃ ┃ ┃ ┃ ┗ 📂utils\n ┃ ┃ ┃ ┃ ┃ ┣ 📜BrowserInfoUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜DataFakerUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜DataGenerateUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜DateUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜DecodeUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜EmailSendUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜IconUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜JsonUtils$1.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜JsonUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜LanguageUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜LocalStorageUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜LogUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜ObjectUtils.class\n ┃ ┃ ┃ ┃ ┃ ┣ 📜ReportUtils.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜ZipUtils.class\n ┃ ┃ ┣ 📂META-INF\n ┃ ┃ ┃ ┗ 📂services\n ┃ ┃ ┃ ┃ ┗ 📜io.qameta.allure.listener.TestLifecycleListener\n ┃ ┃ ┗ 📜log4j2.properties\n ┃ ┣ 📂generated-sources\n ┃ ┃ ┗ 📂annotations\n ┃ ┣ 📂generated-test-sources\n ┃ ┃ ┗ 📂test-annotations\n ┃ ┗ 📂test-classes\n ┃ ┃ ┣ 📂anhtester\n ┃ ┃ ┃ ┗ 📂com\n ┃ ┃ ┃ ┃ ┣ 📂common\n ┃ ┃ ┃ ┃ ┃ ┗ 📜BaseTest.class\n ┃ ┃ ┃ ┃ ┣ 📂dataprovider\n ┃ ┃ ┃ ┃ ┃ ┣ 📜DataProviderAddProduct.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜DataProviderManager.class\n ┃ ┃ ┃ ┃ ┣ 📂listeners\n ┃ ┃ ┃ ┃ ┃ ┣ 📜AllureListener.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📜TestListener.class\n ┃ ┃ ┃ ┃ ┗ 📂projects\n ┃ ┃ ┃ ┃ ┃ ┣ 📂cms\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂admin\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂model\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂pages\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂brands\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜BrandPage.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂category\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜CategoryPage.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂logins\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜LoginPageCMS.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂products\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜AddProductPage.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂testcases\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜AddProductTest.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜CategoryTest.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜LoginTest.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OrderTest.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ProductInfoTest.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProfileTest.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂users\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂model\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂pages\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂dashboard\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜DashboardPage.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂logins\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂order\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜OrderPage.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂products\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProductInfoPageCMS.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂profiles\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProfilePage.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜CommonPageCMS.class\n ┃ ┃ ┃ ┃ ┃ ┗ 📂crm\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂models\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ClientModel.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SignInModel.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂pages\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂Clients\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ClientPageCRM.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂Dashboard\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜DashboardPageCRM.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂Projects\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜ProjectPageCRM.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂SignIn\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜SignInPageCRM.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂Tasks\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TaskPage.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜CommonPageCRM.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂testcases\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜ClientTest.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜SignInTest.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜TestHandle.class\n ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜TestSimpleCode.class\n ┃ ┃ ┣ 📂config\n ┃ ┃ ┃ ┣ 📜allure.properties\n ┃ ┃ ┃ ┣ 📜config.json\n ┃ ┃ ┃ ┣ 📜config.properties\n ┃ ┃ ┃ ┗ 📜data.properties\n ┃ ┃ ┣ 📂objects\n ┃ ┃ ┃ ┗ 📜crm_locators.properties\n ┃ ┃ ┣ 📂suites\n ┃ ┃ ┃ ┣ 📜Clients-parallel.xml\n ┃ ┃ ┃ ┣ 📜Clients-simple.xml\n ┃ ┃ ┃ ┣ 📜Clients-testAddClient.xml\n ┃ ┃ ┃ ┣ 📜Clients-testSearch.xml\n ┃ ┃ ┃ ┣ 📜SignIn-parallel-methods.xml\n ┃ ┃ ┃ ┣ 📜SignIn-simple.xml\n ┃ ┃ ┃ ┗ 📜SuiteAll.xml\n ┃ ┃ ┣ 📂testdataCMS\n ┃ ┃ ┃ ┣ 📜Book1.xlsx\n ┃ ┃ ┃ ┣ 📜ChocoPie.jpg\n ┃ ┃ ┃ ┣ 📜CMS_DATA.xlsx\n ┃ ┃ ┃ ┣ 📜CocaCola.png\n ┃ ┃ ┃ ┣ 📜Cosy.png\n ┃ ┃ ┃ ┣ 📜GetProductInfo.xlsx\n ┃ ┃ ┃ ┣ 📜Login.xlsx\n ┃ ┃ ┃ ┣ 📜Nabati.jpg\n ┃ ┃ ┃ ┗ 📜quatet.jpg\n ┃ ┃ ┣ 📂testdataCRM\n ┃ ┃ ┃ ┣ 📜ClientsDataExcel.xlsx\n ┃ ┃ ┃ ┣ 📜DOCX_File_01.docx\n ┃ ┃ ┃ ┣ 📜LoginCSV.csv\n ┃ ┃ ┃ ┗ 📜TxtFileData.txt\n ┃ ┃ ┗ 📜pdf-config.json\n ┣ 📜.gitignore\n ┣ 📜pom.xml\n ┗ 📜README.md\n```\n\n### ⭐️ I will support your company if needed\n\n## Copyright 2022-2024 Anh Tester\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%2Fautomationframeworkselenium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanhtester%2Fautomationframeworkselenium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanhtester%2Fautomationframeworkselenium/lists"}