{"id":16536783,"url":"https://github.com/eliasnogueira/appium-parallel-execution","last_synced_at":"2025-03-16T19:31:52.371Z","repository":{"id":25129764,"uuid":"103001786","full_name":"eliasnogueira/appium-parallel-execution","owner":"eliasnogueira","description":"A lean, up-to-date, and cross-platform solution to run your mobile tests into a Selenium Grid using Appium.","archived":false,"fork":false,"pushed_at":"2023-05-09T18:57:15.000Z","size":726,"stargazers_count":100,"open_issues_count":6,"forks_count":44,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-02-27T12:37:31.358Z","etag":null,"topics":["android","android-testing","appium","appium-desktop","ios","ios-testing","mobile-testing","parallel","parallel-tests"],"latest_commit_sha":null,"homepage":"http://eliasnogueira.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eliasnogueira.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-10T03:51:45.000Z","updated_at":"2025-02-01T17:45:32.000Z","dependencies_parsed_at":"2024-10-27T11:10:11.284Z","dependency_job_id":"0961a948-e9bb-4e0a-ae40-cc6cf2607ecf","html_url":"https://github.com/eliasnogueira/appium-parallel-execution","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliasnogueira%2Fappium-parallel-execution","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliasnogueira%2Fappium-parallel-execution/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliasnogueira%2Fappium-parallel-execution/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliasnogueira%2Fappium-parallel-execution/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eliasnogueira","download_url":"https://codeload.github.com/eliasnogueira/appium-parallel-execution/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243826791,"owners_count":20354220,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-testing","appium","appium-desktop","ios","ios-testing","mobile-testing","parallel","parallel-tests"],"created_at":"2024-10-11T18:33:20.280Z","updated_at":"2025-03-16T19:31:52.356Z","avatar_url":"https://github.com/eliasnogueira.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Appium parallel test execution\nA lean, up-to-date, and cross-platform solution to run your mobile tests into a Selenium Grid using Appium.\n\n* [How you can use this repo](#how-you-can-use-this-repo)\n* [Technical Decisions](#technical-decisions)\n   * [Languages and Frameworks](#languages-and-frameworks)\n   * [Test architecture](#test-architecture)\n* [Pre-conditions](#pre-conditions)\n   * [What you need](#what-you-need)\n      * [Android specific](#android-specific)\n         * [Configurations](#configurations)\n         * [Inspect elements on Android](#inspect-elements-on-android)\n      * [iOS specific](#ios-specific)\n         * [Configurations](#configurations-1)\n         * [Inspect elements on iOS](#inspect-elements-on-ios)\n* [About the apps](#about-the-apps)\n* [How to run the tests](#how-to-run-the-tests)\n   * [Pre-conditions](#pre-conditions-1)\n   * [Appium](#appium)\n   * [Project execution](#project-execution)\n   * [About the test](#about-the-test)\n   * [Having trouble?](#having-trouble)\n   * [Any question, error or feedback?](#any-question-error-or-feedback)\n\n## How you can use this repo\nYou can use this repo as a start point to implement your own cross-platform parallel execution in a grid.\nIt uses different libraries and design pater to make it lean, easy to maintain and extend.\n\n## Technical Decisions\nThis section will show to you the libraries, frameworks and design decisions that made a lean architecture possible.\n\n### Languages and Frameworks\n\nThis project using the following languages and frameworks:\n\n* [Java 11](https://openjdk.java.net/projects/jdk/11/) as the programming language\n* [TestNG](https://testng.org/doc/) as the UnitTest framework to support the test creation\n* [Appium](http://appium.io/) as the mobile test automation framework\n* [Seleium Grid](https://www.selenium.dev/documentation/en/grid/) as the grid and paralellism solution\n* [AsseertJ](https://joel-costigliola.github.io/assertj/) as the fluent assertion library\n* [Allure Report](https://docs.qameta.io/allure/) as the testing report strategy\n* [Log4J2](https://logging.apache.org/log4j/2.x/) as the logging manage strategy\n* [Owner](http://owner.aeonbits.org/) to minimize the code to handle the properties file\n\n### Test architecture\n\nWe know that any automation project starting with a good test architecture.\nThis project can be your initial test architecture for a faster start.\nYou will see the following items in this architecture:\n\n* Page Objects pattern\n* Factory\n* BaseTest\n* Logging\n* Configuration files\n* Parallel execution\n\n## Pre-conditions\n\n### What you need\n1. Java JDK 11 installed and configured (with `JAVA_HOME` and `PATH` configured)\n2. IDE (to import this project using Maven)\n3. Android SDK (for Android execution | with `ANDROID_HOME` and `PATH` configured)\n4. Android AVD created (or Genymotion)\n5. XCode and the iPhone Simulator (for iOS execution)\n6. Appium installed through npm\n\n#### Android specific\n\n##### Configurations\nTo execute the examples over the Android platform you'll need:\n* Android SDK\n* Updated _Build Tools_, _Platform Tools_ and, at least, one _System Image (Android Version)_\n* Configure Android Path on your environment variables\n   * ANDROID_HOME: root android sdk directory\n   * PATH: ANDROID_HOME + the following paths = _platform-tools_, _tools_, _tools/bin_ \n* And Android Virtual Device\n   * AVD or Genymotion\n   \n##### Inspect elements on Android\nYou can use the [uiautomatorviewer](https://developer.android.com/training/testing/ui-testing/uiautomator-testing.html) to inspect elements on Android devices.\n or you can use [Appium Desktop](https://github.com/appium/appium-desktop)\n\n#### iOS specific\n\n##### Configurations\nTo execute the examples over the iOS platform you'll need:\n* MacOS machine :-)\n* Xcode installed\n* iPhone simulator (I recommend, for these tests iOS version \u003e 10)\n* Follow all the steps on [https://github.com/appium/appium-xcuitest-driver](https://github.com/appium/appium-xcuitest-driver)\n\n##### Inspect elements on iOS\nYou also can use [Appium Desktop](https://github.com/appium/appium-desktop)\nor you can use the [Macaca App Inspector](https://macacajs.github.io/app-inspector/)\n\n## About the apps\nThe Fastip app can be downloaded by this repository\n[https://github.com/ptraeg/mobile-apps-4-ways](https://github.com/ptraeg/mobile-apps-4-ways)\n\nI have built the apps for Android and iOS platform, and these are located in app folder.\n\n## How to run the tests\n\n### Pre-conditions\nOn a MacOs machine give write access to _node_modules_:\n`sudo chmod -R 777 /usr/local/lib/node_modules`\n\n### Appium\nTry to always have Appium and libraries updated.\n* verify the core Appium version on [npm appium site](https://www.npmjs.com/package/appium). To see your Appium version run `appium --version` on the Terminal/Command Prompt\n* verify the Appium library version on [https://github.com/appium/java-client](https://github.com/appium/java-client)\n   * if it differs from `pom.xml` file, update it!\n\n### Project execution\nFirst you'll need to start the hub and the nodes.\nPlease read the [Start commands](https://github.com/eliasnogueira/appium-parallel-execution/blob/master/json/start-commands.md) to lear now to start it.\n\nEach node is configured through a json file in _json_ folder.\nRemember you gonna need to change some values, like `browserName`, `version`, `platform`, `url`, `host`, `port`, `hubPort` and `hubHost`.\n\nThe _port_ information is also linked on `launch_grid.sh` file, that pass this and other informations by parameter.\n\nAfter change all this information for your execution, execute the suite.xml file.\nEach _test_ have 3 parameters:\n* platform\n* udid\n* platformVersion\n\nThese parameters are linked to the test files using TestNG, so when you execute the suite.xml file all these parameters will be used on test file.\n   \n### About the test\nOn the package `com.eliasnogueira` you'll find the test script `TipTest.java` that uses the information on `config.properties` and `suite.xml`to execute the tests in Android or iOS\n\n### Having trouble?\n\n#### CapabilityNotPresentOnTheGridException\nPlease, read this post: [https://medium.com/@eliasnogueira/got-capabilitynotpresentonthegridexception-66cbc1aa06b7](https://medium.com/@eliasnogueira/got-capabilitynotpresentonthegridexception-66cbc1aa06b7)\n\n### Any question, error or feedback?\nPlease fill an [issue](https://github.com/eliasnogueira/appium-parallel-execution/issues)\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feliasnogueira%2Fappium-parallel-execution","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feliasnogueira%2Fappium-parallel-execution","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feliasnogueira%2Fappium-parallel-execution/lists"}