# regisrozario/wdio-appium-cucumber architecture

> Architecture diagram of the GitHub repository regisrozario/wdio-appium-cucumber, 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/regisrozario/wdio-appium-cucumber
- Repository: https://github.com/regisrozario/wdio-appium-cucumber

## Overview

This repository automates iOS UI scenarios for Sauce Labs’ My Demo App: Gherkin features map to step definitions, which drive screen-specific page objects through WebdriverIO and Appium. The main user-to-result flow is scenario execution on a device, with Sauce Labs jobs and test results. The README also documents optional AI-assisted scenario authoring that produces a pull request. Connections for that branch are based on README descriptions and file paths; unsampled implementation details are not inferred.

Main entry points: [`config/wdio.shared.conf.ts`](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/config/wdio.shared.conf.ts) (Shared runner config), [`src/step-definitions/cart.steps.ts`](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/cart.steps.ts) (Cart steps), [`src/step-definitions/checkout.steps.ts`](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/checkout.steps.ts) (Checkout steps), [`src/pageobjects/base.screen.ts`](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/base.screen.ts) (Screen base)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_bdd["BDD scenarios"]
  node_cart_feature["Cart scenarios<br/>[cart.feature]"]
  node_checkout_feature["Checkout scenarios<br/>[checkout.feature]"]
  node_app_steps["App steps<br/>[app.steps.ts]"]
  node_cart_steps["Cart steps<br/>[cart.steps.ts]"]
  node_catalog_steps["Catalog steps<br/>[catalog.steps.ts]"]
  node_product_steps["Product steps<br/>[product.steps.ts]"]
  node_checkout_steps["Checkout steps<br/>[checkout.steps.ts]"]
end

subgraph group_automation["Screen automation"]
  node_catalog_screen["Catalog screen<br/>[catalog.screen.ts]"]
  node_product_screen["Product details"]
  node_cart_screen["Cart screen<br/>[cart.screen.ts]"]
  node_login_screen["Login screen<br/>[login.screen.ts]"]
  node_shipping_screen["Shipping address"]
  node_alert["Native alert<br/>[alert.ts]"]
  node_tabbar["Tab bar<br/>[tabbar.ts]"]
  node_base_screen["Screen base<br/>[base.screen.ts]"]
end

subgraph group_execution["Test execution"]
  node_shared_config["Shared runner config"]
  node_sauce_config["Sauce device config<br/>[wdio.sauce.conf.ts]"]
end

subgraph group_authoring["AI authoring"]
  node_scenario_form["Scenario form"]
  node_scenario_skill["Implement scenario skill<br/>[SKILL.md]"]
  node_scenario_tools["Scenario tooling<br/>[add-scenario.mjs]"]
end

node_tester(("Test author"))
node_sauce_labs["Sauce Labs"]
node_iphone["iOS device"]
node_pull_request["Pull request"]

node_tester -->|"authors scenarios"| node_cart_feature
node_tester -->|"authors scenarios"| node_checkout_feature
node_cart_feature -->|"binds steps"| node_cart_steps
node_checkout_feature -->|"binds steps"| node_checkout_steps
node_shared_config -->|"loads specs"| node_cart_feature
node_shared_config -->|"loads specs"| node_checkout_feature
node_shared_config -->|"registers steps"| node_app_steps
node_shared_config -->|"registers steps"| node_cart_steps
node_shared_config -->|"registers steps"| node_catalog_steps
node_shared_config -->|"registers steps"| node_product_steps
node_shared_config -->|"registers steps"| node_checkout_steps
node_sauce_config -->|"extends config"| node_shared_config
node_sauce_config -->|"runs sessions"| node_sauce_labs
node_sauce_labs -->|"drives device"| node_iphone
node_app_steps -->|"waits on"| node_catalog_screen
node_app_steps -->|"opens tab"| node_tabbar
node_cart_steps -->|"opens product"| node_catalog_screen
node_cart_steps -->|"adds product"| node_product_screen
node_cart_steps -->|"checks cart"| node_cart_screen
node_cart_steps -->|"opens tab"| node_tabbar
node_catalog_steps -->|"drives catalog"| node_catalog_screen
node_product_steps -->|"drives product"| node_product_screen
node_product_steps -->|"checks alert"| node_alert
node_checkout_steps -->|"starts checkout"| node_cart_screen
node_checkout_steps -->|"logs in"| node_login_screen
node_checkout_steps -->|"checks destination"| node_shipping_screen
node_checkout_steps -->|"checks alert"| node_alert
node_catalog_screen -->|"extends"| node_base_screen
node_product_screen -->|"extends"| node_base_screen
node_cart_screen -->|"extends"| node_base_screen
node_login_screen -->|"extends"| node_base_screen
node_shipping_screen -->|"extends"| node_base_screen
node_tester -->|"submits scenario"| node_scenario_form
node_scenario_form -->|"invokes authoring"| node_scenario_skill
node_scenario_form -->|"processes input"| node_scenario_tools
node_scenario_skill -->|"creates change"| node_pull_request

click node_cart_feature "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/features/cart.feature"
click node_checkout_feature "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/features/checkout.feature"
click node_app_steps "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/app.steps.ts"
click node_cart_steps "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/cart.steps.ts"
click node_catalog_steps "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/catalog.steps.ts"
click node_product_steps "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/product.steps.ts"
click node_checkout_steps "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/checkout.steps.ts"
click node_catalog_screen "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/catalog.screen.ts"
click node_product_screen "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/product-details.screen.ts"
click node_cart_screen "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/cart.screen.ts"
click node_login_screen "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/login.screen.ts"
click node_shipping_screen "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/shipping-address.screen.ts"
click node_alert "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/alert.ts"
click node_tabbar "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/tabbar.ts"
click node_base_screen "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/base.screen.ts"
click node_shared_config "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/config/wdio.shared.conf.ts"
click node_sauce_config "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/config/wdio.sauce.conf.ts"
click node_scenario_form "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/.github/workflows/implement-scenario.yml"
click node_scenario_skill "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/.claude/skills/implement-feature/SKILL.md"
click node_scenario_tools "https://github.com/regisrozario/wdio-appium-cucumber/blob/main/.github/scripts/add-scenario.mjs"

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_cart_feature,node_checkout_feature,node_app_steps,node_cart_steps,node_catalog_steps,node_product_steps,node_checkout_steps toneBlue
class node_catalog_screen,node_product_screen,node_cart_screen,node_login_screen,node_shipping_screen,node_alert,node_tabbar,node_base_screen toneAmber
class node_shared_config,node_sauce_config,node_pull_request toneMint
class node_scenario_form,node_scenario_skill,node_scenario_tools toneRose
class node_tester,node_sauce_labs,node_iphone toneIndigo
```

## Components

### BDD scenarios

- [Cart scenarios](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/features/cart.feature): `features/cart.feature`
- [Checkout scenarios](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/features/checkout.feature): `features/checkout.feature`
- [App steps](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/app.steps.ts): `src/step-definitions/app.steps.ts`
- [Cart steps](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/cart.steps.ts): `src/step-definitions/cart.steps.ts`
- [Catalog steps](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/catalog.steps.ts): `src/step-definitions/catalog.steps.ts`
- [Product steps](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/product.steps.ts): `src/step-definitions/product.steps.ts`
- [Checkout steps](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/step-definitions/checkout.steps.ts): `src/step-definitions/checkout.steps.ts`

### Screen automation

- [Catalog screen](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/catalog.screen.ts): `src/pageobjects/catalog.screen.ts`
- [Product details](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/product-details.screen.ts): `src/pageobjects/product-details.screen.ts`
- [Cart screen](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/cart.screen.ts): `src/pageobjects/cart.screen.ts`
- [Login screen](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/login.screen.ts): `src/pageobjects/login.screen.ts`
- [Shipping address](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/shipping-address.screen.ts): `src/pageobjects/shipping-address.screen.ts`
- [Native alert](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/alert.ts): `src/pageobjects/alert.ts`
- [Tab bar](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/tabbar.ts): `src/pageobjects/tabbar.ts`
- [Screen base](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/src/pageobjects/base.screen.ts): `src/pageobjects/base.screen.ts`

### Test execution

- [Shared runner config](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/config/wdio.shared.conf.ts): `config/wdio.shared.conf.ts`
- [Sauce device config](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/config/wdio.sauce.conf.ts): `config/wdio.sauce.conf.ts`

### AI authoring

- [Scenario form](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/.github/workflows/implement-scenario.yml): `.github/workflows/implement-scenario.yml`
- [Implement scenario skill](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/.claude/skills/implement-feature/SKILL.md): `.claude/skills/implement-feature/SKILL.md`
- [Scenario tooling](https://github.com/regisrozario/wdio-appium-cucumber/blob/main/.github/scripts/add-scenario.mjs): `.github/scripts/add-scenario.mjs`

### Other components

- **Test author**
- **Sauce Labs**
- **iOS device**
- **Pull request**

## Connections

- Test author → Cart scenarios: authors scenarios (evidence: `README.md`)
- Test author → Checkout scenarios: authors scenarios (evidence: `README.md`)
- Cart scenarios → Cart steps: binds steps (evidence: `README.md`)
- Checkout scenarios → Checkout steps: binds steps (evidence: `README.md`)
- Shared runner config → Cart scenarios: loads specs (evidence: `config/wdio.shared.conf.ts`)
- Shared runner config → Checkout scenarios: loads specs (evidence: `config/wdio.shared.conf.ts`)
- Shared runner config → App steps: registers steps (evidence: `config/wdio.shared.conf.ts`)
- Shared runner config → Cart steps: registers steps (evidence: `config/wdio.shared.conf.ts`)
- Shared runner config → Catalog steps: registers steps (evidence: `config/wdio.shared.conf.ts`)
- Shared runner config → Product steps: registers steps (evidence: `config/wdio.shared.conf.ts`)
- Shared runner config → Checkout steps: registers steps (evidence: `config/wdio.shared.conf.ts`)
- Sauce device config → Shared runner config: extends config (evidence: `config/wdio.sauce.conf.ts`)
- Sauce device config → Sauce Labs: runs sessions (evidence: `README.md`)
- Sauce Labs → iOS device: drives device (evidence: `README.md`)
- App steps → Catalog screen: waits on (evidence: `src/step-definitions/app.steps.ts`)
- App steps → Tab bar: opens tab (evidence: `src/step-definitions/app.steps.ts`)
- Cart steps → Catalog screen: opens product (evidence: `src/step-definitions/cart.steps.ts`)
- Cart steps → Product details: adds product (evidence: `src/step-definitions/cart.steps.ts`)
- Cart steps → Cart screen: checks cart (evidence: `src/step-definitions/cart.steps.ts`)
- Cart steps → Tab bar: opens tab (evidence: `src/step-definitions/cart.steps.ts`)
- Catalog steps → Catalog screen: drives catalog (evidence: `src/step-definitions/catalog.steps.ts`)
- Product steps → Product details: drives product (evidence: `src/step-definitions/product.steps.ts`)
- Product steps → Native alert: checks alert (evidence: `src/step-definitions/product.steps.ts`)
- Checkout steps → Cart screen: starts checkout (evidence: `src/step-definitions/checkout.steps.ts`)
- Checkout steps → Login screen: logs in (evidence: `src/step-definitions/checkout.steps.ts`)
- Checkout steps → Shipping address: checks destination (evidence: `src/step-definitions/checkout.steps.ts`)
- Checkout steps → Native alert: checks alert (evidence: `src/step-definitions/checkout.steps.ts`)
- Catalog screen → Screen base: extends (evidence: `src/pageobjects/catalog.screen.ts`)
- Product details → Screen base: extends (evidence: `src/pageobjects/product-details.screen.ts`)
- Cart screen → Screen base: extends (evidence: `src/pageobjects/cart.screen.ts`)
- Login screen → Screen base: extends (evidence: `src/pageobjects/login.screen.ts`)
- Shipping address → Screen base: extends (evidence: `src/pageobjects/shipping-address.screen.ts`)
- Test author → Scenario form: submits scenario (evidence: `README.md`)
- Scenario form → Implement scenario skill: invokes authoring (evidence: `README.md`)
- Scenario form → Scenario tooling: processes input (evidence: `README.md`)
- Implement scenario skill → Pull request: creates change (evidence: `README.md`)
