{"id":31101040,"url":"https://github.com/kmartita/web-mobile-multi-module-frmk","last_synced_at":"2026-05-07T15:45:02.367Z","repository":{"id":263016033,"uuid":"887986279","full_name":"kmartita/web-mobile-multi-module-frmk","owner":"kmartita","description":"This project automates UI testing for both web and mobile (iOS). It is a Java-based test framework utilizing Selenium for web and Appium for mobile (iOS), structured as a Maven multi-module project with TestNG and Allure Report for reporting.","archived":false,"fork":false,"pushed_at":"2025-09-12T19:44:43.000Z","size":158,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-12T21:59:44.507Z","etag":null,"topics":["allure-report","appium","automation","java11","maven","mobile","selenium","testng","web","xcode"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kmartita.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-13T16:08:54.000Z","updated_at":"2025-09-12T19:44:47.000Z","dependencies_parsed_at":"2025-09-12T21:21:48.306Z","dependency_job_id":"48b21b2d-27c0-4e7b-a140-a49a308c93c5","html_url":"https://github.com/kmartita/web-mobile-multi-module-frmk","commit_stats":null,"previous_names":["kmartita/web-mobile-multi-module-frmk"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kmartita/web-mobile-multi-module-frmk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmartita%2Fweb-mobile-multi-module-frmk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmartita%2Fweb-mobile-multi-module-frmk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmartita%2Fweb-mobile-multi-module-frmk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmartita%2Fweb-mobile-multi-module-frmk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kmartita","download_url":"https://codeload.github.com/kmartita/web-mobile-multi-module-frmk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmartita%2Fweb-mobile-multi-module-frmk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32744836,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["allure-report","appium","automation","java11","maven","mobile","selenium","testng","web","xcode"],"created_at":"2025-09-16T23:43:02.814Z","updated_at":"2026-05-07T15:45:02.328Z","avatar_url":"https://github.com/kmartita.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Java](https://img.shields.io/badge/java-white?style=for-the-badge\u0026logo=openjdk\u0026logoSize=auto\u0026color=%23e69138\u0026cacheSeconds=3600\u0026link=https%3A%2F%2Fwww.oracle.com%2Fjava%2F)\n![Maven](https://img.shields.io/badge/maven-white?style=for-the-badge\u0026logo=apachemaven\u0026logoSize=auto\u0026color=%23cc0000\u0026cacheSeconds=3600\u0026link=https%3A%2F%2Fmaven.apache.org)\n![Selenium](https://img.shields.io/badge/selenium-info?style=for-the-badge\u0026logo=selenium\u0026logoSize=auto\u0026color=%23d9ead3\u0026cacheSeconds=3600\u0026link=https%3A%2F%2Fwww.selenium.dev%2Fdocumentation%2F)\n![Appium2.0](https://img.shields.io/badge/appium-info?style=for-the-badge\u0026logo=appium\u0026logoSize=auto\u0026color=%23f4cccc\u0026cacheSeconds=3600\u0026link=https%3A%2F%2Fappium.io%2Fdocs%2Fen%2F2.0%2F)\n![Xcode](https://img.shields.io/badge/Xcode-info?style=for-the-badge\u0026logo=Xcode\u0026color=%23cfe2f3\u0026cacheSeconds=3600)\n![TestNG](https://img.shields.io/badge/testng-white?style=for-the-badge\u0026logoSize=auto\u0026color=%233d85c6\u0026cacheSeconds=3600\u0026link=https%3A%2F%2Ftestng.org)\n![Allure Report](https://img.shields.io/badge/allure-white?style=for-the-badge\u0026logoSize=auto\u0026color=%23f1c232\u0026cacheSeconds=3600\u0026link=https%3A%2F%2Fallurereport.org)\n\n\n# Web \u0026 Mobile (iOS) Automation Demo Project: Selenium \u0026 Appium\nThis multi-module Java framework for test automation has been built with Maven and utilizes Selenium and Appium for browser and mobile automation, providing fast and reliable execution of web \u0026 mobile tests with detailed reporting and integration capabilities.\n\n### Tech Stack:\n- **Programming Language**: Java\n- **Build Tool**: Maven\n- **UI Automation Frameworks**: Selenium, Appium\n- **Testing Framework**: TestNG\n- **Reporting**: Allure Report\n- **IDE for iOS development**: Xcode\n\n### Requirements:\nRequires **Java 17**, **Maven 3.9.x**, **Allure Report 2.33.x**, and **Xcode 16.x** to be installed and properly configured on your local machine.\u003cbr/\u003e\n\n### Supported Platform:\n* (Mac) OS X\n\n## Table of Contents\n1. [Getting Started](#one)\n   * 1.1. [Installation prerequisites](#one-one)\n   * 1.2. [Build WebDriverAgent (WDA) in Xcode](#one-two)\n   * 1.3. [Build Test Application](#one-three)\n2. [Framework Structure](#two)\n   * 2.1. [Configuring project](#two-one)\n   * 2.2. [Design pattern architecture](#two-two)\n3. [Tests Execution](#three)\n   * 3.1. [Web:](#three-one)\n   * 3.2. [Mobile:](#three-two)\n4. [Generate and Review Allure Report](#four)\n\n\n\u003ca id=\"one\"\u003e\u003c/a\u003e\n## 1. Getting Started\n\u003ca id=\"one-one\"\u003e\u003c/a\u003e\n### 1.1. Installation prerequisites:\n1. [Xcode](https://developer.apple.com/documentation/safari-developer-tools/installing-xcode-and-simulators) (\u003e= v.16.4)\u003cbr/\u003e\n   * Update **Components** (Xcode -\u003e Settings -\u003e Components) to the [latest versions](https://developer.apple.com/documentation/ios-ipados-release-notes).\u003cbr/\u003e\n\u003cimg width=\"828\" height=\"553\" alt=\"Components\" src=\"https://github.com/user-attachments/assets/6581a929-a673-4440-8cf9-377498133fc8\" /\u003e\n\n2. Appium2 with [appium-xcuitest-driver](https://github.com/appium/appium-xcuitest-driver)\u003cbr/\u003e\n3. [Appium-Doctor](https://www.npmjs.com/package/appium-doctor) (a tool for checking Appium installation). It checks if Node.js, JDK, Android SDK, and Xcode are installed.\u003cbr/\u003e\n\n##### Install Homebrew, then NodeJS, and verify versions:\n```commandline\nbrew install node\nnode -v\nnpm -v\n```\n##### Install Appium and verify the version:\n```commandline\nnpm install -g appium\nappium -v\n```\n##### Basic commands for working with Appium [Drivers](https://appium.io/docs/en/2.5/ecosystem/drivers/):\n```bash\nappium driver list\nappium driver install \u003cdriver name\u003e\nappium driver update \u003cdriver name\u003e\nappium driver uninstall \u003cdriver name\u003e\n```\n   * *Parameter:*\u003cbr/\u003e\n     `\u003cdriver name\u003e` - XCUITest driver\n##### Basic commands for working with Appium [Plugins](https://appium.io/docs/en/2.5/ecosystem/plugins/):\n```bash\nappium plugin list\nappium plugin install \u003cplugin name\u003e\nappium plugin update \u003cplugin name\u003e\nappium plugin uninstall \u003cplugin name\u003e\n```\n##### Starting the Appium server with default settings (after installing Appium-Doctor):\n```commandline\nappium\n```\n##### Check the installation of Appium and dependencies:\n```commandline\nnpm install -g appium-doctor\n```\n##### Run to check for iOS (after installing Carthage):\n```commandline\nappium-doctor --ios\n```\n\u003ca id=\"one-two\"\u003e\u003c/a\u003e\n### 1.2. Build [WebDriverAgent (WDA) in Xcode](https://docs.katalon.com/katalon-studio/manage-projects/set-up-projects/mobile-testing/ios/mobile-install-webdriveragent-for-real-ios-devices-in-katalon-studio):\u003cbr/\u003e\nBuilding WebDriverAgent (WDA) in Xcode is crucial for using Appium to automate iOS applications. WDA is a server that allows Appium to interact with iOS devices and simulators. \nHere’s a step-by-step guide on how to build and configure WebDriverAgent in Xcode:\u003cbr/\u003e\n##### 1. Locate the **WebDriverAgent** Directory:\u003cbr/\u003e\n   Path typically:\u003cbr/\u003e\n   ```text\n   /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent\n   ```\n   Or:\u003cbr/\u003e\n   ```text\n   ~/.npm-global/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent\n   ```\n##### 2. Open **WebDriverAgent** in Xcode:\u003cbr/\u003e\n   * Open Xcode\u003cbr/\u003e\n   * Select **File** -\u003e **Open**\u003cbr/\u003e\n   * Navigate to the WebDriverAgent folder you found in the previous step\u003cbr/\u003e\n   * Open **WebDriverAgent.xcodeproj**\u003cbr/\u003e\n\n##### 3. Select Scheme: At top left, choose **WebDriverAgentRunner** scheme\u003cbr/\u003e\n##### 4. Configure Signing:\u003cbr/\u003e\n   Ensure the project is set to use automatic signing:\u003cbr/\u003e\n   * Click on the **WebDriverAgentRunner** in the project navigator\u003cbr/\u003e\n   * Select the target (on the right side in the project settings)\u003cbr/\u003e\n   * Under the **Signing \u0026 Capabilities** tab:\u003cbr/\u003e\n     * Select your development team from the **Team** drop-down\u003cbr/\u003e\n     * Make sure the **Automatically manage signing** option is enabled\u003cbr/\u003e\n\n##### 5. Connect Device:\u003cbr/\u003e\n   * Connect your physical iOS device via USB or choose a simulator\u003cbr/\u003e\n   * In the top left corner, select your device or simulator from the device drop-down list\u003cbr/\u003e\n\n##### 6. Build the Project:\u003cbr/\u003e\n   * With the correct scheme selected and device input, click on **Product** in the Xcode menu\u003cbr/\u003e\n   * Select **Build** or press **Command + B**\u003cbr/\u003e\n   * Monitor the **Issue Navigator** (the triangle icon) for any errors\u003cbr/\u003e\n\n##### 7. Fix Errors (if any): Resolve signing issues, dependencies, or iOS compatibility\u003cbr/\u003e\n##### 8. Run **WebDriverAgent Server**:\u003cbr/\u003e\n   * Open a new terminal window\u003cbr/\u003e\n   * Run the following commands to start the Appium server:\u003cbr/\u003e\n```shell\n   appium --log-level debug\n```\n   * WebDriverAgent will launch automatically\u003cbr/\u003e\n\n##### 9. Verify WebDriverAgent Status:\u003cbr/\u003e\n```html\n   http://\u003cdevice-ip\u003e:8100/status\n```\nReplace `\u003cdevice-ip\u003e` with the IP address of your iOS device while ensuring that the device’s WDA server is running.\u003cbr/\u003e\n\n##### Result:\n\u003cimg width=\"1717\" height=\"932\" alt=\"WebDriverAgent\" src=\"https://github.com/user-attachments/assets/e12429ae-e4f2-4470-bcf9-bbc650285175\" /\u003e\n\n\u003ca id=\"one-three\"\u003e\u003c/a\u003e\n### 1.3. Build Test Application:\n1. Clone (or use option 'Open with Xcode') the project (iOS app for testing) from this [GitHub repository](https://github.com/kmartita/xcode-test-app).\n   This is a simple 'Hello World!' application for iOS devices using Swift 6.1.2, created for testing purposes with Appium.\n2. Select a iOS simulator (e.g., `iPad (A16)`) in Xcode and build application. After a successful build, the `.app` file will appear in `DerivedData`:\u003cbr/\u003e\n```text\n   ~/Library/Developer/Xcode/DerivedData/YourProject-XXXXXX/Build/Products/Debug-iphonesimulator/TestApp.app\n```\n\n##### Result:\n\u003cimg width=\"1213\" height=\"652\" alt=\"TestApp-Xcode\" src=\"https://github.com/user-attachments/assets/1ad96c6f-0cb7-42c0-9c69-11c4fae832ef\" /\u003e\n\u003cimg width=\"1053\" height=\"824\" alt=\"TestApp-Simulator\" src=\"https://github.com/user-attachments/assets/ee8dfa19-bfa5-489a-9e4e-23fcb9417bfa\" /\u003e\n\n\n\u003ca id=\"two\"\u003e\u003c/a\u003e\n## 2. Framework Structure\nThis template provides a UI test automation solution suitable for both web and mobile (iOS). It is structured as a Maven multi-module project, with the following relationships between the modules:\u003cbr/\u003e\n```\n|———core-frmk\n    |—-pom.xml\n    |—-config\n        |—-.env\n    |—-module-app\n        |—-pom.xml\n        |—-src\n            |—-main\n                |—-java\n    |—-module-tests\n        |—-pom.xml\n        |—-src\n            |—-test\n                |—-java\n                    |—-resources\n                        |—-testng.xml\n                        |—-allure.properties\n    |—-module-tools\n        |—-pom.xml\n        |—-src\n            |—-main\n               |—-java\n```\n1. **Root Module (`core-frmk`)**. The parent project that defines shared dependencies, plugin configurations, and manages overall builds. Contains the `config` directory, where environment variables (`.env` files of various extensions) are stored for easy configuration management.\u003cbr/\u003e\n2. **Modules**:\n   - `module-app`. The main module containing page object classes, UI components, and core application logic. It depends on **module-tools** for shared utilities and design pattern implementations.\u003cbr/\u003e\n   - `module-tools`. A utility module providing shared helpers, including support for browser configuration and Selenium integration, scalable Page Object pattern implementations, report generation, logging, and other common functions used across modules.\u003cbr/\u003e\n   - `module-tests`. This module contains test classes and test configurations (`testng.xml`). It depends on **module-app** to access page objects and perform web UI testing in a controlled environment.\u003cbr/\u003e\n\n\u003ca id=\"two-one\"\u003e\u003c/a\u003e\n### 2.1. Configuring project:\nRun this command from the start to ensure that you don't have anything corrupted.\u003cbr/\u003e\n```bash\ncd core-frmk\nmvn clean install -U -DskipTests=true\n```\n\n\u003ca id=\"two-two\"\u003e\u003c/a\u003e\n### 2.2. Design pattern architecture:\n\u003cimg width=\"1906\" height=\"1980\" alt=\"design-pattern-selenium\" src=\"https://github.com/user-attachments/assets/04aad3ae-e4f3-48a1-b19b-8af70fde68f5\" /\u003e\n\n\n\u003ca id=\"three\"\u003e\u003c/a\u003e\n## 3. Tests Execution\nMaven is used as the build and test management tool, with additional options for test configuration:\u003cbr/\u003e\n`-Denv={String}`  specifies the environment for test execution (default: `test`)\u003cbr/\u003e\n`-Dbrowser={String}` - defines the browser to run web tests on (default: `chrome`)\u003cbr/\u003e\n`-DiOS={int}` - defines the iOS version to run mobile tests on (default: the version set in Xcode)\u003cbr/\u003e\n`-Ddevice={String}` - defines the name of device for run mobile tests on (default: the name set in Xcode)\u003cbr/\u003e\n`-Dthreads={int}` -  specifies the number of threads for parallel test execution\u003cbr/\u003e\n`-Dtest={String}` - the specific test class to run\u003cbr/\u003e\n\n##### Common Maven Commands:\n1. Removes the `target` directory before running tests. Ensures that previous results do not affect the Allure report.\n```bash\nmvn clean\n```\n2. Runs tests defined in your `testng.xml`, using default system property settings (e.g., env, browser). By default, it executes with Chrome.\u003cbr/\u003e\n```bash\nmvn test\n```\n\n*For example:*\n```bash\ncd core-frmk\nmvn clean test\n```\n\n\u003ca id=\"three-one\"\u003e\u003c/a\u003e\n### 3.1. Web:\nCreate a hidden `.env` file containing the `BASE_URL` parameter to configure the web URL for testing. This will allow you to easily manage the base URL used during your web tests.\u003cbr/\u003e\n```properties\nBASE_URL = https://demoqa.com\n```\n\n#### Supported Browsers:\n* Google Chrome\n* Mozilla Firefox\n* Safari [Mac OS X]\n\n#### Usage web examples:\nTo execute a specific test with default settings the next command line should be used:\u003cbr/\u003e\n```bash\nmvn clean test -Dtest=HomeWebTest\n```\nTo execute a test with custom options the next command line should be used:\u003cbr/\u003e\n```bash\nmvn clean test -Dtest=HomeWebTest -Dbrowser=firefox -Denv=dev\n```\nTo execute tests in parallel with `testng.xml` the next command line should be used:\u003cbr/\u003e\n```bash\nmvn clean test -DsuiteFile=src/test/resources/suites/web.xml -Dthreads=3\n```\n\n\u003ca id=\"three-two\"\u003e\u003c/a\u003e\n### 3.2. Mobile:\nCreate a hidden `.env` file containing the parameters `APPIUM_URL`, `APP_NAME`, and `APP_BUNDLE_ID` to configure the testing environment for mobile tests.\u003cbr/\u003e\nPlace your builded iOS application (e.g., `TestApp.app`) from `DerivedData` folder into the local `app` directory.\u003cbr/\u003e\nThe `APP_BUNDLE_ID` is a unique bundle identifier for a mobile application on the iOS or Android platform. This identifier is used to differentiate apps in systems and services such as the App Store or Google Play.\u003cbr/\u003e\n```properties\nAPPIUM_UR = http://0.0.0.0:4723/\nAPP_NAME = \"TestApp.app\"\nAPP_BUNDLE_ID = com.kmartita\n```\nTo execute the mobile test itself the next command line should be used:\u003cbr/\u003e\n```bash\ncd core-frmk\nmvn clean test -Denv=dev -Dtest=HomeMobileTest -DiOS=18.6 -Ddevice=\"iPad Pro 13-inch (M4)\"\n```\n#### Supported iOS Simulators (by default):\n* iPad (A16) - iOS 18.6\n\n#### List of available devices:\n\u003cimg width=\"918\" height=\"441\" alt=\"Devices\" src=\"https://github.com/user-attachments/assets/6d1c0972-360c-4163-967e-9f5946a7f614\" /\u003e\n\n\n\u003ca id=\"four\"\u003e\u003c/a\u003e\n## 4. Generate and Review Allure Report\nTo generate a report by Allure after tests have finished, use the following command:\u003cbr/\u003e\n```bash\nmvn allure:report\n```\nThe report can be found in the **root** folder of a project. The folder named `allure-report` contains the generated report. Just open the `index.html` file in a browser.\u003cbr/\u003e\n\nAlternatively, Allure provides a command to serve the report directly:\u003cbr/\u003e\n```bash\nmvn allure:serve \n```\nThis command starts a local web server and automatically opens the generated report in your default browser.\u003cbr/\u003e\n\nAn example of the generated [Allure TestNG](https://allurereport.org/docs/testng/) report looks like this:\u003cbr/\u003e\n#### Suites (Web \u0026 Mobile):\n```bash\nmvn clean test -Denv=dev\n```\n```requirements\nBrowser: Chrome\niOS-version: 18.6\nDeevice: iPad (A16)\n```\n##### Result:\n\u003cimg width=\"1530\" height=\"957\" alt=\"suites_overview\" src=\"https://github.com/user-attachments/assets/786561dd-917c-4b71-8d1f-175c67bf00ce\" /\u003e\n\u003cimg width=\"1412\" height=\"572\" alt=\"suites_behaviors\" src=\"https://github.com/user-attachments/assets/784db419-8df3-4155-b93b-e74040220fe6\" /\u003e\n\n#### Mobile:\n```bash\nmvn clean test -DiOS=18.6 -Ddevice=\"iPad Air 11-inch (M3)\" -Denv=dev -DsuiteFile=src/test/resources/suites/mobile.xml\n```\n##### Result:\n\u003cimg width=\"1420\" height=\"804\" alt=\"mobile_overview\" src=\"https://github.com/user-attachments/assets/e56a435d-709b-4de1-a234-b2258e64148c\" /\u003e\n\u003cimg width=\"1420\" height=\"1194\" alt=\"mobile-packages\" src=\"https://github.com/user-attachments/assets/e9f771a7-ee4d-44ae-90be-06f487841408\" /\u003e\n\n#### Web: \n```bash\nmvn clean test -Dbrowser=firefox -DsuiteFile=src/test/resources/suites/web.xml\n```\n```requirements\nEnv: test\n```\n##### Result:\n\u003cimg width=\"1412\" height=\"781\" alt=\"web_overview\" src=\"https://github.com/user-attachments/assets/38cb9642-0b5c-4d69-8464-b374b56fbcb7\" /\u003e\n\u003cimg width=\"1418\" height=\"1110\" alt=\"web_failed\" src=\"https://github.com/user-attachments/assets/158f7f45-a867-4289-9882-7bb439f31290\" /\u003e\n\n\n\n---\n#### Copyright (c) 2025 Marta Kravchuk under MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkmartita%2Fweb-mobile-multi-module-frmk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkmartita%2Fweb-mobile-multi-module-frmk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkmartita%2Fweb-mobile-multi-module-frmk/lists"}