# andrewvimal11/selenium-testng-framework architecture

> Architecture diagram of the GitHub repository andrewvimal11/selenium-testng-framework, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/andrewvimal11/selenium-testng-framework
- Repository: https://github.com/andrewvimal11/selenium-testng-framework

## Overview

This repository is a Java UI/API test-automation framework for Sauce Demo and Restful Booker. Its principal workflows are UI scenarios implemented with page objects and API scenarios routed through a booking client; TestNG runs the tests, and reporting captures results and failure screenshots. The README documents these responsibilities and relationships, but no source excerpts were provided, so implementation-level calls and configuration wiring cannot be verified; uncertain relationships are omitted or marked dashed.

Main entry points: [`src/test/java/com/andrewvimal/tests/ui/InventoryTest.java`](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/ui/InventoryTest.java) (Inventory tests), [`src/test/java/com/andrewvimal/tests/ui/LoginTest.java`](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/ui/LoginTest.java) (Login tests), [`src/test/java/com/andrewvimal/tests/ui/CheckoutTest.java`](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/ui/CheckoutTest.java) (Checkout tests), [`src/test/java/com/andrewvimal/framework/api/BookingClient.java`](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/api/BookingClient.java) (Booking client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_execution["Test execution"]
  node_login_test["Login tests<br/>[LoginTest.java]"]
  node_inventory_test["Inventory tests<br/>[InventoryTest.java]"]
  node_checkout_test["Checkout tests<br/>[CheckoutTest.java]"]
  node_booking_test["Booking API tests"]
  node_testng["TestNG runner"]
end

subgraph group_ui["UI automation"]
  node_login_page["Login page<br/>[LoginPage.java]"]
  node_inventory_page["Inventory page<br/>[InventoryPage.java]"]
  node_cart_page["Cart page<br/>[CartPage.java]"]
  node_checkout_page["Checkout page<br/>[CheckoutPage.java]"]
  node_base_page["Page waits<br/>[BasePage.java]"]
end

subgraph group_api["API automation"]
  node_booking_client["Booking client<br/>[BookingClient.java]"]
  node_booking_models["Booking models<br/>[Booking.java]"]
  node_booking_dates["Booking date model<br/>[BookingDates.java]"]
end

subgraph group_support["Framework support"]
  node_config_reader["Config reader<br/>[ConfigReader.java]"]
  node_driver_factory["Driver factory<br/>[DriverFactory.java]"]
  node_extent_manager["Report manager<br/>[ExtentManager.java]"]
  node_test_listener["Test listener<br/>[TestListener.java]"]
end

node_engineer(("QA engineer"))
node_sauce_demo(("Sauce Demo"))
node_restful_booker(("Restful Booker"))

node_engineer -->|"runs suites"| node_testng
node_testng -->|"runs"| node_login_test
node_testng -->|"runs"| node_inventory_test
node_testng -->|"runs"| node_checkout_test
node_testng -->|"runs"| node_booking_test
node_login_test -->|"uses page object"| node_login_page
node_inventory_test -->|"uses page object"| node_inventory_page
node_inventory_test -->|"tests cart"| node_cart_page
node_checkout_test -->|"uses page object"| node_checkout_page
node_login_page -->|"uses waits"| node_base_page
node_inventory_page -->|"uses waits"| node_base_page
node_cart_page -->|"uses waits"| node_base_page
node_checkout_page -->|"uses waits"| node_base_page
node_login_test -->|"tests UI"| node_sauce_demo
node_inventory_test -->|"tests UI"| node_sauce_demo
node_checkout_test -->|"tests UI"| node_sauce_demo
node_booking_test -->|"uses client"| node_booking_client
node_booking_client -->|"sends API requests"| node_restful_booker
node_booking_client -.->|"uses models"| node_booking_models
node_booking_client -.->|"uses dates"| node_booking_dates
node_login_test -.->|"uses browser"| node_driver_factory
node_inventory_test -.->|"uses browser"| node_driver_factory
node_checkout_test -.->|"uses browser"| node_driver_factory
node_driver_factory -.->|"reads settings"| node_config_reader
node_test_listener -.->|"records results"| node_extent_manager

click node_login_test "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/ui/LoginTest.java"
click node_inventory_test "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/ui/InventoryTest.java"
click node_checkout_test "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/ui/CheckoutTest.java"
click node_booking_test "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/api/BookingApiTest.java"
click node_login_page "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/LoginPage.java"
click node_inventory_page "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/InventoryPage.java"
click node_cart_page "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/CartPage.java"
click node_checkout_page "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/CheckoutPage.java"
click node_base_page "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/BasePage.java"
click node_booking_client "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/api/BookingClient.java"
click node_booking_models "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/api/models/Booking.java"
click node_booking_dates "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/api/models/BookingDates.java"
click node_config_reader "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/config/ConfigReader.java"
click node_driver_factory "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/driver/DriverFactory.java"
click node_extent_manager "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/reporting/ExtentManager.java"
click node_test_listener "https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/reporting/TestListener.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_login_test,node_inventory_test,node_checkout_test,node_booking_test,node_testng toneBlue
class node_login_page,node_inventory_page,node_cart_page,node_checkout_page,node_base_page toneAmber
class node_booking_client,node_booking_models,node_booking_dates toneMint
class node_config_reader,node_driver_factory,node_extent_manager,node_test_listener toneRose
class node_engineer,node_sauce_demo,node_restful_booker toneIndigo
```

## Components

### Test execution

- [Login tests](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/ui/LoginTest.java): `src/test/java/com/andrewvimal/tests/ui/LoginTest.java`
- [Inventory tests](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/ui/InventoryTest.java): `src/test/java/com/andrewvimal/tests/ui/InventoryTest.java`
- [Checkout tests](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/ui/CheckoutTest.java): `src/test/java/com/andrewvimal/tests/ui/CheckoutTest.java`
- [Booking API tests](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/tests/api/BookingApiTest.java): `src/test/java/com/andrewvimal/tests/api/BookingApiTest.java`
- **TestNG runner**

### UI automation

- [Login page](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/LoginPage.java): `src/test/java/com/andrewvimal/framework/pages/LoginPage.java`
- [Inventory page](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/InventoryPage.java): `src/test/java/com/andrewvimal/framework/pages/InventoryPage.java`
- [Cart page](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/CartPage.java): `src/test/java/com/andrewvimal/framework/pages/CartPage.java`
- [Checkout page](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/CheckoutPage.java): `src/test/java/com/andrewvimal/framework/pages/CheckoutPage.java`
- [Page waits](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/pages/BasePage.java): `src/test/java/com/andrewvimal/framework/pages/BasePage.java`

### API automation

- [Booking client](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/api/BookingClient.java): `src/test/java/com/andrewvimal/framework/api/BookingClient.java`
- [Booking models](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/api/models/Booking.java): `src/test/java/com/andrewvimal/framework/api/models/Booking.java`
- [Booking date model](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/api/models/BookingDates.java): `src/test/java/com/andrewvimal/framework/api/models/BookingDates.java`

### Framework support

- [Config reader](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/config/ConfigReader.java): `src/test/java/com/andrewvimal/framework/config/ConfigReader.java`
- [Driver factory](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/driver/DriverFactory.java): `src/test/java/com/andrewvimal/framework/driver/DriverFactory.java`
- [Report manager](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/reporting/ExtentManager.java): `src/test/java/com/andrewvimal/framework/reporting/ExtentManager.java`
- [Test listener](https://github.com/andrewvimal11/selenium-testng-framework/blob/main/src/test/java/com/andrewvimal/framework/reporting/TestListener.java): `src/test/java/com/andrewvimal/framework/reporting/TestListener.java`

### Other components

- **QA engineer**
- **Sauce Demo**
- **Restful Booker**

## Connections

- QA engineer → TestNG runner: runs suites (evidence: `README.md`)
- TestNG runner → Login tests: runs (evidence: `README.md`)
- TestNG runner → Inventory tests: runs (evidence: `README.md`)
- TestNG runner → Checkout tests: runs (evidence: `README.md`)
- TestNG runner → Booking API tests: runs (evidence: `README.md`)
- Login tests → Login page: uses page object (evidence: `README.md`)
- Inventory tests → Inventory page: uses page object (evidence: `README.md`)
- Inventory tests → Cart page: tests cart (evidence: `README.md`)
- Checkout tests → Checkout page: uses page object (evidence: `README.md`)
- Login page → Page waits: uses waits (evidence: `README.md`)
- Inventory page → Page waits: uses waits (evidence: `README.md`)
- Cart page → Page waits: uses waits (evidence: `README.md`)
- Checkout page → Page waits: uses waits (evidence: `README.md`)
- Login tests → Sauce Demo: tests UI (evidence: `README.md`)
- Inventory tests → Sauce Demo: tests UI (evidence: `README.md`)
- Checkout tests → Sauce Demo: tests UI (evidence: `README.md`)
- Booking API tests → Booking client: uses client (evidence: `README.md`)
- Booking client → Restful Booker: sends API requests (evidence: `README.md`)
- Booking client → Booking models: uses models
- Booking client → Booking date model: uses dates
- Login tests → Driver factory: uses browser
- Inventory tests → Driver factory: uses browser
- Checkout tests → Driver factory: uses browser
- Driver factory → Config reader: reads settings
- Test listener → Report manager: records results
