├── .github
└── workflows
│ └── maven.yml
├── .gitignore
├── .gitmodules
├── CHANGELOG.txt
├── README.md
├── docs
├── allclasses-index.html
├── allpackages-index.html
├── com
│ └── anhtester
│ │ ├── annotations
│ │ ├── FrameworkAnnotation.html
│ │ ├── class-use
│ │ │ └── FrameworkAnnotation.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── common
│ │ ├── BaseTest.html
│ │ ├── class-use
│ │ │ └── BaseTest.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── config
│ │ ├── ConfigFactory.html
│ │ ├── Configuration.html
│ │ ├── class-use
│ │ │ ├── ConfigFactory.html
│ │ │ └── Configuration.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── constants
│ │ ├── FrameworkConstants.html
│ │ ├── class-use
│ │ │ └── FrameworkConstants.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── dataprovider
│ │ ├── DataProviderAddProduct.html
│ │ ├── DataProviderManager.html
│ │ ├── class-use
│ │ │ ├── DataProviderAddProduct.html
│ │ │ └── DataProviderManager.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── driver
│ │ ├── BrowserFactory.html
│ │ ├── DriverManager.html
│ │ ├── TargetFactory.html
│ │ ├── class-use
│ │ │ ├── BrowserFactory.html
│ │ │ ├── DriverManager.html
│ │ │ └── TargetFactory.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── enums
│ │ ├── AuthorType.html
│ │ ├── Browser.html
│ │ ├── CategoryType.html
│ │ ├── FailureHandling.html
│ │ ├── Platform.html
│ │ ├── Project.html
│ │ ├── Target.html
│ │ ├── class-use
│ │ │ ├── AuthorType.html
│ │ │ ├── Browser.html
│ │ │ ├── CategoryType.html
│ │ │ ├── FailureHandling.html
│ │ │ ├── Platform.html
│ │ │ ├── Project.html
│ │ │ └── Target.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── exceptions
│ │ ├── FrameworkException.html
│ │ ├── HeadlessNotSupportedException.html
│ │ ├── InvalidPathForExcelException.html
│ │ ├── InvalidPathForExtentReportFileException.html
│ │ ├── InvalidPathForFilesException.html
│ │ ├── InvalidRemoteWebDriverURLException.html
│ │ ├── TargetNotValidException.html
│ │ ├── class-use
│ │ │ ├── FrameworkException.html
│ │ │ ├── HeadlessNotSupportedException.html
│ │ │ ├── InvalidPathForExcelException.html
│ │ │ ├── InvalidPathForExtentReportFileException.html
│ │ │ ├── InvalidPathForFilesException.html
│ │ │ ├── InvalidRemoteWebDriverURLException.html
│ │ │ └── TargetNotValidException.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── helpers
│ │ ├── CaptureHelpers.html
│ │ ├── DatabaseHelpers.html
│ │ ├── ExcelHelpers.html
│ │ ├── FileHelpers.html
│ │ ├── Helpers.html
│ │ ├── JsonHelpers.html
│ │ ├── PropertiesHelpers.html
│ │ ├── ScreenRecorderHelpers.html
│ │ ├── class-use
│ │ │ ├── CaptureHelpers.html
│ │ │ ├── DatabaseHelpers.html
│ │ │ ├── ExcelHelpers.html
│ │ │ ├── FileHelpers.html
│ │ │ ├── Helpers.html
│ │ │ ├── JsonHelpers.html
│ │ │ ├── PropertiesHelpers.html
│ │ │ └── ScreenRecorderHelpers.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── keywords
│ │ ├── WebUI.html
│ │ ├── class-use
│ │ │ └── WebUI.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── listeners
│ │ ├── AllureListener.html
│ │ ├── AnnotationTransformer.html
│ │ ├── Retry.html
│ │ ├── TestListener.html
│ │ ├── class-use
│ │ │ ├── AllureListener.html
│ │ │ ├── AnnotationTransformer.html
│ │ │ ├── Retry.html
│ │ │ └── TestListener.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── mail
│ │ ├── EmailAttachmentsSender.html
│ │ ├── EmailConfig.html
│ │ ├── class-use
│ │ │ ├── EmailAttachmentsSender.html
│ │ │ └── EmailConfig.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── projects
│ │ ├── App.html
│ │ ├── class-use
│ │ │ └── App.html
│ │ ├── cms
│ │ │ ├── CommonPageCMS.html
│ │ │ ├── admin
│ │ │ │ └── pages
│ │ │ │ │ ├── brands
│ │ │ │ │ ├── BrandPage.html
│ │ │ │ │ ├── class-use
│ │ │ │ │ │ └── BrandPage.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ ├── package-tree.html
│ │ │ │ │ └── package-use.html
│ │ │ │ │ ├── category
│ │ │ │ │ ├── CategoryPage.html
│ │ │ │ │ ├── class-use
│ │ │ │ │ │ └── CategoryPage.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ ├── package-tree.html
│ │ │ │ │ └── package-use.html
│ │ │ │ │ ├── logins
│ │ │ │ │ ├── LoginPageCMS.html
│ │ │ │ │ ├── class-use
│ │ │ │ │ │ └── LoginPageCMS.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ ├── package-tree.html
│ │ │ │ │ └── package-use.html
│ │ │ │ │ └── products
│ │ │ │ │ ├── AddProductPage.html
│ │ │ │ │ ├── class-use
│ │ │ │ │ └── AddProductPage.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ ├── package-tree.html
│ │ │ │ │ └── package-use.html
│ │ │ ├── class-use
│ │ │ │ └── CommonPageCMS.html
│ │ │ ├── package-summary.html
│ │ │ ├── package-tree.html
│ │ │ ├── package-use.html
│ │ │ ├── testcases
│ │ │ │ ├── AddProductTest.html
│ │ │ │ ├── CategoryTest.html
│ │ │ │ ├── LoginTest.html
│ │ │ │ ├── OrderTest.html
│ │ │ │ ├── ProductInfoTest.html
│ │ │ │ ├── ProfileTest.html
│ │ │ │ ├── class-use
│ │ │ │ │ ├── AddProductTest.html
│ │ │ │ │ ├── CategoryTest.html
│ │ │ │ │ ├── LoginTest.html
│ │ │ │ │ ├── OrderTest.html
│ │ │ │ │ ├── ProductInfoTest.html
│ │ │ │ │ └── ProfileTest.html
│ │ │ │ ├── package-summary.html
│ │ │ │ ├── package-tree.html
│ │ │ │ └── package-use.html
│ │ │ └── users
│ │ │ │ └── pages
│ │ │ │ ├── dashboard
│ │ │ │ ├── DashboardPage.html
│ │ │ │ ├── class-use
│ │ │ │ │ └── DashboardPage.html
│ │ │ │ ├── package-summary.html
│ │ │ │ ├── package-tree.html
│ │ │ │ └── package-use.html
│ │ │ │ ├── order
│ │ │ │ ├── OrderPage.html
│ │ │ │ ├── class-use
│ │ │ │ │ └── OrderPage.html
│ │ │ │ ├── package-summary.html
│ │ │ │ ├── package-tree.html
│ │ │ │ └── package-use.html
│ │ │ │ ├── products
│ │ │ │ ├── ProductInfoPageCMS.html
│ │ │ │ ├── class-use
│ │ │ │ │ └── ProductInfoPageCMS.html
│ │ │ │ ├── package-summary.html
│ │ │ │ ├── package-tree.html
│ │ │ │ └── package-use.html
│ │ │ │ └── profiles
│ │ │ │ ├── ProfilePage.html
│ │ │ │ ├── class-use
│ │ │ │ └── ProfilePage.html
│ │ │ │ ├── package-summary.html
│ │ │ │ ├── package-tree.html
│ │ │ │ └── package-use.html
│ │ ├── crm
│ │ │ ├── models
│ │ │ │ ├── ClientModel.html
│ │ │ │ ├── SignInModel.html
│ │ │ │ ├── class-use
│ │ │ │ │ ├── ClientModel.html
│ │ │ │ │ └── SignInModel.html
│ │ │ │ ├── package-summary.html
│ │ │ │ ├── package-tree.html
│ │ │ │ └── package-use.html
│ │ │ ├── pages
│ │ │ │ ├── Clients
│ │ │ │ │ ├── ClientPageCRM.html
│ │ │ │ │ ├── class-use
│ │ │ │ │ │ └── ClientPageCRM.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ ├── package-tree.html
│ │ │ │ │ └── package-use.html
│ │ │ │ ├── CommonPageCRM.html
│ │ │ │ ├── Dashboard
│ │ │ │ │ ├── DashboardPageCRM.html
│ │ │ │ │ ├── class-use
│ │ │ │ │ │ └── DashboardPageCRM.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ ├── package-tree.html
│ │ │ │ │ └── package-use.html
│ │ │ │ ├── Projects
│ │ │ │ │ ├── ProjectPageCRM.html
│ │ │ │ │ ├── class-use
│ │ │ │ │ │ └── ProjectPageCRM.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ ├── package-tree.html
│ │ │ │ │ └── package-use.html
│ │ │ │ ├── SignIn
│ │ │ │ │ ├── SignInPageCRM.html
│ │ │ │ │ ├── class-use
│ │ │ │ │ │ └── SignInPageCRM.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ ├── package-tree.html
│ │ │ │ │ └── package-use.html
│ │ │ │ ├── Tasks
│ │ │ │ │ ├── TaskPage.html
│ │ │ │ │ ├── class-use
│ │ │ │ │ │ └── TaskPage.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ ├── package-tree.html
│ │ │ │ │ └── package-use.html
│ │ │ │ ├── class-use
│ │ │ │ │ └── CommonPageCRM.html
│ │ │ │ ├── package-summary.html
│ │ │ │ ├── package-tree.html
│ │ │ │ └── package-use.html
│ │ │ └── testcases
│ │ │ │ ├── ClientTest.html
│ │ │ │ ├── SignInTest.html
│ │ │ │ ├── TestHandle.html
│ │ │ │ ├── TestSimpleCode.html
│ │ │ │ ├── class-use
│ │ │ │ ├── ClientTest.html
│ │ │ │ ├── SignInTest.html
│ │ │ │ ├── TestHandle.html
│ │ │ │ └── TestSimpleCode.html
│ │ │ │ ├── package-summary.html
│ │ │ │ ├── package-tree.html
│ │ │ │ └── package-use.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ ├── report
│ │ ├── AllureManager.html
│ │ ├── ExtentReportManager.html
│ │ ├── ExtentTestManager.html
│ │ ├── TelegramManager.html
│ │ ├── class-use
│ │ │ ├── AllureManager.html
│ │ │ ├── ExtentReportManager.html
│ │ │ ├── ExtentTestManager.html
│ │ │ └── TelegramManager.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
│ │ └── utils
│ │ ├── BrowserInfoUtils.html
│ │ ├── DataFakerUtils.html
│ │ ├── DataGenerateUtils.html
│ │ ├── DateUtils.html
│ │ ├── DecodeUtils.html
│ │ ├── EmailSendUtils.html
│ │ ├── IconUtils.html
│ │ ├── JsonUtils.html
│ │ ├── LanguageUtils.html
│ │ ├── LocalStorageUtils.html
│ │ ├── LogUtils.html
│ │ ├── ObjectUtils.html
│ │ ├── ReportUtils.html
│ │ ├── ZipUtils.html
│ │ ├── class-use
│ │ ├── BrowserInfoUtils.html
│ │ ├── DataFakerUtils.html
│ │ ├── DataGenerateUtils.html
│ │ ├── DateUtils.html
│ │ ├── DecodeUtils.html
│ │ ├── EmailSendUtils.html
│ │ ├── IconUtils.html
│ │ ├── JsonUtils.html
│ │ ├── LanguageUtils.html
│ │ ├── LocalStorageUtils.html
│ │ ├── LogUtils.html
│ │ ├── ObjectUtils.html
│ │ ├── ReportUtils.html
│ │ └── ZipUtils.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ └── package-use.html
├── constant-values.html
├── element-list
├── help-doc.html
├── index-files
│ ├── index-1.html
│ ├── index-10.html
│ ├── index-11.html
│ ├── index-12.html
│ ├── index-13.html
│ ├── index-14.html
│ ├── index-15.html
│ ├── index-16.html
│ ├── index-17.html
│ ├── index-18.html
│ ├── index-19.html
│ ├── index-2.html
│ ├── index-20.html
│ ├── index-21.html
│ ├── index-22.html
│ ├── index-23.html
│ ├── index-24.html
│ ├── index-3.html
│ ├── index-4.html
│ ├── index-5.html
│ ├── index-6.html
│ ├── index-7.html
│ ├── index-8.html
│ └── index-9.html
├── index.html
├── jquery-ui.overrides.css
├── legal
│ ├── ADDITIONAL_LICENSE_INFO
│ ├── ASSEMBLY_EXCEPTION
│ ├── LICENSE
│ ├── jquery.md
│ └── jqueryUI.md
├── member-search-index.js
├── module-search-index.js
├── overview-summary.html
├── overview-tree.html
├── package-search-index.js
├── resources
│ ├── glass.png
│ └── x.png
├── script-dir
│ ├── jquery-3.6.1.min.js
│ ├── jquery-ui.min.css
│ └── jquery-ui.min.js
├── script.js
├── search.js
├── serialized-form.html
├── stylesheet.css
├── tag-search-index.js
└── type-search-index.js
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── anhtester
│ │ ├── annotations
│ │ └── FrameworkAnnotation.java
│ │ ├── config
│ │ ├── ConfigFactory.java
│ │ └── Configuration.java
│ │ ├── constants
│ │ └── FrameworkConstants.java
│ │ ├── driver
│ │ ├── BrowserFactory.java
│ │ ├── DriverManager.java
│ │ └── TargetFactory.java
│ │ ├── enums
│ │ ├── AuthorType.java
│ │ ├── Browser.java
│ │ ├── CategoryType.java
│ │ ├── FailureHandling.java
│ │ ├── Platform.java
│ │ ├── Project.java
│ │ └── Target.java
│ │ ├── exceptions
│ │ ├── FrameworkException.java
│ │ ├── HeadlessNotSupportedException.java
│ │ ├── InvalidPathForExcelException.java
│ │ ├── InvalidPathForExtentReportFileException.java
│ │ ├── InvalidPathForFilesException.java
│ │ ├── InvalidRemoteWebDriverURLException.java
│ │ └── TargetNotValidException.java
│ │ ├── helpers
│ │ ├── CaptureHelpers.java
│ │ ├── DatabaseHelpers.java
│ │ ├── ExcelHelpers.java
│ │ ├── FileHelpers.java
│ │ ├── JsonHelpers.java
│ │ ├── PropertiesHelpers.java
│ │ ├── ScreenRecorderHelpers.java
│ │ └── SystemHelpers.java
│ │ ├── mail
│ │ ├── EmailAttachmentsSender.java
│ │ └── EmailConfig.java
│ │ ├── reports
│ │ ├── AllureManager.java
│ │ ├── ExtentReportManager.java
│ │ ├── ExtentTestManager.java
│ │ └── TelegramManager.java
│ │ └── utils
│ │ ├── BrowserInfoUtils.java
│ │ ├── DataFakerUtils.java
│ │ ├── DataGenerateUtils.java
│ │ ├── DateUtils.java
│ │ ├── DecodeUtils.java
│ │ ├── EmailSendUtils.java
│ │ ├── IconUtils.java
│ │ ├── JsonUtils.java
│ │ ├── LanguageUtils.java
│ │ ├── LocalStorageUtils.java
│ │ ├── LogUtils.java
│ │ ├── ObjectUtils.java
│ │ ├── ReportUtils.java
│ │ └── ZipUtils.java
└── resources
│ ├── META-INF
│ └── services
│ │ └── io.qameta.allure.listener.TestLifecycleListener
│ └── log4j2.properties
└── test
├── java
└── com
│ └── anhtester
│ ├── common
│ └── BaseTest.java
│ ├── dataprovider
│ ├── DataProviderAddProduct.java
│ └── DataProviderManager.java
│ ├── listeners
│ ├── AllureListener.java
│ ├── AnnotationTransformer.java
│ ├── Retry.java
│ └── TestListener.java
│ └── projects
│ ├── App.java
│ ├── cms
│ ├── CommonPageCMS.java
│ ├── admin
│ │ └── pages
│ │ │ ├── brands
│ │ │ └── BrandPage.java
│ │ │ ├── category
│ │ │ └── CategoryPage.java
│ │ │ ├── logins
│ │ │ └── LoginPageCMS.java
│ │ │ └── products
│ │ │ └── AddProductPage.java
│ ├── testcases
│ │ ├── AddProductTest.java
│ │ ├── CategoryTest.java
│ │ ├── LoginTest.java
│ │ ├── OrderTest.java
│ │ ├── ProductInfoTest.java
│ │ └── ProfileTest.java
│ └── users
│ │ └── pages
│ │ ├── dashboard
│ │ └── DashboardPage.java
│ │ ├── order
│ │ └── OrderPage.java
│ │ ├── products
│ │ └── ProductInfoPageCMS.java
│ │ └── profiles
│ │ └── ProfilePage.java
│ └── crm
│ ├── models
│ ├── ClientModel.java
│ └── SignInModel.java
│ ├── pages
│ ├── Clients
│ │ └── ClientPageCRM.java
│ ├── CommonPageCRM.java
│ ├── Dashboard
│ │ └── DashboardPageCRM.java
│ ├── Projects
│ │ └── ProjectPageCRM.java
│ ├── SignIn
│ │ └── SignInPageCRM.java
│ └── Tasks
│ │ └── TaskPage.java
│ └── testcases
│ ├── ClientTest.java
│ ├── SignInTest.java
│ ├── TestHandle.java
│ └── TestSimpleCode.java
└── resources
├── config
├── allure.properties
├── allure
│ ├── categories.json
│ ├── environment.xml
│ └── executor.json
├── config.json
├── config.properties
└── data.properties
├── datajson
├── arraysample.json
├── book.json
├── store.json
└── tools.json
├── objects
└── crm_locators.properties
├── pdf-config.json
├── suites
├── BuildApp.xml
├── CMS
│ ├── AddProductCMS.xml
│ ├── LoginTestCMS.xml
│ ├── OrderProductCMS.xml
│ ├── ProductInfoCMS.xml
│ └── ProfileCMS.xml
├── CRM
│ ├── Clients-parallel.xml
│ ├── Clients-simple.xml
│ ├── Clients-testAddClient.xml
│ ├── Clients-testSearch.xml
│ ├── SignIn-parallel-methods.xml
│ ├── SignIn-parallel-multi-browser.xml
│ └── SignIn-simple.xml
└── SuiteAll.xml
├── testdataCMS
├── Book1.xlsx
├── CMS_DATA.xlsx
├── Cosy.png
├── GetProductInfo.xlsx
├── Login.xlsx
├── gio-qua-1.jpg
├── gio-qua-2.jpg
├── gio-qua-3.jpg
└── gio-qua-4.jpg
└── testdataCRM
├── ClientsDataExcel.xlsx
├── DOCX_File_01.docx
├── LoginCSV.csv
└── TxtFileData.txt
/.github/workflows/maven.yml:
--------------------------------------------------------------------------------
1 | # This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
3 |
4 | name: Run Maven with GitHub CI
5 |
6 | on:
7 | push:
8 | branches: [ "main" ]
9 | pull_request:
10 | branches: [ "main" ]
11 |
12 | jobs:
13 | build:
14 |
15 | runs-on: windows-latest
16 |
17 | steps:
18 | - uses: actions/checkout@v4
19 | with:
20 | submodules: recursive
21 | fetch-depth: 0
22 | - name: Set up JDK 17
23 | uses: actions/setup-java@v4
24 | with:
25 | distribution: 'corretto'
26 | java-version: '17'
27 | cache: maven
28 | - name: Run test with Maven
29 | run: mvn clean test allure:report --file pom.xml
30 |
31 | - name: Upload Extent Report
32 | if: always()
33 | uses: actions/upload-artifact@v4
34 | with:
35 | name: extent-report
36 | path: exports/ExtentReports/ExtentReports.html
37 |
38 | - name: Upload Allure Report
39 | if: always()
40 | uses: actions/upload-artifact@v4
41 | with:
42 | name: allure-report
43 | path: target/site/allure-maven-plugin/
44 |
45 | - name: Upload videos for tests
46 | if: always()
47 | uses: actions/upload-artifact@v4
48 | with:
49 | name: test-videos
50 | path: exports/ExportData/Videos
51 |
52 | - name: Upload screenshots for tests
53 | if: always()
54 | uses: actions/upload-artifact@v4
55 | with:
56 | name: test-screenshots
57 | path: exports/ExportData/Images
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | bin/
2 | out/
3 | .idea/
4 | .allure/
5 | allure-results/
6 | ExportData/
7 | ExtentReports/
8 | logs/
9 | target/
10 | test-output/
11 | *.mp4
12 | *.avi
13 | allure-report/
14 | .allure/
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "src/main/java/com/anhtester/keywords"]
2 | path = src/main/java/com/anhtester/keywords
3 | url = https://github.com/anhtester/keywords.git
4 |
--------------------------------------------------------------------------------
/docs/com/anhtester/config/class-use/ConfigFactory.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.config.ConfigFactory
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.config.ConfigFactory
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/constants/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.constants
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.constants
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/dataprovider/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.dataprovider
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.dataprovider
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/driver/class-use/DriverManager.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.driver.DriverManager
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.driver.DriverManager
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/driver/class-use/TargetFactory.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.driver.TargetFactory
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.driver.TargetFactory
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/helpers/class-use/CaptureHelpers.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.helpers.CaptureHelpers
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.helpers.CaptureHelpers
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/helpers/class-use/DatabaseHelpers.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.helpers.DatabaseHelpers
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.helpers.DatabaseHelpers
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/helpers/class-use/ExcelHelpers.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.helpers.ExcelHelpers
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.helpers.ExcelHelpers
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/helpers/class-use/FileHelpers.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.helpers.FileHelpers
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.helpers.FileHelpers
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/helpers/class-use/Helpers.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.helpers.SystemHelpers
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.helpers.SystemHelpers
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/helpers/class-use/JsonHelpers.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.helpers.JsonHelpers
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.helpers.JsonHelpers
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/helpers/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.helpers
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.helpers
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/keywords/class-use/WebUI.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.keywords.WebUI
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.keywords.WebUI
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/keywords/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.keywords
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.keywords
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/listeners/class-use/Retry.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.listeners.Retry
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.listeners.Retry
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/listeners/class-use/TestListener.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.listeners.TestListener
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.listeners.TestListener
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/listeners/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.listeners
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.listeners
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/mail/class-use/EmailConfig.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.mail.EmailConfig
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.mail.EmailConfig
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/mail/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.mail
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.mail
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/projects/class-use/App.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.projects.App
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.projects.App
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/projects/cms/testcases/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.projects.cms.testcases
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.projects.cms.testcases
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/projects/crm/models/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.projects.crm.models
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.projects.crm.models
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/projects/crm/testcases/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.projects.crm.testcases
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.projects.crm.testcases
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/projects/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.projects
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.projects
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/report/class-use/AllureManager.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.reports.AllureManager
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.reports.AllureManager
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/report/class-use/TelegramManager.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.reports.TelegramManager
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.reports.TelegramManager
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/report/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.reports
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.reports
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/BrowserInfoUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.BrowserInfoUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.BrowserInfoUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/DataFakerUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.DataFakerUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.DataFakerUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/DataGenerateUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.DataGenerateUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.DataGenerateUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/DateUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.DateUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.DateUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/DecodeUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.DecodeUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.DecodeUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/EmailSendUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.EmailSendUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.EmailSendUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/IconUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.IconUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.IconUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/JsonUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.JsonUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.JsonUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/LanguageUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.LanguageUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.LanguageUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/LogUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.LogUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.LogUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/ObjectUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.ObjectUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.ObjectUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/ReportUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.ReportUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.ReportUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/class-use/ZipUtils.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Class com.anhtester.utils.ZipUtils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils.ZipUtils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/com/anhtester/utils/package-use.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Uses of Package com.anhtester.utils
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
21 |
22 | JavaScript is disabled on your browser.
23 |
24 |
25 |
49 |
50 |
51 |
54 | No usage of com.anhtester.utils
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/docs/element-list:
--------------------------------------------------------------------------------
1 | com.anhtester.annotations
2 | com.anhtester.common
3 | com.anhtester.config
4 | com.anhtester.constants
5 | com.anhtester.dataprovider
6 | com.anhtester.driver
7 | com.anhtester.enums
8 | com.anhtester.exceptions
9 | com.anhtester.helpers
10 | com.anhtester.keywords
11 | com.anhtester.listeners
12 | com.anhtester.mail
13 | com.anhtester.projects
14 | com.anhtester.projects.cms
15 | com.anhtester.projects.cms.admin.pages.brands
16 | com.anhtester.projects.cms.admin.pages.category
17 | com.anhtester.projects.cms.admin.pages.logins
18 | com.anhtester.projects.cms.admin.pages.products
19 | com.anhtester.projects.cms.testcases
20 | com.anhtester.projects.cms.users.pages.dashboard
21 | com.anhtester.projects.cms.users.pages.order
22 | com.anhtester.projects.cms.users.pages.products
23 | com.anhtester.projects.cms.users.pages.profiles
24 | com.anhtester.projects.crm.models
25 | com.anhtester.projects.crm.pages
26 | com.anhtester.projects.crm.pages.Clients
27 | com.anhtester.projects.crm.pages.Dashboard
28 | com.anhtester.projects.crm.pages.Projects
29 | com.anhtester.projects.crm.pages.SignIn
30 | com.anhtester.projects.crm.pages.Tasks
31 | com.anhtester.projects.crm.testcases
32 | com.anhtester.reports
33 | com.anhtester.utils
34 |
--------------------------------------------------------------------------------
/docs/jquery-ui.overrides.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 | *
5 | * This code is free software; you can redistribute it and/or modify it
6 | * under the terms of the GNU General Public License version 2 only, as
7 | * published by the Free Software Foundation. Oracle designates this
8 | * particular file as subject to the "Classpath" exception as provided
9 | * by Oracle in the LICENSE file that accompanied this code.
10 | *
11 | * This code is distributed in the hope that it will be useful, but WITHOUT
12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 | * version 2 for more details (a copy is included in the LICENSE file that
15 | * accompanied this code).
16 | *
17 | * You should have received a copy of the GNU General Public License version
18 | * 2 along with this work; if not, write to the Free Software Foundation,
19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 | *
21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 | * or visit www.oracle.com if you need additional information or have any
23 | * questions.
24 | */
25 |
26 | .ui-state-active,
27 | .ui-widget-content .ui-state-active,
28 | .ui-widget-header .ui-state-active,
29 | a.ui-button:active,
30 | .ui-button:active,
31 | .ui-button.ui-state-active:hover {
32 | /* Overrides the color of selection used in jQuery UI */
33 | background: #F8981D;
34 | border: 1px solid #F8981D;
35 | }
36 |
--------------------------------------------------------------------------------
/docs/legal/ADDITIONAL_LICENSE_INFO:
--------------------------------------------------------------------------------
1 | Please see ..\java.base\ADDITIONAL_LICENSE_INFO
2 |
--------------------------------------------------------------------------------
/docs/legal/ASSEMBLY_EXCEPTION:
--------------------------------------------------------------------------------
1 | Please see ..\java.base\ASSEMBLY_EXCEPTION
2 |
--------------------------------------------------------------------------------
/docs/legal/LICENSE:
--------------------------------------------------------------------------------
1 | Please see ..\java.base\LICENSE
2 |
--------------------------------------------------------------------------------
/docs/legal/jqueryUI.md:
--------------------------------------------------------------------------------
1 | ## jQuery UI v1.13.2
2 |
3 | ### jQuery UI License
4 | ```
5 | Copyright jQuery Foundation and other contributors, https://jquery.org/
6 |
7 | This software consists of voluntary contributions made by many
8 | individuals. For exact contribution history, see the revision history
9 | available at https://github.com/jquery/jquery-ui
10 |
11 | The following license applies to all parts of this software except as
12 | documented below:
13 |
14 | ====
15 |
16 | Permission is hereby granted, free of charge, to any person obtaining
17 | a copy of this software and associated documentation files (the
18 | "Software"), to deal in the Software without restriction, including
19 | without limitation the rights to use, copy, modify, merge, publish,
20 | distribute, sublicense, and/or sell copies of the Software, and to
21 | permit persons to whom the Software is furnished to do so, subject to
22 | the following conditions:
23 |
24 | The above copyright notice and this permission notice shall be
25 | included in all copies or substantial portions of the Software.
26 |
27 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
28 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
30 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
31 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
32 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
33 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34 |
35 | ====
36 |
37 | Copyright and related rights for sample code are waived via CC0. Sample
38 | code is defined as all source code contained within the demos directory.
39 |
40 | CC0: http://creativecommons.org/publicdomain/zero/1.0/
41 |
42 | ====
43 |
44 | All files located in the node_modules and external directories are
45 | externally maintained libraries used by this software which have their
46 | own licenses; we recommend you read them, as their terms may differ from
47 | the terms above.
48 |
49 | ```
50 |
--------------------------------------------------------------------------------
/docs/module-search-index.js:
--------------------------------------------------------------------------------
1 | moduleSearchIndex = [];updateSearchResults();
--------------------------------------------------------------------------------
/docs/overview-summary.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Generated Documentation (Untitled)
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | JavaScript is disabled on your browser.
22 |
23 | index.html
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/docs/package-search-index.js:
--------------------------------------------------------------------------------
1 | packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"com.anhtester.annotations"},{"l":"com.anhtester.common"},{"l":"com.anhtester.config"},{"l":"com.anhtester.constants"},{"l":"com.anhtester.dataprovider"},{"l":"com.anhtester.driver"},{"l":"com.anhtester.enums"},{"l":"com.anhtester.exceptions"},{"l":"com.anhtester.helpers"},{"l":"com.anhtester.keywords"},{"l":"com.anhtester.listeners"},{"l":"com.anhtester.mail"},{"l":"com.anhtester.projects"},{"l":"com.anhtester.projects.cms"},{"l":"com.anhtester.projects.cms.admin.pages.brands"},{"l":"com.anhtester.projects.cms.admin.pages.category"},{"l":"com.anhtester.projects.cms.admin.pages.logins"},{"l":"com.anhtester.projects.cms.admin.pages.products"},{"l":"com.anhtester.projects.cms.testcases"},{"l":"com.anhtester.projects.cms.users.pages.dashboard"},{"l":"com.anhtester.projects.cms.users.pages.order"},{"l":"com.anhtester.projects.cms.users.pages.products"},{"l":"com.anhtester.projects.cms.users.pages.profiles"},{"l":"com.anhtester.projects.crm.models"},{"l":"com.anhtester.projects.crm.pages"},{"l":"com.anhtester.projects.crm.pages.Clients"},{"l":"com.anhtester.projects.crm.pages.Dashboard"},{"l":"com.anhtester.projects.crm.pages.Projects"},{"l":"com.anhtester.projects.crm.pages.SignIn"},{"l":"com.anhtester.projects.crm.pages.Tasks"},{"l":"com.anhtester.projects.crm.testcases"},{"l":"com.anhtester.report"},{"l":"com.anhtester.utils"}];updateSearchResults();
--------------------------------------------------------------------------------
/docs/resources/glass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/docs/resources/glass.png
--------------------------------------------------------------------------------
/docs/resources/x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/docs/resources/x.png
--------------------------------------------------------------------------------
/docs/script-dir/jquery-ui.min.css:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.13.2 - 2023-02-27
2 | * http://jqueryui.com
3 | * Includes: core.css, autocomplete.css, menu.css
4 | * Copyright jQuery Foundation and other contributors; Licensed MIT */
5 |
6 | .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;-ms-filter:"alpha(opacity=0)"}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}
--------------------------------------------------------------------------------
/docs/tag-search-index.js:
--------------------------------------------------------------------------------
1 | tagSearchIndex = [{"l":"Constant Field Values","h":"","u":"constant-values.html"},{"l":"Serialized Form","h":"","u":"serialized-form.html"}];updateSearchResults();
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/annotations/FrameworkAnnotation.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.annotations;
2 |
3 | import com.anhtester.enums.AuthorType;
4 | import com.anhtester.enums.CategoryType;
5 |
6 | import java.lang.annotation.ElementType;
7 | import java.lang.annotation.Retention;
8 | import java.lang.annotation.RetentionPolicy;
9 | import java.lang.annotation.Target;
10 |
11 | //This is an Custom Annotation
12 | @Retention(RetentionPolicy.RUNTIME)
13 | @Target(ElementType.METHOD)
14 | public @interface FrameworkAnnotation {
15 |
16 | // This is not a method
17 | public AuthorType[] author();
18 |
19 | // public String[] category();
20 | public CategoryType[] category();
21 |
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/config/ConfigFactory.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.config;
2 |
3 | import org.aeonbits.owner.ConfigCache;
4 |
5 | public class ConfigFactory {
6 |
7 | private ConfigFactory() {
8 | }
9 |
10 | public static Configuration getConfigs() {
11 | return ConfigCache.getOrCreate(Configuration.class);
12 |
13 | }
14 |
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/config/Configuration.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.config;
2 |
3 | import org.aeonbits.owner.Config;
4 | import org.aeonbits.owner.Config.Sources;
5 | import org.aeonbits.owner.Config.LoadPolicy;
6 | import org.aeonbits.owner.Config.LoadType;
7 |
8 | @LoadPolicy(LoadType.MERGE)
9 | @Sources({"system:properties",
10 | "system:env",
11 | "file:./src/test/resources/config/config.properties",
12 | "file:./src/test/resources/config/data.properties"})
13 |
14 | public interface Configuration extends Config {
15 |
16 | @Key("TARGET")
17 | String TARGET();
18 |
19 | @Key("BROWSER")
20 | String BROWSER();
21 |
22 | @Key("HEADLESS")
23 | Boolean HEADLESS();
24 |
25 | @Key("URL_CRM")
26 | String URL_CRM();
27 |
28 | @Key("REMOTE_URL")
29 | String REMOTE_URL();
30 |
31 | @Key("REMOTE_PORT")
32 | String REMOTE_PORT();
33 |
34 | @Key("EXCEL_DATA_FILE_PATH")
35 | String EXCEL_DATA_FILE_PATH();
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/driver/DriverManager.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.driver;
2 |
3 | import org.openqa.selenium.WebDriver;
4 |
5 | public class DriverManager {
6 |
7 | private static final ThreadLocal driver = new ThreadLocal<>();
8 |
9 | private DriverManager() {
10 | super();
11 | }
12 |
13 | public static WebDriver getDriver() {
14 | return driver.get();
15 | }
16 |
17 | public static void setDriver(WebDriver driver) {
18 | DriverManager.driver.set(driver);
19 | }
20 |
21 | public static void quit() {
22 | if (DriverManager.getDriver() != null){
23 | DriverManager.getDriver().quit();
24 | }
25 | }
26 |
27 | // public static String getInfo() {
28 | // Capabilities cap = ((RemoteWebDriver) DriverManager.getDriver()).getCapabilities();
29 | // String browserName = cap.getBrowserName();
30 | // String platform = cap.getPlatformName().toString();
31 | // String version = cap.getBrowserVersion();
32 | // return String.format("browser: %s v: %s platform: %s", browserName, version, platform);
33 | // }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/enums/AuthorType.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.enums;
2 |
3 | /**
4 | * A Java Enum is a special Java type used to define collections of constants.
5 | */
6 | public enum AuthorType {
7 | AnhTester, James, AnVo
8 | }
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/enums/Browser.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.enums;
2 |
3 | /**
4 | *
5 | */
6 | public enum Browser {
7 | /**
8 | *
9 | */
10 | CHROME, EDGE, FIREFOX
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/enums/CategoryType.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.enums;
2 |
3 | /**A Java Enum is a special Java type used to define collections of constants.*/
4 | public enum CategoryType {
5 | REGRESSION,
6 | SMOKE,
7 | SANITY
8 | }
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/enums/FailureHandling.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.enums;
7 |
8 | public enum FailureHandling {
9 | STOP_ON_FAILURE, CONTINUE_ON_FAILURE, OPTIONAL
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/enums/Platform.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.enums;
2 |
3 | public enum Platform {
4 | WEB, MOBILE, DESKTOP
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/enums/Project.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.enums;
2 |
3 | public enum Project {
4 | CRM, HRM, ECOMMERCE
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/enums/Target.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.enums;
2 |
3 | public enum Target {
4 | LOCAL, REMOTE
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/exceptions/FrameworkException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022.
3 | * Automation Framework Selenium - Anh Tester
4 | */
5 |
6 | package com.anhtester.exceptions;
7 |
8 | /**
9 | * FrameworkException extends RuntimeException - because I want to terminate the program when the Exception
10 | * comes
11 | */
12 | @SuppressWarnings("serial")
13 | public class FrameworkException extends RuntimeException {
14 |
15 | public FrameworkException(String message) {
16 | super(message);
17 | }
18 |
19 | public FrameworkException(String message, Throwable cause) {
20 | super(message, cause);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/exceptions/HeadlessNotSupportedException.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.exceptions;
2 |
3 | public class HeadlessNotSupportedException extends IllegalStateException {
4 |
5 | public HeadlessNotSupportedException(String browser) {
6 | super(String.format("Headless not supported for %s browser", browser));
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/exceptions/InvalidPathForExcelException.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.exceptions;
2 |
3 | public class InvalidPathForExcelException extends InvalidPathForFilesException{
4 |
5 | /**
6 | * Pass the message that needs to be appended to the stacktrace
7 | * @param message Details about the exception or custom message
8 | */
9 | public InvalidPathForExcelException(String message) {
10 | super(message);
11 | }
12 |
13 | /**
14 | *
15 | * @param message Details about the exception or custom message
16 | * @param cause Pass the enriched stacktrace or customised stacktrace
17 | */
18 | public InvalidPathForExcelException(String message, Throwable cause) {
19 | super(message,cause);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/exceptions/InvalidPathForExtentReportFileException.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.exceptions;
2 |
3 | @SuppressWarnings("serial")
4 | public class InvalidPathForExtentReportFileException extends InvalidPathForFilesException {
5 |
6 | public InvalidPathForExtentReportFileException(String message) {
7 | super(message);
8 | }
9 |
10 | public InvalidPathForExtentReportFileException(String message, Throwable cause) {
11 | super(message, cause);
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/exceptions/InvalidPathForFilesException.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.exceptions;
2 |
3 | @SuppressWarnings("serial")
4 | public class InvalidPathForFilesException extends FrameworkException {
5 |
6 | public InvalidPathForFilesException(String message) {
7 | super(message);
8 | }
9 |
10 | public InvalidPathForFilesException(String message, Throwable cause) {
11 | super(message, cause);
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/exceptions/InvalidRemoteWebDriverURLException.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.exceptions;
2 |
3 | @SuppressWarnings("serial")
4 | public class InvalidRemoteWebDriverURLException extends FrameworkException {
5 |
6 | public InvalidRemoteWebDriverURLException(String message) {
7 | super(message);
8 | }
9 |
10 | public InvalidRemoteWebDriverURLException(String message, Throwable cause) {
11 | super(message, cause);
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/exceptions/TargetNotValidException.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.exceptions;
2 |
3 | public class TargetNotValidException extends IllegalStateException {
4 |
5 | public TargetNotValidException(String target) {
6 | super(String.format("Target %s not supported. Use either local or gird", target));
7 | }
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/helpers/DatabaseHelpers.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.helpers;
7 |
8 | import java.sql.Connection;
9 | import java.sql.DriverManager;
10 | import java.sql.SQLException;
11 |
12 | public class DatabaseHelpers {
13 |
14 | public DatabaseHelpers() {
15 | super();
16 | }
17 |
18 | public static Connection getMySQLConnection(String hostName, String dbName, String userName, String password) throws SQLException {
19 |
20 | // Ví dụ: jdbc:mysql://localhost:3306/saleserp
21 | String connectionURL = "jdbc:mysql://" + hostName + ":3306/" + dbName;
22 |
23 | Connection conn = DriverManager.getConnection(connectionURL, userName, password);
24 |
25 | return conn;
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/helpers/JsonHelpers.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.helpers;
2 |
3 | import com.jayway.jsonpath.DocumentContext;
4 | import com.jayway.jsonpath.JsonPath;
5 |
6 | import java.io.BufferedReader;
7 | import java.io.FileNotFoundException;
8 | import java.io.FileReader;
9 | import java.io.IOException;
10 |
11 | public class JsonHelpers {
12 | //Json Path
13 | private BufferedReader bufferedReader;
14 | private StringBuffer stringBuffer;
15 | private DocumentContext jsonContext;
16 | private String lines;
17 | private String jsonFilePathDefault = SystemHelpers.getCurrentDir() + "src/test/resources/datajson/store.json";
18 |
19 | public void setJsonFile(String jsonPath) {
20 | try {
21 | bufferedReader = new BufferedReader(new FileReader(SystemHelpers.getCurrentDir() + jsonPath));
22 | stringBuffer = new StringBuffer();
23 | while ((lines = bufferedReader.readLine()) != null) {
24 | stringBuffer.append(lines);
25 | }
26 | jsonContext = JsonPath.parse(stringBuffer.toString());
27 | } catch (FileNotFoundException e) {
28 | e.printStackTrace();
29 | } catch (IOException e) {
30 | e.printStackTrace();
31 | }
32 | }
33 |
34 | public Object getData(String key) {
35 | //JsonPath.read(getJsonDataSourceString(), key);
36 | return jsonContext.read(key);
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/mail/EmailConfig.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022.
3 | * Automation Framework Selenium - Anh Tester
4 | */
5 |
6 | package com.anhtester.mail;
7 |
8 | import static com.anhtester.constants.FrameworkConstants.REPORT_TITLE;
9 |
10 | /**
11 | * Data for Sending email after execution
12 | */
13 | public class EmailConfig {
14 |
15 | //Remember to create an app password (App Password) for Gmail before sending
16 | //If you use Hosting's email, it's normal
17 | //Enable Override Report and Send mail in config file => src/test/resources/config/config.properties
18 | //OVERRIDE_REPORTS=yes
19 | //send_email_to_users=yes
20 |
21 | public static final String SERVER = "smtp.gmail.com";
22 | public static final String PORT = "587";
23 |
24 | public static final String FROM = "anhtester@email.com";
25 | public static final String PASSWORD = "******";
26 |
27 | public static final String[] TO = {"anhtester@mailinator.com"};
28 | public static final String SUBJECT = REPORT_TITLE;
29 | }
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/reports/ExtentTestManager.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.reports;
2 |
3 | import com.aventstack.extentreports.ExtentTest;
4 |
5 | public class ExtentTestManager {
6 |
7 | private static ThreadLocal extentTest = new ThreadLocal<>();
8 |
9 | public static ExtentTest getExtentTest() {
10 | //System.out.println("ExtentTestManager class: " + extentTest.get());
11 | return extentTest.get();
12 | }
13 |
14 | public static void setExtentTest(ExtentTest test) {
15 | extentTest.set(test);
16 | }
17 |
18 | public static void unload() {
19 | extentTest.remove();
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/utils/BrowserInfoUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.utils;
7 |
8 | import org.testng.Reporter;
9 |
10 | import static com.anhtester.constants.FrameworkConstants.BROWSER;
11 |
12 | public final class BrowserInfoUtils {
13 |
14 | private BrowserInfoUtils() {
15 | super();
16 | }
17 |
18 | private static final String OS = System.getProperty("os.name").toLowerCase();
19 |
20 | public static String getBrowserInfo() {
21 | String browser = "";
22 | if (Reporter.getCurrentTestResult().getTestContext().getCurrentXmlTest().getParameter("BROWSER") == null) {
23 | browser = BROWSER.toUpperCase();
24 | } else {
25 | browser = Reporter.getCurrentTestResult().getTestContext().getCurrentXmlTest().getParameter("BROWSER").trim().toUpperCase();
26 | }
27 | return browser;
28 | }
29 |
30 | public static String getOSInfo() {
31 | return System.getProperty("os.name");
32 | }
33 |
34 | public static boolean isWindows() {
35 | return (OS.contains("win"));
36 | }
37 |
38 | public static boolean isMac() {
39 | return (OS.contains("mac"));
40 | }
41 |
42 | public static boolean isUnix() {
43 | return (OS.contains("nix") || OS.contains("nux") || OS.contains("aix"));
44 | }
45 |
46 | public static boolean isSolaris() {
47 | return (OS.contains("sunos"));
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/utils/DataFakerUtils.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.utils;
2 |
3 | import com.anhtester.constants.FrameworkConstants;
4 | import net.datafaker.Faker;
5 |
6 | import java.util.Locale;
7 |
8 | public class DataFakerUtils {
9 | //Java Locale List: https://www.viralpatel.net/java-locale-list-tutorial/
10 | //private static Faker faker = new Faker(new Locale("vi")); //Vietnam
11 | private static Faker faker = null; //English US
12 |
13 | public static Faker getFaker() {
14 | if (faker == null) {
15 | faker = new Faker(new Locale(FrameworkConstants.LOCATE));
16 | }
17 | return faker;
18 | }
19 |
20 | public static void setFaker(Faker faker) {
21 | DataFakerUtils.faker = faker;
22 | }
23 |
24 | public static void setLocate(String LocateName) {
25 | faker = new Faker(new Locale(LocateName));
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/utils/DateUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.utils;
7 |
8 | import java.text.SimpleDateFormat;
9 | import java.util.Date;
10 |
11 | //final -> We do not want any class to extend this class
12 | public final class DateUtils {
13 |
14 | private DateUtils() {
15 | super();
16 | }
17 |
18 | /**
19 | * @return lấy ra ngày tháng năm hiện tại của máy theo cấu trúc mặc định
20 | */
21 | public static String getCurrentDate() {
22 | Date date = new Date();
23 | return date.toString().replace(":", "_").replace(" ", "_");
24 | }
25 |
26 | /**
27 | * @return lấy ra ngày tháng năm và giờ phút giây hiện tại của máy theo cấu trúc dd/MM/yyyy HH:mm:ss
28 | */
29 | public static String getCurrentDateTime() {
30 | Date now = new Date();
31 | SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
32 | return formatter.format(now);
33 | }
34 |
35 | public static String getCurrentDateTimeCustom(String separator_Character) {
36 | Date now = new Date();
37 | SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
38 | String timeStamp = formatter.format(now).replace("/", separator_Character);
39 | timeStamp = timeStamp.replace(" ", separator_Character);
40 | timeStamp = timeStamp.replace(":", separator_Character);
41 | return timeStamp;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/utils/DecodeUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.utils;
7 |
8 | import org.apache.commons.codec.binary.Base64;
9 |
10 | import javax.crypto.Cipher;
11 | import javax.crypto.SecretKey;
12 | import javax.crypto.spec.SecretKeySpec;
13 |
14 | public final class DecodeUtils {
15 |
16 | private DecodeUtils() {
17 | super();
18 | }
19 |
20 | //Encrypt and Decrypt data
21 |
22 | private static final String key1 = "AES";
23 | private static final String key2 = "AES/ECB/PKCS5Padding";
24 |
25 | private static String encryptionKeyString = "autotestselenium";
26 | private static final byte[] encryptionKeyBytes = encryptionKeyString.getBytes();
27 |
28 | private static SecretKey generateKey() {
29 | SecretKey key = new SecretKeySpec(encryptionKeyBytes, key1);
30 | return key;
31 | }
32 |
33 | public static String encrypt(String Data) {
34 | String encryptedValue = null;
35 | try {
36 | SecretKey key = generateKey();
37 | Cipher c = Cipher.getInstance(key2);
38 | c.init(Cipher.ENCRYPT_MODE, key);
39 | byte[] encVal = c.doFinal(Data.getBytes());
40 | encryptedValue = Base64.encodeBase64String(encVal);
41 | } catch (Exception e) {
42 | e.printStackTrace();
43 | }
44 | return encryptedValue;
45 | }
46 |
47 | public static String decrypt(String encryptedData) {
48 | String decryptedValue = null;
49 | try {
50 | SecretKey key = generateKey();
51 | Cipher c = Cipher.getInstance(key2);
52 | c.init(Cipher.DECRYPT_MODE, key);
53 | byte[] decordedValue = Base64.decodeBase64(encryptedData);
54 | byte[] decValue = c.doFinal(decordedValue);
55 | decryptedValue = new String(decValue);
56 | } catch (Exception e) {
57 | e.printStackTrace();
58 | }
59 | return decryptedValue;
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/utils/IconUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.utils;
7 |
8 | import com.anhtester.enums.Browser;
9 |
10 | import static com.anhtester.constants.FrameworkConstants.*;
11 |
12 | public final class IconUtils {
13 |
14 | private IconUtils() {
15 | super();
16 | }
17 |
18 | public static String getBrowserIcon() {
19 | if (BrowserInfoUtils.getBrowserInfo().contains(Browser.CHROME.toString())) {
20 | return ICON_BROWSER_CHROME;
21 | } else if (BrowserInfoUtils.getBrowserInfo().contains(Browser.EDGE.toString())) {
22 | return ICON_BROWSER_EDGE;
23 | } else if (BrowserInfoUtils.getBrowserInfo().contains(Browser.FIREFOX.toString())) {
24 | return ICON_BROWSER_FIREFOX;
25 | } else {
26 | return BrowserInfoUtils.getBrowserInfo();
27 | }
28 | }
29 |
30 | public static String getOSIcon() {
31 |
32 | String operationSystem = BrowserInfoUtils.getOSInfo().toLowerCase();
33 | if (operationSystem.contains("win")) {
34 | return ICON_OS_WINDOWS;
35 | } else if (operationSystem.contains("nix") || operationSystem.contains("nux") || operationSystem.contains("aix")) {
36 | return ICON_OS_LINUX;
37 | } else if (operationSystem.contains("mac")) {
38 | return ICON_OS_MAC;
39 | }
40 | return operationSystem;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/utils/LocalStorageUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.utils;
7 |
8 | import com.anhtester.driver.DriverManager;
9 | import org.openqa.selenium.html5.LocalStorage;
10 | import org.openqa.selenium.html5.WebStorage;
11 |
12 | public class LocalStorageUtils {
13 |
14 | private LocalStorageUtils() {
15 | super();
16 | }
17 |
18 | public static String getItem(String key) {
19 | LocalStorage localStorage = ((WebStorage) DriverManager.getDriver()).getLocalStorage();
20 | return localStorage.getItem(key);
21 | }
22 |
23 | public static void setItem(String key, String value) {
24 | LocalStorage localStorage = ((WebStorage) DriverManager.getDriver()).getLocalStorage();
25 | localStorage.setItem(key, value);
26 | }
27 |
28 | public static void removeItem(String key) {
29 | LocalStorage localStorage = ((WebStorage) DriverManager.getDriver()).getLocalStorage();
30 | localStorage.removeItem(key);
31 | }
32 |
33 | public static void clear() {
34 | LocalStorage localStorage = ((WebStorage) DriverManager.getDriver()).getLocalStorage();
35 | localStorage.clear();
36 | }
37 |
38 | public static int size() {
39 | LocalStorage localStorage = ((WebStorage) DriverManager.getDriver()).getLocalStorage();
40 | return localStorage.size();
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/utils/LogUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.utils;
7 |
8 | import org.apache.logging.log4j.LogManager;
9 | import org.apache.logging.log4j.Logger;
10 |
11 | public class LogUtils {
12 | //Initialize Log4j2 instance
13 | private static final Logger LOGGER = LogManager.getLogger(LogUtils.class);
14 |
15 | //Info Level Logs
16 | public static void info(String message) {
17 | LOGGER.info(message);
18 | }
19 |
20 | public static void info(Object message) {
21 | LOGGER.info(message);
22 | }
23 |
24 | public static void info(String message, Throwable throwable) {
25 | LOGGER.info(message);
26 | }
27 |
28 | //Warn Level Logs
29 | public static void warn(String message) {
30 | LOGGER.warn(message);
31 | }
32 |
33 | public static void warn(Object message) {
34 | LOGGER.warn(message);
35 | }
36 |
37 | //Error Level Logs
38 | public static void error(String message) {
39 | LOGGER.error(message);
40 | }
41 |
42 | public static void error(String message, Throwable throwable) {
43 | LOGGER.error(message);
44 | }
45 |
46 | public static void error(Object message) {
47 | LOGGER.error(message);
48 | }
49 |
50 | public static void error(Object message, Throwable throwable) {
51 | LOGGER.error(message);
52 | }
53 |
54 | //Fatal Level Logs
55 | public static void fatal(String message) {
56 | LOGGER.fatal(message);
57 | }
58 |
59 | public static void fatal(Object message) {
60 | LOGGER.fatal(message);
61 | }
62 |
63 | //Debug Level Logs
64 | public static void debug(String message) {
65 | LOGGER.debug(message);
66 | }
67 |
68 | public static void debug(Object message) {
69 | LOGGER.debug(message);
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/src/main/java/com/anhtester/utils/ReportUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.utils;
7 |
8 | import com.anhtester.exceptions.FrameworkException;
9 | import com.anhtester.exceptions.InvalidPathForExtentReportFileException;
10 |
11 | import java.awt.*;
12 | import java.io.File;
13 | import java.io.FileNotFoundException;
14 | import java.io.IOException;
15 |
16 | import static com.anhtester.constants.FrameworkConstants.*;
17 |
18 | public class ReportUtils {
19 |
20 | private ReportUtils() {
21 |
22 | }
23 |
24 | public static String createExtentReportPath() {
25 | String link = "";
26 | if (OVERRIDE_REPORTS.trim().equals(NO)) {
27 | System.out.println("OVERRIDE_REPORTS = " + OVERRIDE_REPORTS);
28 | link = EXTENT_REPORT_FOLDER_PATH + File.separator + DateUtils.getCurrentDate() + "_"
29 | + EXTENT_REPORT_FILE_NAME;
30 | System.out.println("Created link reports: " + link);
31 | return link;
32 | } else {
33 | System.out.println("OVERRIDE_REPORTS = " + OVERRIDE_REPORTS);
34 | link = EXTENT_REPORT_FOLDER_PATH + File.separator + EXTENT_REPORT_FILE_NAME;
35 | System.out.println("Created link reports: " + link);
36 | return link;
37 | }
38 | }
39 |
40 | public static void openReports(String linkReport) {
41 | if (OPEN_REPORTS_AFTER_EXECUTION.trim().equalsIgnoreCase(YES)) {
42 | try {
43 | Desktop.getDesktop().browse(new File(linkReport).toURI());
44 | } catch (FileNotFoundException fileNotFoundException) {
45 | throw new InvalidPathForExtentReportFileException("Extent Report file you are trying to reach is not found", fileNotFoundException.fillInStackTrace());
46 | } catch (IOException ioException) {
47 | throw new FrameworkException("Extent Report file you are trying to reach got IOException while reading the file", ioException.fillInStackTrace());
48 | }
49 | }
50 | }
51 | }
52 |
53 |
--------------------------------------------------------------------------------
/src/main/resources/META-INF/services/io.qameta.allure.listener.TestLifecycleListener:
--------------------------------------------------------------------------------
1 | com.anhtester.listeners.AllureListener
--------------------------------------------------------------------------------
/src/main/resources/log4j2.properties:
--------------------------------------------------------------------------------
1 | #Declare loggers
2 | status=info
3 | name=Log4j2PropertiesConfig
4 | appenders=a_console, a_rolling
5 | rootLogger.level=info
6 | rootLogger.appenderRefs=ar_console,ar_rolling
7 | rootLogger.appenderRef.ar_console.ref=StdoutAppender
8 | rootLogger.appenderRef.ar_rolling.ref=RollingAppender
9 | #Console Logger
10 | appender.a_console.type=Console
11 | appender.a_console.name=StdoutAppender
12 | appender.a_console.layout.type=PatternLayout
13 | appender.a_console.layout.pattern=[%level] %d{dd-MM-yyyy HH:mm:ss} [%c{1}] - %msg%n
14 | #Rolling Logger
15 | appender.a_rolling.type=RollingFile
16 | appender.a_rolling.name=RollingAppender
17 | appender.a_rolling.layout.pattern=[%level] %d{dd-MM-yyyy HH:mm:ss} [%t] [%c{1}] - %msg%n
18 | appender.a_rolling.fileName=exports/logs/applog.log
19 | appender.a_rolling.filePattern=exports/logs/applog-%d{dd-MM-yyyy}.log
20 | appender.a_rolling.layout.type=PatternLayout
21 | appender.a_rolling.policies.type=Policies
22 | appender.a_rolling.policies.time.type=TimeBasedTriggeringPolicy
23 | appender.a_rolling.policies.time.interval=1
24 | # To change log file every day
25 | appender.a_rolling.policies.time.modulate=true
26 | # To change log file after 10MB size
27 | appender.a_rolling.policies.size.type=SizeBasedTriggeringPolicy
28 | appender.a_rolling.policies.size.size=10MB
29 | appender.a_rolling.strategy.type=DefaultRolloverStrategy
30 | appender.a_rolling.strategy.max=20
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/common/BaseTest.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.common;
2 |
3 | import com.anhtester.driver.DriverManager;
4 | import com.anhtester.driver.TargetFactory;
5 | import com.anhtester.helpers.PropertiesHelpers;
6 | import com.anhtester.keywords.WebUI;
7 | import com.anhtester.listeners.AllureListener;
8 | import com.anhtester.listeners.TestListener;
9 | import com.anhtester.projects.cms.CommonPageCMS;
10 | import org.openqa.selenium.WebDriver;
11 | import org.openqa.selenium.support.ThreadGuard;
12 | import org.testng.annotations.*;
13 |
14 | @Listeners({TestListener.class})
15 | public class BaseTest extends CommonPageCMS {
16 |
17 | @Parameters("BROWSER")
18 | @BeforeMethod
19 | public void createDriver(@Optional("chrome") String browser) {
20 | WebDriver driver = ThreadGuard.protect(new TargetFactory().createInstance(browser));
21 | DriverManager.setDriver(driver);
22 | driver.manage().window().maximize();
23 | }
24 |
25 | @AfterMethod(alwaysRun = true)
26 | public void closeDriver() {
27 | WebUI.stopSoftAssertAll();
28 | DriverManager.quit();
29 | }
30 |
31 | public WebDriver createBrowser(@Optional("chrome") String browser) {
32 | PropertiesHelpers.loadAllFiles();
33 | WebDriver driver = ThreadGuard.protect(new TargetFactory().createInstance(browser));
34 | driver.manage().window().maximize();
35 | DriverManager.setDriver(driver);
36 | return DriverManager.getDriver();
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/dataprovider/DataProviderAddProduct.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.dataprovider;
2 |
3 | import com.anhtester.constants.FrameworkConstants;
4 | import com.anhtester.helpers.ExcelHelpers;
5 | import com.anhtester.helpers.SystemHelpers;
6 | import org.testng.annotations.DataProvider;
7 |
8 | public class DataProviderAddProduct {
9 | @DataProvider(name = "data_provider_add_product")
10 | public Object[][] dataAddProduct() {
11 | ExcelHelpers excelHelpers = new ExcelHelpers();
12 | Object[][] data = excelHelpers.getDataHashTable(SystemHelpers.getCurrentDir() + FrameworkConstants.EXCEL_CMS_DATA, "AddProduct", 2, 2);
13 | return data;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/listeners/AllureListener.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.listeners;
2 |
3 | import com.anhtester.driver.DriverManager;
4 | import io.qameta.allure.Allure;
5 | import io.qameta.allure.listener.TestLifecycleListener;
6 | import io.qameta.allure.model.Status;
7 | import io.qameta.allure.model.TestResult;
8 | import org.openqa.selenium.OutputType;
9 | import org.openqa.selenium.TakesScreenshot;
10 |
11 | import java.io.ByteArrayInputStream;
12 |
13 | import static com.anhtester.constants.FrameworkConstants.*;
14 |
15 | public class AllureListener implements TestLifecycleListener {
16 |
17 | @Override
18 | public void beforeTestSchedule(TestResult result) {
19 | }
20 |
21 | @Override
22 | public void afterTestSchedule(TestResult result) {
23 | }
24 |
25 | @Override
26 | public void beforeTestUpdate(TestResult result) {
27 | }
28 |
29 | @Override
30 | public void afterTestUpdate(TestResult result) {
31 | }
32 |
33 | @Override
34 | public void beforeTestStart(TestResult result) {
35 | }
36 |
37 | @Override
38 | public void afterTestStart(TestResult result) {
39 | }
40 |
41 | @Override
42 | public void beforeTestStop(TestResult result) {
43 | if (SCREENSHOT_PASSED_TCS.equals(YES) && result.getStatus().equals(Status.PASSED)) {
44 | if (DriverManager.getDriver() != null) {
45 | Allure.addAttachment(result.getName() + "_Passed_Screenshot", new ByteArrayInputStream(((TakesScreenshot) DriverManager.getDriver()).getScreenshotAs(OutputType.BYTES)));
46 | }
47 | }
48 | if (SCREENSHOT_FAILED_TCS.equals(YES) && result.getStatus().equals(Status.FAILED)) {
49 | if (DriverManager.getDriver() != null) {
50 | Allure.addAttachment(result.getName() + "_Failed_Screenshot", new ByteArrayInputStream(((TakesScreenshot) DriverManager.getDriver()).getScreenshotAs(OutputType.BYTES)));
51 | }
52 | }
53 |
54 | //AllureManager.addAttachmentVideoMP4();
55 | }
56 |
57 | @Override
58 | public void afterTestStop(TestResult result) {
59 | }
60 |
61 | @Override
62 | public void beforeTestWrite(TestResult result) {
63 | }
64 |
65 | @Override
66 | public void afterTestWrite(TestResult result) {
67 | }
68 |
69 | }
70 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/listeners/AnnotationTransformer.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.listeners;
2 |
3 | import org.testng.IAnnotationTransformer;
4 | import org.testng.annotations.ITestAnnotation;
5 |
6 | import java.lang.reflect.Constructor;
7 | import java.lang.reflect.Method;
8 |
9 | public class AnnotationTransformer implements IAnnotationTransformer {
10 | @Override
11 | public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
12 | annotation.setRetryAnalyzer(Retry.class);
13 | }
14 | }
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/listeners/Retry.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.listeners;
2 |
3 | import com.anhtester.constants.FrameworkConstants;
4 | import org.testng.IRetryAnalyzer;
5 | import org.testng.ITestResult;
6 |
7 | public class Retry implements IRetryAnalyzer {
8 | private int count = 0;
9 | private static int maxTry = Integer.parseInt(FrameworkConstants.RETRY_TEST_FAIL);
10 |
11 | @Override
12 | public boolean retry(ITestResult iTestResult) {
13 | if (!iTestResult.isSuccess()) { //Check if test not succeed
14 | if (count < maxTry) { //Check if maxTry count is reached
15 | count++; //Increase the maxTry count by 1
16 | iTestResult.setStatus(ITestResult.FAILURE); //Mark test as failed
17 | return true; //Tells TestNG to re-run the test
18 | } else {
19 | iTestResult.setStatus(ITestResult.FAILURE); //If maxCount reached,test marked as failed
20 | }
21 | } else {
22 | iTestResult.setStatus(ITestResult.SUCCESS); //If test passes, TestNG marks it as passed
23 | }
24 | return false;
25 | }
26 | }
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/App.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects;
2 |
3 | import com.anhtester.helpers.SystemHelpers;
4 | import com.anhtester.utils.LogUtils;
5 | import org.testng.annotations.Test;
6 |
7 | import java.io.BufferedReader;
8 | import java.io.IOException;
9 | import java.io.InputStreamReader;
10 |
11 | public class App {
12 | public static void main(String[] args) throws IOException, InterruptedException {
13 | LogUtils.info("Build success !!");
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/admin/pages/brands/BrandPage.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.admin.pages.brands;
2 |
3 | public class BrandPage {
4 | }
5 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/admin/pages/category/CategoryPage.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.admin.pages.category;
2 |
3 | import org.openqa.selenium.By;
4 | import org.openqa.selenium.Keys;
5 |
6 | import static com.anhtester.keywords.WebUI.*;
7 |
8 | public class CategoryPage {
9 |
10 | private By buttonAddNewCategory = By.xpath("//span[normalize-space()='Add New category']");
11 | private By inputCategoryName = By.xpath("//input[@id='name']");
12 | private By inputOrderingNumber = By.xpath("//input[@id='order_level']");
13 | private By inputMetaTitle = By.xpath("//input[@placeholder='Meta Title']");
14 | private By inputMetaDescription = By.xpath("//textarea[@name='meta_description']");
15 | private By buttonSave = By.xpath("//button[normalize-space()='Save']");
16 | private By messageAlert = By.xpath("//span[@data-notify='message']");
17 | private By inputSearch = By.xpath("//input[@id='search']");
18 | private By categoryNameFirstRow = By.xpath("//tbody/tr[1]/td[2]");
19 |
20 | public CategoryPage clickAddNewButton() {
21 | clickElement(buttonAddNewCategory);
22 | return this;
23 | }
24 |
25 | public CategoryPage searchCategory(String categoryName) {
26 | waitForPageLoaded();
27 | setText(inputSearch, categoryName, Keys.ENTER);
28 | return this;
29 | }
30 |
31 | public CategoryPage checkCategoryDisplayed(String categoryName) {
32 | searchCategory(categoryName);
33 | verifyElementVisible(categoryNameFirstRow, "The new category not found.");
34 | verifyEquals(getTextElement(categoryNameFirstRow), categoryName, "The new category name not match.");
35 | return this;
36 | }
37 |
38 | public CategoryPage inputDataCategory(String categoryName, String orderNumber, String metaTitle, String description) {
39 | waitForPageLoaded();
40 | setText(inputCategoryName, categoryName);
41 | setText(inputOrderingNumber, orderNumber);
42 | setText(inputMetaTitle, metaTitle);
43 | setText(inputMetaDescription, description);
44 | return this;
45 | }
46 |
47 | public CategoryPage clickSaveButton() {
48 | clickElement(buttonSave);
49 | return this;
50 | }
51 |
52 | public void verifyAlertSuccessDisplayed() {
53 | verifyElementVisible(messageAlert, "The alert message success not visible.");
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/testcases/AddProductTest.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.testcases;
2 |
3 | import com.anhtester.common.BaseTest;
4 | import com.anhtester.constants.FrameworkConstants;
5 | import com.anhtester.dataprovider.DataProviderAddProduct;
6 | import com.anhtester.helpers.ExcelHelpers;
7 | import io.qameta.allure.Epic;
8 | import io.qameta.allure.Feature;
9 | import org.testng.annotations.Test;
10 |
11 | import java.util.Hashtable;
12 |
13 | @Epic("Regression Test CMS")
14 | @Feature("Add Product Test")
15 | public class AddProductTest extends BaseTest {
16 |
17 | @Test(dataProvider = "data_provider_add_product", dataProviderClass = DataProviderAddProduct.class)
18 | public void TC_AddNewProductAdmin(Hashtable data) {
19 | ExcelHelpers excelLogin = new ExcelHelpers();
20 | ExcelHelpers excelAddProduct = new ExcelHelpers();
21 | excelLogin.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
22 | excelAddProduct.setExcelFile(FrameworkConstants.EXCEL_CMS_DATA, "AddProduct");
23 | getLoginPageCMS().loginSuccessAdminPage(excelLogin.getCellData(5, "email"), excelLogin.getCellData(5, "password"));
24 | getAddProductPage().addProduct(data.get("productName"), data.get("category"), data.get("unit"), data.get("weight"), data.get("tags"), data.get("unitPrice"), data.get("discountDate"), data.get("quantity"), data.get("description"), data.get("discount"), data.get("image"));
25 | getAddProductPage().verifyNewProduct(data.get("category"), data.get("unit"), Double.valueOf(data.get("unitPrice")), data.get("description"));
26 |
27 | }
28 | }
29 |
30 |
31 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/testcases/CategoryTest.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.testcases;
2 |
3 | import com.anhtester.common.BaseTest;
4 | import com.anhtester.constants.FrameworkConstants;
5 | import com.anhtester.helpers.ExcelHelpers;
6 | import com.anhtester.projects.cms.CommonPageCMS;
7 | import com.anhtester.projects.cms.admin.pages.category.CategoryPage;
8 | import com.anhtester.projects.cms.admin.pages.logins.LoginPageCMS;
9 | import org.testng.annotations.Test;
10 |
11 | public class CategoryTest extends BaseTest {
12 |
13 | LoginPageCMS loginPageCMS;
14 | CategoryPage categoryPage;
15 | CommonPageCMS commonPageCMS;
16 | ExcelHelpers excelHelpers;
17 |
18 | public CategoryTest() {
19 | commonPageCMS = new CommonPageCMS();
20 | loginPageCMS = new LoginPageCMS();
21 | excelHelpers = new ExcelHelpers();
22 | }
23 |
24 | @Test
25 | public void TC_AddCategory() {
26 | loginPageCMS.loginSuccessAdminPage();
27 | categoryPage = commonPageCMS.clickMenuProducts().clickMenuCategory();
28 | excelHelpers.setExcelFile(FrameworkConstants.EXCEL_CMS_DATA, "Category");
29 | //category_name order_number meta_title description
30 | categoryPage.clickAddNewButton()
31 | .inputDataCategory(
32 | excelHelpers.getCellData("category_name", 1),
33 | excelHelpers.getCellData("order_number", 1),
34 | excelHelpers.getCellData("meta_title", 1),
35 | excelHelpers.getCellData("description", 1)
36 | )
37 | .clickSaveButton()
38 | .checkCategoryDisplayed(excelHelpers.getCellData("category_name", 1));
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/testcases/LoginTest.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.testcases;
2 |
3 | import com.anhtester.common.BaseTest;
4 | import com.anhtester.constants.FrameworkConstants;
5 | import com.anhtester.helpers.ExcelHelpers;
6 | import io.qameta.allure.Epic;
7 | import io.qameta.allure.Feature;
8 | import org.testng.annotations.Test;
9 |
10 | @Epic("Regression Test CMS")
11 | @Feature("Login Test")
12 | public class LoginTest extends BaseTest {
13 |
14 | @Test(priority = 1)
15 | public void TC_LoginFailWithEmailNull() {
16 | getLoginPageCMS().loginFailWithEmailNull();
17 | }
18 |
19 | @Test(priority = 2)
20 | public void TC_LoginFailWithEmailDoesNotExist() {
21 | ExcelHelpers excel = new ExcelHelpers();
22 | excel.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
23 | getLoginPageCMS().loginFailWithEmailDoesNotExist(excel.getCellData(1, "email"), excel.getCellData(1, "password"));
24 | }
25 |
26 | @Test(priority = 3)
27 | public void TC_LoginFailWithNullPassword() {
28 | ExcelHelpers excel = new ExcelHelpers();
29 | excel.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
30 | getLoginPageCMS().loginFailWithNullPassword(excel.getCellData(2, "email"));
31 | }
32 |
33 | @Test(priority = 4)
34 | public void TC_LoginFailWithIncorrectPassword() {
35 | ExcelHelpers excel = new ExcelHelpers();
36 | excel.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
37 | getLoginPageCMS().loginFailWithIncorrectPassword(excel.getCellData(3, "email"), excel.getCellData(3, "password"));
38 | }
39 |
40 | @Test(priority = 5)
41 | public void TC_LoginSuccessWithCustomerAccount() {
42 | ExcelHelpers excel = new ExcelHelpers();
43 | excel.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
44 | getLoginPageCMS().loginSuccessWithCustomerAccount(excel.getCellData(4, "email"), excel.getCellData(4, "password"));
45 | }
46 |
47 | // @Test(priority = 6)
48 | // public void TC_LoginSuccessAdminPage() {
49 | // excel = new ExcelHelpers();
50 | // excel.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
51 | // getLoginPageCMS().loginSuccessAdminPage(excel.getCellData(5, "email"), excel.getCellData(5, "password"));
52 | // }
53 | }
54 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/testcases/OrderTest.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.testcases;
2 |
3 | import com.anhtester.common.BaseTest;
4 | import com.anhtester.constants.FrameworkConstants;
5 | import com.anhtester.helpers.ExcelHelpers;
6 | import io.qameta.allure.Epic;
7 | import io.qameta.allure.Feature;
8 | import org.testng.annotations.Test;
9 |
10 | @Epic("Regression Test CMS")
11 | @Feature("Order Product Test")
12 | public class OrderTest extends BaseTest {
13 |
14 | @Test
15 | public void TC_OrderProduct() {
16 | ExcelHelpers excel = new ExcelHelpers();
17 | excel.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
18 | getLoginPageCMS().loginSuccessWithCustomerAccount(excel.getCellData(4, "email"), excel.getCellData(4, "password"));
19 | getOrderPage().order("Delivery as soon as possible");
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/testcases/ProductInfoTest.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.testcases;
2 |
3 | import com.anhtester.common.BaseTest;
4 | import com.anhtester.constants.FrameworkConstants;
5 | import com.anhtester.helpers.ExcelHelpers;
6 | import com.anhtester.helpers.PropertiesHelpers;
7 | import org.testng.annotations.Test;
8 |
9 | import java.util.ArrayList;
10 |
11 | public class ProductInfoTest extends BaseTest {
12 |
13 | @Test
14 | public void TC_GetProductInfo() {
15 | ExcelHelpers excel = new ExcelHelpers();
16 | excel.setExcelFile(FrameworkConstants.EXCEL_CMS_PRODUCTS_USER, "ProductInfo");
17 | ExcelHelpers excel2 = new ExcelHelpers();
18 | excel2.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
19 | getLoginPageCMS().loginSuccessWithCustomerAccount(excel2.getCellData(4, "email"), excel2.getCellData(4, "password"));
20 | ArrayList productInfo = getProductInfoPage().productInfo(PropertiesHelpers.getValue("product_P01"));
21 | int lastRow = excel.getRows();
22 | int newRow = lastRow + 1;
23 | excel.setCellData(String.valueOf(newRow), newRow, 0);
24 | for (int i = 0; i < productInfo.size(); i++) {
25 | if (String.valueOf(newRow) != null) {
26 | excel.setCellData((String) productInfo.get(i), newRow, i + 1);
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/testcases/ProfileTest.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.testcases;
2 |
3 | import com.anhtester.common.BaseTest;
4 | import com.anhtester.constants.FrameworkConstants;
5 | import com.anhtester.helpers.ExcelHelpers;
6 | import org.testng.annotations.Test;
7 |
8 | public class ProfileTest extends BaseTest {
9 |
10 | @Test(priority = 1)
11 | public void TC_UpdateProfile() {
12 | ExcelHelpers excel = new ExcelHelpers();
13 | excel.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
14 | getLoginPageCMS().loginSuccessWithCustomerAccount(excel.getCellData(4, "email"), excel.getCellData(4, "password"));
15 | getProfilePage().updateProfile();
16 | }
17 |
18 | // @Test(priority = 2)
19 | // public void updateEmail() {
20 | // excel = new ExcelHelpers();
21 | // excel.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
22 | // getLoginPageCMS().loginSuccessWithCustomerAccount(excel.getCellData(4, "email"), excel.getCellData(4, "password"));
23 | // getProfilePage().updateEmail();
24 | // }
25 |
26 | @Test(priority = 3)
27 | public void TC_AddNewAddress() {
28 | ExcelHelpers excel = new ExcelHelpers();
29 | excel.setExcelFile(FrameworkConstants.EXCEL_CMS_LOGIN, "Login");
30 | getLoginPageCMS().loginSuccessWithCustomerAccount(excel.getCellData(4, "email"), excel.getCellData(4, "password"));
31 | getProfilePage().addNewAddress();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/users/pages/dashboard/DashboardPage.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.users.pages.dashboard;
2 |
3 | import org.openqa.selenium.By;
4 |
5 | public class DashboardPage {
6 | public static By titleDashboard = By.xpath("//h1[normalize-space()='Dashboard']");
7 | public static By menuHome = By.xpath("//a[contains(text(),'Home')]");
8 | public static By inputSearchProduct = By.xpath("//input[@id='search']");
9 | public static By buttonSubmitSearch = By.xpath("//div[@class='input-group-append d-none d-lg-block']//button[@type='submit']");
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/cms/users/pages/products/ProductInfoPageCMS.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.cms.users.pages.products;
2 |
3 | import com.anhtester.projects.cms.CommonPageCMS;
4 | import com.anhtester.keywords.WebUI;
5 | import com.anhtester.projects.cms.users.pages.dashboard.DashboardPage;
6 | import org.openqa.selenium.By;
7 |
8 | import java.util.ArrayList;
9 | import java.util.List;
10 |
11 | public class ProductInfoPageCMS extends CommonPageCMS {
12 | private By productName = By.xpath("//h1");
13 | public static By productPrice = By.xpath("(//div[text()='Discount Price:']/parent::div)/following-sibling::div//strong");
14 | private By productUnit = By.xpath("//span[@class='opacity-70']");
15 | private By productDescription = By.xpath("//div[@class = 'mw-100 overflow-auto text-left aiz-editor-data']/p");
16 | private By selectProductName = By.xpath("(//div[contains(@class,'product-name')])[1]");
17 |
18 | public ArrayList productInfo(String product) {
19 | WebUI.waitForPageLoaded();
20 | WebUI.setText(DashboardPage.inputSearchProduct, product);
21 | WebUI.waitForJQueryLoad();
22 | WebUI.clickElement(selectProductName);
23 | WebUI.waitForPageLoaded();
24 | WebUI.sleep(2);
25 | String name = WebUI.getTextElement(By.xpath("//h1[contains(.,'" + product + "')]"));
26 | String price = WebUI.getTextElement(productPrice);
27 | String unit = WebUI.getTextElement(productUnit);
28 | String unitProduct = unit.substring(1);
29 | String description = WebUI.getTextElement(productDescription);
30 | List arrayList = new ArrayList();
31 | arrayList.add(name);
32 | arrayList.add(price);
33 | arrayList.add(unitProduct);
34 | arrayList.add(description);
35 | System.out.println("Array" + arrayList);
36 | System.out.println("Array" + arrayList.get(0));
37 | return (ArrayList) arrayList;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/crm/models/ClientModel.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.crm.models;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class ClientModel {
7 |
8 | public static int row;
9 |
10 | public static String testCaseName = "TESTCASENAME";
11 |
12 | public static String companyName = "COMPANY_NAME";
13 |
14 | public static String owner = "OWNER";
15 |
16 | public static String address = "ADDRESS";
17 |
18 | public static String city = "CITY";
19 |
20 | public static String state = "STATE";
21 |
22 | public static String zip = "ZIP";
23 |
24 | public static String country = "COUNTRY";
25 |
26 | public static String phone = "PHONE";
27 |
28 | public static String website = "WEBSITE";
29 |
30 | public static String vat = "VAT";
31 |
32 | public static String clientGroup = "CLIENT_GROUP";
33 |
34 | public static String status = "STATUS";
35 |
36 | public static String application = "APPLICATION";
37 |
38 | public static String getApplication() {
39 | return application;
40 | }
41 |
42 | public static int getRow() {
43 | return row;
44 | }
45 |
46 | public static String getTestCaseName() {
47 | return testCaseName;
48 | }
49 |
50 | public static String getCompanyName() {
51 | return companyName;
52 | }
53 |
54 | public static String getOwner() {
55 | return owner;
56 | }
57 |
58 | public static String getAddress() {
59 | return address;
60 | }
61 |
62 | public static String getCity() {
63 | return city;
64 | }
65 |
66 | public static String getState() {
67 | return state;
68 | }
69 |
70 | public static String getZip() {
71 | return zip;
72 | }
73 |
74 | public static String getCountry() {
75 | return country;
76 | }
77 |
78 | public static String getPhone() {
79 | return phone;
80 | }
81 |
82 | public static String getWebsite() {
83 | return website;
84 | }
85 |
86 | public static String getVat() {
87 | return vat;
88 | }
89 |
90 | public static String getClientGroup() {
91 | return clientGroup;
92 | }
93 |
94 | public static String getStatus() {
95 | return status;
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/crm/models/SignInModel.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.crm.models;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class SignInModel {
7 |
8 | public static int row;
9 |
10 | public static String testCaseName = "TESTCASENAME";
11 |
12 | public static String email = "EMAIL";
13 |
14 | public static String password = "PASSWORD";
15 |
16 | public static String expectedTitle = "EXPECTED_TITLE";
17 |
18 | public static String expectedError = "EXPECTED_ERROR";
19 |
20 | public static String expectedUrl = "EXPECTED_URL";
21 |
22 | public static int getRow() {
23 | return row;
24 | }
25 |
26 | public static String getTestCaseName() {
27 | return testCaseName;
28 | }
29 |
30 | public static String getEmail() {
31 | return email;
32 | }
33 |
34 | public static String getPassword() {
35 | return password;
36 | }
37 |
38 | public static String getExpectedTitle() {
39 | return expectedTitle;
40 | }
41 |
42 | public static String getExpectedError() {
43 | return expectedError;
44 | }
45 |
46 | public static String getExpectedUrl() {
47 | return expectedUrl;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/crm/pages/CommonPageCRM.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.crm.pages;
2 |
3 | import com.anhtester.keywords.WebUI;
4 | import com.anhtester.projects.crm.pages.Clients.ClientPageCRM;
5 | import com.anhtester.projects.crm.pages.Dashboard.DashboardPageCRM;
6 | import com.anhtester.projects.crm.pages.Projects.ProjectPageCRM;
7 | import com.anhtester.projects.crm.pages.SignIn.SignInPageCRM;
8 | import org.openqa.selenium.By;
9 |
10 | public class CommonPageCRM {
11 |
12 | public SignInPageCRM signInPage;
13 | public DashboardPageCRM dashboardPage;
14 | public ClientPageCRM clientPage;
15 | public ProjectPageCRM projectPage;
16 |
17 | public By dropdownAccount = By.xpath("//a[@id='user-dropdown']//span[2]");
18 | public By buttonSignOut = By.xpath("//a[normalize-space()='Sign Out']");
19 |
20 |
21 | public SignInPageCRM signOut() {
22 | WebUI.clickElement(dropdownAccount);
23 | WebUI.clickElement(buttonSignOut);
24 | return new SignInPageCRM();
25 | }
26 |
27 | public SignInPageCRM getSignInPage() {
28 | if (signInPage == null) {
29 | signInPage = new SignInPageCRM();
30 | }
31 | return signInPage;
32 | }
33 |
34 | public DashboardPageCRM getDashboardPage() {
35 | if (dashboardPage == null) {
36 | dashboardPage = new DashboardPageCRM();
37 | }
38 | return dashboardPage;
39 | }
40 |
41 | public ClientPageCRM getClientPage() {
42 | if (clientPage == null) {
43 | clientPage = new ClientPageCRM();
44 | }
45 | return clientPage;
46 | }
47 |
48 | public ProjectPageCRM getProjectPage() {
49 | if (projectPage == null) {
50 | projectPage = new ProjectPageCRM();
51 | }
52 | return projectPage;
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/crm/pages/Dashboard/DashboardPageCRM.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.crm.pages.Dashboard;
2 |
3 | import static com.anhtester.keywords.WebUI.*;
4 |
5 | import com.anhtester.projects.crm.pages.Clients.ClientPageCRM;
6 | import com.anhtester.projects.crm.pages.CommonPageCRM;
7 | import com.anhtester.projects.crm.pages.Projects.ProjectPageCRM;
8 | import com.anhtester.projects.crm.pages.Tasks.TaskPage;
9 | import org.openqa.selenium.By;
10 |
11 | public class DashboardPageCRM extends CommonPageCRM {
12 |
13 | public DashboardPageCRM() {
14 | super();
15 | }
16 |
17 | public String pageText = "Dashboard";
18 | public String pageUrl = "/dashboard";
19 |
20 | public By menuDashboard = By.xpath("//span[normalize-space()='Dashboard']");
21 | public By menuClients = By.xpath("//span[normalize-space()='Clients']");
22 | public By menuProjects = By.xpath("//span[normalize-space()='Projects']");
23 | public By menuTasks = By.xpath("//span[normalize-space()='Tasks']");
24 |
25 | public DashboardPageCRM openDashboardPage() {
26 | clickElement(menuDashboard);
27 | return this;
28 | }
29 |
30 | public ClientPageCRM openClientPage() {
31 | clickElement(menuClients);
32 | return new ClientPageCRM();
33 | }
34 |
35 | public ProjectPageCRM openProjectPage() {
36 | clickElement(menuProjects);
37 | return new ProjectPageCRM();
38 | }
39 |
40 | public TaskPage openTaskPage() {
41 | clickElement(menuTasks);
42 | return new TaskPage();
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/crm/pages/Projects/ProjectPageCRM.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.crm.pages.Projects;
2 |
3 | import com.anhtester.keywords.WebUI;
4 | import com.anhtester.projects.crm.pages.CommonPageCRM;
5 | import org.openqa.selenium.By;
6 |
7 | public class ProjectPageCRM extends CommonPageCRM {
8 |
9 | public ProjectPageCRM() {
10 | }
11 |
12 | private String pageText = "Projects";
13 |
14 | //Project Page Element
15 | private By projectMenu = By.xpath("//span[normalize-space()='Projects']");
16 | private By searchInput = By.xpath("//input[@type='search']");
17 |
18 | public void searchByValue(String value) {
19 | WebUI.clearText(searchInput);
20 | WebUI.setText(searchInput, value);
21 | WebUI.sleep(1);
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/crm/pages/Tasks/TaskPage.java:
--------------------------------------------------------------------------------
1 | package com.anhtester.projects.crm.pages.Tasks;
2 |
3 | public class TaskPage {
4 |
5 | public TaskPage() {
6 |
7 | }
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/crm/testcases/ClientTest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.projects.crm.testcases;
7 |
8 | import com.anhtester.annotations.FrameworkAnnotation;
9 | import com.anhtester.common.BaseTest;
10 | import com.anhtester.dataprovider.DataProviderManager;
11 | import com.anhtester.enums.AuthorType;
12 | import com.anhtester.enums.CategoryType;
13 |
14 | import static com.anhtester.keywords.WebUI.*;
15 |
16 | import com.anhtester.projects.crm.pages.Clients.ClientPageCRM;
17 | import com.anhtester.projects.crm.pages.Dashboard.DashboardPageCRM;
18 | import com.anhtester.projects.crm.pages.SignIn.SignInPageCRM;
19 | import io.qameta.allure.Epic;
20 | import io.qameta.allure.Feature;
21 | import org.testng.annotations.Test;
22 |
23 | import java.util.Hashtable;
24 |
25 | @Epic("Regression Test CRM")
26 | @Feature("Client Test")
27 | public class ClientTest extends BaseTest {
28 |
29 | private SignInPageCRM signInPageCRM;
30 | private DashboardPageCRM dashboardPageCRM;
31 | private ClientPageCRM clientPageCRM;
32 |
33 | public ClientTest() {
34 | signInPageCRM = new SignInPageCRM();
35 | }
36 |
37 | @FrameworkAnnotation(author = {AuthorType.AnhTester, AuthorType.AnVo}, category = {CategoryType.REGRESSION})
38 | @Test(priority = 1, description = "Test Add New Client", dataProvider = "getClientDataHashTable", dataProviderClass = DataProviderManager.class)
39 | public void testAddClient(Hashtable data) {
40 | dashboardPageCRM = signInPageCRM.signInWithAdminRole();
41 | clientPageCRM = dashboardPageCRM.openClientPage();
42 | clientPageCRM.openClientTabPage();
43 | clientPageCRM.addClient(data);
44 | clientPageCRM.verifyClientDetail(data);
45 | }
46 |
47 | @FrameworkAnnotation(author = {AuthorType.James}, category = {CategoryType.SANITY, CategoryType.REGRESSION})
48 | @Test(priority = 2, description = "TC06_testSearchClient")
49 | public void testSearchClient() {
50 | dashboardPageCRM = signInPageCRM.signInWithAdminRole();
51 | clientPageCRM = dashboardPageCRM.openClientPage();
52 | clientPageCRM.openClientTabPage();
53 | // Search the first
54 | clientPageCRM.enterDataSearchClient("Adrain Ondricka");
55 | checkContainsValueOnTableByColumn(2, "Adrain Ondricka");
56 | // Search the second
57 | clientPageCRM.enterDataSearchClient("Birdie Erdman");
58 | checkContainsValueOnTableByColumn(2, "Birdie Erdman");
59 |
60 | }
61 |
62 | }
--------------------------------------------------------------------------------
/src/test/java/com/anhtester/projects/crm/testcases/SignInTest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Anh Tester
3 | * Automation Framework Selenium
4 | */
5 |
6 | package com.anhtester.projects.crm.testcases;
7 |
8 | import com.anhtester.common.BaseTest;
9 | import com.anhtester.dataprovider.DataProviderManager;
10 | import com.anhtester.projects.crm.pages.Dashboard.DashboardPageCRM;
11 | import com.anhtester.projects.crm.pages.SignIn.SignInPageCRM;
12 | import io.qameta.allure.Epic;
13 | import io.qameta.allure.Feature;
14 | import org.openqa.selenium.By;
15 | import org.testng.annotations.Test;
16 |
17 | import java.util.Hashtable;
18 |
19 | import static com.anhtester.keywords.WebUI.*;
20 |
21 | @Epic("Regression Test CRM")
22 | @Feature("Sign In Test")
23 | public class SignInTest extends BaseTest {
24 |
25 | SignInPageCRM signInPageCRM;
26 | DashboardPageCRM dashboardPageCRM;
27 |
28 | public SignInTest() {
29 | signInPageCRM = new SignInPageCRM();
30 | }
31 |
32 | //Using library DataProvider with read Hashtable
33 | @Test(priority = 1, description = "TC01_signInWithDataProvider", dataProvider = "getSignInDataHashTable", dataProviderClass = DataProviderManager.class)
34 | public void signInWithDataProvider(Hashtable data) {
35 | signInPageCRM.signIn(data);
36 |
37 | }
38 |
39 | @Test(priority = 2, description = "TC02_signInWithAdminRole")
40 | public void signInWithAdminRole() {
41 | dashboardPageCRM = signInPageCRM.signInWithAdminRole();
42 | verifyElementPresent(dashboardPageCRM.menuDashboard, 5, "The menu Dashboard does not exist.");
43 |
44 | }
45 |
46 | @Test(priority = 3, description = "TC03_signInWithClientRole")
47 | public void signInWithClientRole() {
48 | signInPageCRM.signInWithClientRole();
49 | verifyContains(getPageTitle(), "Dashboard | RISE CRM");
50 |
51 | }
52 |
53 | @Test(priority = 4, description = "TC04_loginPerfexCRM")
54 | public void loginPerfexCRM() {
55 | openWebsite("https://crm.anhtester.com/admin/authentication");
56 | clearAndFillText(By.xpath("//input[@id='email']"), "admin@example.com");
57 | clearAndFillText(By.xpath("//input[@id='password']"), "123456");
58 | clickElement(By.xpath("//button[normalize-space()='Login']"));
59 | verifyEquals(getPageTitle(), "Dashboard");
60 |
61 | }
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/src/test/resources/config/allure.properties:
--------------------------------------------------------------------------------
1 | allure.results.directory=target/allure-results
--------------------------------------------------------------------------------
/src/test/resources/config/allure/categories.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "name": "Ignored tests",
4 | "matchedStatuses": [
5 | "skipped"
6 | ]
7 | },
8 | {
9 | "name": "Infrastructure problems",
10 | "matchedStatuses": [
11 | "broken",
12 | "failed"
13 | ],
14 | "messageRegex": ".*bye-bye.*"
15 | },
16 | {
17 | "name": "Outdated tests",
18 | "matchedStatuses": [
19 | "broken"
20 | ],
21 | "traceRegex": ".*FileNotFoundException.*"
22 | },
23 | {
24 | "name": "Product defects",
25 | "matchedStatuses": [
26 | "failed"
27 | ]
28 | },
29 | {
30 | "name": "Test defects",
31 | "matchedStatuses": [
32 | "broken"
33 | ]
34 | }
35 | ]
--------------------------------------------------------------------------------
/src/test/resources/config/allure/environment.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Browser
4 | Chrome
5 |
6 |
7 | Browser.Version
8 | 113.0
9 |
10 |
11 | Stand
12 | Production
13 |
14 |
--------------------------------------------------------------------------------
/src/test/resources/config/allure/executor.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Jenkins",
3 | "type": "jenkins",
4 | "url": "https://anhtester.com",
5 | "buildOrder": 1,
6 | "buildName": "Allure Report Customize | Anh Tester",
7 | "buildUrl": "https://anhtester.com",
8 | "reportUrl": "https://anhtester.com",
9 | "reportName": "Allure Report Customize | Anh Tester"
10 | }
--------------------------------------------------------------------------------
/src/test/resources/config/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "url": "https://crm.anhtester.com/signin",
3 | "browser": "chrome",
4 | "button": "//a[contains(text(),'Đăng Nhập')]"
5 | }
6 |
--------------------------------------------------------------------------------
/src/test/resources/config/config.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (c) 2022 Anh Tester
3 | # Automation Framework Selenium
4 | #
5 | # Config system
6 | AUTHOR = Anh Tester
7 | WAIT_DEFAULT = 5
8 | WAIT_IMPLICIT = 10
9 | WAIT_EXPLICIT = 10
10 | WAIT_PAGE_LOADED = 40
11 | # Smart Wait all steps
12 | # ACTIVE_PAGE_LOADED=true shall wait for the page to load for every step
13 | ACTIVE_PAGE_LOADED = true
14 | # WAIT_SLEEP_STEP is the delay time for every step - Second
15 | WAIT_SLEEP_STEP = 0
16 | # Browser default chrome, edge, firefox, safari
17 | BROWSER =
18 | # headless mode only for chrome or firefox and local execution
19 | HEADLESS = true
20 | # Website demo information
21 | URL_CRM = https://rise.anhtester.com/signin
22 | URL_CMS_ADMIN = https://cms.anhtester.com/login
23 | URL_CMS_USER = https://cms.anhtester.com
24 | # target execution: local or remote
25 | TARGET = local
26 | # grid url and port
27 | REMOTE_URL = localhost
28 | REMOTE_PORT = 4444
29 | # Report information
30 | PROJECT_NAME = Automation Framework Selenium | Anh Tester
31 | REPORT_TITLE = Report | Automation Framework Selenium | Anh Tester
32 | EXTENT_REPORT_NAME = ExtentReports
33 | EXTENT_REPORT_FOLDER = exports/ExtentReports
34 | EXPORT_VIDEO_PATH = exports/ExportData/Videos
35 | EXPORT_CAPTURE_PATH = exports/ExportData/Images
36 | # Send reports to Telegram Bot --> yes or no
37 | # If yes, please input TELEGRAM_TOKEN and TELEGRAM_CHATID
38 | SEND_REPORT_TO_TELEGRAM = no
39 | TELEGRAM_TOKEN =
40 | TELEGRAM_CHATID =
41 | # Zip folder reports after run test --> yes or no
42 | ZIP_FOLDER = no
43 | ZIP_FOLDER_PATH = exports/ExtentReports
44 | ZIP_FOLDER_NAME = ExtentReports.zip
45 | # Video Record
46 | VIDEO_RECORD = no
47 | # override_reports --> yes or no
48 | # If no -> Report name will be like
49 | # - Windows_10_Tue_Oct_05_02_30_46_IST_2022_ExtentReports.html
50 | # - Mac_OS_X_Tue_Feb_22_16_10_47_IST_2022_ExtentReports.html
51 | # If yes -> Report name will be ExtentReports.html
52 | OVERRIDE_REPORTS = yes
53 | # open_reports_after_execution--> yes or no
54 | OPEN_REPORTS_AFTER_EXECUTION = no
55 | # send_email_to_users --> yes or no
56 | # If yes -> then, provide your mail credentials -> src/main/java -> package mail.com.anhtester.EmailConfig;
57 | # This Email will be sent using Java mail API
58 | SEND_EMAIL_TO_USERS = no
59 | # Passed Steps Screenshot
60 | SCREENSHOT_PASSED_TCS = yes
61 | # Failed Steps Screenshot
62 | SCREENSHOT_FAILED_TCS = yes
63 | # Skipped Steps Screenshot
64 | SCREENSHOT_SKIPPED_TCS = no
65 | # All Steps Screenshot
66 | SCREENSHOT_ALL_STEPS = no
67 | # Locate in DataFaker/JavaFaker
68 | # Java Locale List: https://www.viralpatel.net/java-locale-list-tutorial/
69 | LOCATE = vi
70 | RETRY_TEST_FAIL = 1
--------------------------------------------------------------------------------
/src/test/resources/config/data.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (c) 2022 Anh Tester
3 | # Automation Framework Selenium
4 | #
5 | #DATA FILE
6 | TXT_FILE_PATH = src/test/resources/testdataCRM/TxtFileData.txt
7 | EXCEL_DATA_FILE_PATH = src/test/resources/testdataCRM/ClientsDataExcel.xlsx
8 | JSON_DATA_FILE_PATH = src/test/resources/config/config.json
9 | EXCEL_CMS_LOGIN = src/test/resources/testdataCMS/Login.xlsx
10 | EXCEL_CMS_DATA = src/test/resources/testdataCMS/CMS_DATA.xlsx
11 | EXCEL_CMS_PRODUCTS_USER = src/test/resources/testdataCMS/GetProductInfo.xlsx
12 | email=admin@example.com
13 | password=123456
14 | product_P01=Gio qua Tet hquHA
15 | product_P02=Adobe Premiere Elements 2022
--------------------------------------------------------------------------------
/src/test/resources/datajson/arraysample.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "title": "Casino Royale",
5 | "director": "Martin Campbell",
6 | "starring": [
7 | "Daniel Craig",
8 | "Eva Green"
9 | ],
10 | "desc": "Twenty-first James Bond movie",
11 | "release date": 1163466000000,
12 | "box office": 594275385
13 | },
14 | {
15 | "id": 2,
16 | "title": "Quantum of Solace",
17 | "director": "Marc Forster",
18 | "starring": [
19 | "Daniel Craig",
20 | "Olga Kurylenko"
21 | ],
22 | "desc": "Twenty-second James Bond movie",
23 | "release date": 1225242000000,
24 | "box office": 591692078
25 | },
26 | {
27 | "id": 3,
28 | "title": "Skyfall",
29 | "director": "Sam Mendes",
30 | "starring": [
31 | "Daniel Craig",
32 | "Naomie Harris"
33 | ],
34 | "desc": "Twenty-third James Bond movie",
35 | "release date": 1350954000000,
36 | "box office": 1110526981
37 | },
38 | {
39 | "id": 4,
40 | "title": "Spectre",
41 | "director": "Sam Mendes",
42 | "starring": [
43 | "Daniel Craig",
44 | "Lea Seydoux"
45 | ],
46 | "desc": "Twenty-fourth James Bond movie",
47 | "release date": 1445821200000,
48 | "box office": 879376275
49 | }
50 | ]
--------------------------------------------------------------------------------
/src/test/resources/datajson/book.json:
--------------------------------------------------------------------------------
1 | {
2 | "book": [
3 | {
4 | "title": "Beginning JSON",
5 | "author": "Ben Smith",
6 | "price": 49.99
7 | },
8 | {
9 | "title": "JSON at Work",
10 | "author": "Tom Marrs",
11 | "price": 29.99
12 | },
13 | {
14 | "title": "Learn JSON in a DAY",
15 | "author": "Acodemy",
16 | "price": 8.99
17 | },
18 | {
19 | "title": "JSON: Questions and Answers",
20 | "author": "George Duckett",
21 | "price": 6.00
22 | }
23 | ],
24 | "price range": {
25 | "cheap": 10.00,
26 | "medium": 20.00
27 | }
28 | }
--------------------------------------------------------------------------------
/src/test/resources/datajson/store.json:
--------------------------------------------------------------------------------
1 | {
2 | "store": {
3 | "book": [
4 | {
5 | "category": "reference",
6 | "author": "Nigel Rees",
7 | "title": "Sayings of the Century",
8 | "price": 8.95
9 | },
10 | {
11 | "category": "fiction",
12 | "author": "Evelyn Waugh",
13 | "title": "Sword of Honour",
14 | "price": 12.99
15 | },
16 | {
17 | "category": "fiction",
18 | "author": "Herman Melville",
19 | "title": "Moby Dick",
20 | "isbn": "0-553-21311-3",
21 | "price": 8.99
22 | },
23 | {
24 | "category": "fiction",
25 | "author": "J. R. R. Tolkien",
26 | "title": "The Lord of the Rings",
27 | "isbn": "0-395-19395-8",
28 | "price": 22.99
29 | }
30 | ],
31 | "bicycle": {
32 | "color": "red",
33 | "price": 19.95
34 | }
35 | },
36 | "expensive": 10
37 | }
--------------------------------------------------------------------------------
/src/test/resources/datajson/tools.json:
--------------------------------------------------------------------------------
1 | {
2 | "tool": {
3 | "jsonpath": {
4 | "creator": {
5 | "name": "Jayway Inc.",
6 | "location": [
7 | "Malmo",
8 | "San Francisco",
9 | "Helsingborg"
10 | ]
11 | }
12 | }
13 | },
14 | "book": [
15 | {
16 | "title": "Beginning JSON",
17 | "price": 49.99
18 | },
19 | {
20 | "title": "JSON at Work",
21 | "price": 29.99
22 | }
23 | ]
24 | }
--------------------------------------------------------------------------------
/src/test/resources/objects/crm_locators.properties:
--------------------------------------------------------------------------------
1 | #SignInPageCRM
2 | inputEmailID=id&&email
3 | inputEmail=xpath&&//input[@id='email']
4 | inputPassword=xpath&&//input[@id='password']
5 | buttonSignIn=xpath&&//button[normalize-space()='Sign in']
6 | #--------------------------------------------------
7 | #DashboardPageCRM
8 | menuProjects=xpath&&//span[normalize-space()='Projects']
9 | menuClients=xpath&&//span[normalize-space()='Clients']
10 | #--------------------------------------------------
11 | #ClientPageCRM
12 | labelOnClientPage=xpath&&//span[normalize-space()='Total clients']
13 | tabClient=xpath&&//ul[@id='client-tabs']//li[2]
14 | buttonAddClient=xpath&&//a[normalize-space()='Add client']
15 | inputCompanyName=xpath&&//input[@id='company_name']
16 | selectOwner=xpath&&//div[@id='s2id_created_by']
17 | inputSearchOwner=xpath&&//div[@id='select2-drop']//input
18 | selectFirstItemOwner=xpath&&(//div[contains(@id,'select2-result-label')])[1]
19 | inputAddress=xpath&&//textarea[@id='address']
20 | inputCity=xpath&&//input[@id='city']
21 | inputState=xpath&&//input[@id='state']
22 | inputZip=xpath&&//input[@id='zip']
23 | inputCountry=xpath&&//input[@id='country']
24 | inputPhone=xpath&&//input[@id='phone']
25 | inputWebsite=xpath&&//input[@id='website']
26 | inputVat=xpath&&//input[@id='vat_number']
27 | spanFirstItemClientGroups=xpath&&//span[@class='select2-match']
28 | labelClientGroups=xpath&&//li[@class='select2-search-choice']/div
29 | inputClientGroups=xpath&&(//label[normalize-space()='Client groups']/following-sibling::div//input)[1]
30 | buttonSaveOnDialog=xpath&&//div[@id='ajaxModalContent']//button[normalize-space()='Save']
31 | inputSearch=xpath&&//input[@placeholder='Search']
32 | itemClientFirstRow=xpath&&//table[@id='client-table']//tbody/tr[1]/td[2]/a
33 | tabClientInfo=xpath&&//a[normalize-space()='Client info']
34 | headerPageClientInfo=xpath&&//form[@id='company-form']//h4
35 | ownerDetail=xpath&&//div[@id='s2id_created_by']//a[@class='select2-choice']/span[1]
36 | radioOrganization=xpath&&//input[@id='type_organization']
37 | #--------------------------------------------------
38 | #--------------------------------------------------
39 | #TestObject
40 | buttonDynamicXpath=xpath&&//button[normalize-space()='%s']
--------------------------------------------------------------------------------
/src/test/resources/pdf-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "displayAttributeSummary": true,
3 | "displayAttributeDetails": true,
4 | "displayTestDetails": true,
5 | "displayExpandedMedia": false,
6 | "displayAttachedMedia": true,
7 | "title": "Extent Report PDF",
8 | "titleColor": "964B00",
9 | "startTimesColor": "33A532",
10 | "finishTimesColor": "FF69B4",
11 | "durationColor": "00FFFF",
12 | "passCountColor": "C0C0C0",
13 | "failCountColor": "A9A9A9",
14 | "passColor": "0b8c47",
15 | "failColor": "720000",
16 | "skipColor": "b17750",
17 | "warnColor": "ffc100",
18 | "infoColor": "114444",
19 | "categoryTitleColor": "990000",
20 | "categoryNameColor": "bd8275",
21 | "authorTitleColor": "002288",
22 | "authorNameColor": "3ac5b6",
23 | "deviceTitleColor": "228800",
24 | "deviceNameColor": "cd17bf",
25 | "systemTitleColor": "bb1144",
26 | "systemNameColor": "990000",
27 | "systemValueColor": "daa520",
28 | "exceptionTitleColor": "000000",
29 | "attributeTestStatusColor": "660066",
30 | "testNameColor": "d62d20",
31 | "testTimesColor": "ffa700",
32 | "testTimeStampColor": "08080",
33 | "testExceptionColor": "990000"
34 | }
--------------------------------------------------------------------------------
/src/test/resources/suites/BuildApp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CMS/AddProductCMS.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CMS/LoginTestCMS.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CMS/OrderProductCMS.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CMS/ProductInfoCMS.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CMS/ProfileCMS.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CRM/Clients-parallel.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CRM/Clients-simple.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CRM/Clients-testAddClient.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CRM/Clients-testSearch.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CRM/SignIn-parallel-methods.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CRM/SignIn-parallel-multi-browser.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/test/resources/suites/CRM/SignIn-simple.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/test/resources/suites/SuiteAll.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/test/resources/testdataCMS/Book1.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCMS/Book1.xlsx
--------------------------------------------------------------------------------
/src/test/resources/testdataCMS/CMS_DATA.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCMS/CMS_DATA.xlsx
--------------------------------------------------------------------------------
/src/test/resources/testdataCMS/Cosy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCMS/Cosy.png
--------------------------------------------------------------------------------
/src/test/resources/testdataCMS/GetProductInfo.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCMS/GetProductInfo.xlsx
--------------------------------------------------------------------------------
/src/test/resources/testdataCMS/Login.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCMS/Login.xlsx
--------------------------------------------------------------------------------
/src/test/resources/testdataCMS/gio-qua-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCMS/gio-qua-1.jpg
--------------------------------------------------------------------------------
/src/test/resources/testdataCMS/gio-qua-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCMS/gio-qua-2.jpg
--------------------------------------------------------------------------------
/src/test/resources/testdataCMS/gio-qua-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCMS/gio-qua-3.jpg
--------------------------------------------------------------------------------
/src/test/resources/testdataCMS/gio-qua-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCMS/gio-qua-4.jpg
--------------------------------------------------------------------------------
/src/test/resources/testdataCRM/ClientsDataExcel.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCRM/ClientsDataExcel.xlsx
--------------------------------------------------------------------------------
/src/test/resources/testdataCRM/DOCX_File_01.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/anhtester/AutomationFrameworkSelenium/60fa9e30a8b60ee014deeda44c7ec8fa7d2025f2/src/test/resources/testdataCRM/DOCX_File_01.docx
--------------------------------------------------------------------------------
/src/test/resources/testdataCRM/LoginCSV.csv:
--------------------------------------------------------------------------------
1 | email,password
2 | admin02@mailinator.com,123456
3 | tld01@mailinator.com,123456
4 |
--------------------------------------------------------------------------------
/src/test/resources/testdataCRM/TxtFileData.txt:
--------------------------------------------------------------------------------
1 | Hương
2 | Thủy
--------------------------------------------------------------------------------