├── .github ├── dependabot.yml └── workflows │ ├── buildInCI.yml │ └── super-linter.yml ├── .gitignore ├── License.md ├── README.md ├── package-lock.json ├── package.json ├── pom.xml ├── setupAndroidSDK.sh ├── setup_linux.sh └── src └── test ├── java └── com │ └── eot │ ├── sample │ ├── Hooks.java │ ├── android │ │ ├── AppiumNativeAndroidMessagesTest.java │ │ ├── AppiumNativeAndroidParallelCalcTest.java │ │ ├── AppiumWebAndroidHelloWorldTest.java │ │ └── FirstAppiumTest.java │ └── ios │ │ ├── AppiumNativeiOSHelloWorldTest.java │ │ └── AppiumWebiOSHelloWorldTest.java │ └── utils │ ├── CommandPrompt.java │ ├── DriverUtils.java │ └── Wait.java └── resources ├── sampleApps ├── AndroidCalculator.apk ├── HelloWorldiOS.app │ ├── Assets.car │ ├── Base.lproj │ │ ├── LaunchScreen.storyboardc │ │ │ ├── 01J-lp-oVM-view-Ze5-6b-2t3.nib │ │ │ │ ├── objects-13.0+.nib │ │ │ │ └── runtime.nib │ │ │ ├── Info.plist │ │ │ └── UIViewController-01J-lp-oVM.nib │ │ │ │ ├── objects-13.0+.nib │ │ │ │ └── runtime.nib │ │ └── Main.storyboardc │ │ │ ├── BYZ-38-t0r-view-8bC-Xf-vdC.nib │ │ │ ├── objects-13.0+.nib │ │ │ └── runtime.nib │ │ │ ├── Info.plist │ │ │ └── UIViewController-BYZ-38-t0r.nib │ │ │ ├── objects-13.0+.nib │ │ │ └── runtime.nib │ ├── Frameworks │ │ ├── XCTAutomationSupport.framework │ │ │ ├── Info.plist │ │ │ ├── XCTAutomationSupport │ │ │ ├── _CodeSignature │ │ │ │ └── CodeResources │ │ │ └── version.plist │ │ ├── XCTest.framework │ │ │ ├── Info.plist │ │ │ ├── XCTest │ │ │ ├── _CodeSignature │ │ │ │ └── CodeResources │ │ │ ├── en.lproj │ │ │ │ └── InfoPlist.strings │ │ │ └── version.plist │ │ ├── libXCTestBundleInject.dylib │ │ └── libXCTestSwiftSupport.dylib │ ├── HelloWorldiOS │ ├── Info.plist │ ├── PkgInfo │ ├── PlugIns │ │ └── EyesImagesTests(UnitTests).xctest │ │ │ ├── EyesImagesTests(UnitTests) │ │ │ ├── Frameworks │ │ │ ├── EyesImages.framework │ │ │ │ ├── .gitkeep │ │ │ │ ├── .travis.yml │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── EyesImages │ │ │ │ ├── Gemfile │ │ │ │ ├── Info.plist │ │ │ │ ├── _CodeSignature │ │ │ │ │ └── CodeResources │ │ │ │ ├── build_sdk.sh │ │ │ │ ├── carthage_dependencies_json.thor │ │ │ │ ├── carthage_dependencies_json.tt │ │ │ │ ├── podspec.thor │ │ │ │ ├── podspec.tt │ │ │ │ ├── set_tags.sh │ │ │ │ ├── update_carthage_integration.sh │ │ │ │ └── update_version_on_cocoapods.sh │ │ │ ├── libswiftCore.dylib │ │ │ ├── libswiftCoreFoundation.dylib │ │ │ ├── libswiftCoreGraphics.dylib │ │ │ ├── libswiftDarwin.dylib │ │ │ ├── libswiftDispatch.dylib │ │ │ ├── libswiftFoundation.dylib │ │ │ └── libswiftObjectiveC.dylib │ │ │ ├── Info.plist │ │ │ └── _CodeSignature │ │ │ └── CodeResources │ ├── README.md │ └── _CodeSignature │ │ └── CodeResources ├── TheApp-VR-v1.apk ├── VodQAReactNative.zip └── eyes-ios-hello-world.zip └── testng.xml /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "maven" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "daily" 12 | -------------------------------------------------------------------------------- /.github/workflows/buildInCI.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: Java CI with Maven 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v2 19 | - name: Set up JDK 8 20 | uses: actions/setup-java@v2 21 | with: 22 | java-version: '8' 23 | distribution: 'temurin' 24 | cache: maven 25 | - name: Build with Maven 26 | run: mvn -B package --file pom.xml -DskipTests=true 27 | -------------------------------------------------------------------------------- /.github/workflows/super-linter.yml: -------------------------------------------------------------------------------- 1 | # This workflow executes several linters on changed files based on languages used in your code base whenever 2 | # you push a code or open a pull request. 3 | # 4 | # You can adjust the behavior by modifying this file. 5 | # For more information, see: 6 | # https://github.com/github/super-linter 7 | name: Lint Code Base 8 | 9 | on: 10 | push: 11 | branches: [ master ] 12 | pull_request: 13 | branches: [ master ] 14 | jobs: 15 | run-lint: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Checkout code 19 | uses: actions/checkout@v2 20 | with: 21 | # Full git history is needed to get a proper list of changed files within `super-linter` 22 | fetch-depth: 0 23 | 24 | - name: Lint Code Base 25 | uses: github/super-linter@v4 26 | env: 27 | VALIDATE_ALL_CODEBASE: false 28 | DEFAULT_BRANCH: master 29 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | target/ 4 | *.apk 5 | temp 6 | node_modules 7 | **/*/.DS_STORE -------------------------------------------------------------------------------- /License.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2021 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AppiumJavaSample 2 | Sample project for running tests using Java/TestNG/Appium 3 | 4 | ## Setting up your machine 5 | ### Prerequisites before running the script for Appium setup 6 | * Set `JAVA_HOME` as an environment variable 7 | 8 | * Set `ANDROID_HOME` as an environment variable - pointing to the directory where Android SDK should be setup 9 | 10 | * Execute the following scripts to setup your Mac [setupAndroidSDK.sh](setupAndroidSDK.sh) or Ubuntu [setup_linux.sh](setup_linux.sh) machine automatically 11 | > The above script will install all dependencies required for implementing / running tests on Android devices. To do the setup for iOS devices, run `appium-doctor` and see the list of dependencies that are missing, and install the same. 12 | 13 | > You may be prompted for password or confirmations along the way 14 | 15 | ## Running the tests 16 | ### Prerequisites: 17 | * Start appium server manually (and update the url/port if not using the default) 18 | * Have devices connected / emulators started. Accordingly, update the (.*Test.java) test file with the relevant information about the devices 19 | * The device should have the Calculator app 20 | 21 | ### Tests 22 | This project includes the following tests implemented for Android & iOS devices: 23 | 24 | #### Android 25 | * [AppiumNativeAndroidMessagesTest.java](src/test/java/com/eot/sample/android/AppiumNativeAndroidMessagesTest.java) - run an Appium test against the Messages app 26 | * [AppiumNativeAndroidParallelCalcTest.java](src/test/java/com/eot/sample/android/AppiumNativeAndroidParallelCalcTest.java) - run 2 Appium tests, in parallel, using testng 27 | * [AppiumWebAndroidHelloWorldTest.java](src/test/java/com/eot/sample/android/AppiumWebAndroidHelloWorldTest.java) - runs an appium test against a Chrome browser (mobile-web) in the connected device 28 | 29 | #### iOS 30 | * [AppiumNativeiOSHelloWorldTest.java](src/test/java/com/eot/sample/ios/AppiumNativeiOSHelloWorldTest.java) - run an Appium test against the Messages app 31 | * [AppiumWebiOSHelloWorldTest.java](src/test/java/com/eot/sample/ios/AppiumWebiOSHelloWorldTest.java) - run 2 Appium tests, in parallel, using testng 32 | 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MyJioTestAutomation", 3 | "version": "0.0.1", 4 | "main": "index.js", 5 | "dependencies": { 6 | "appium-idb": "1.8.9", 7 | "@appium/doctor": "2.0.28", 8 | "@appium/relaxed-caps-plugin": "1.0.5", 9 | "appium": "2.2.2", 10 | "appium-dashboard": "2.0.2", 11 | "appium-device-farm": "8.3.16", 12 | "appium-uiautomator2-driver": "2.34.1", 13 | "appium-xcuitest-driver": "5.9.1", 14 | "go-ios": "1.0.120", 15 | "appium-webdriveragent": "5.14.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | AppiumSample 8 | AppiumSample 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | 14 | 15 | org.apache.maven.plugins 16 | maven-compiler-plugin 17 | 3.10.1 18 | 19 | 1.8 20 | 1.8 21 | 22 | 23 | 24 | 25 | org.apache.maven.plugins 26 | maven-surefire-plugin 27 | 2.22.2 28 | 29 | 30 | *.java 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | io.appium 44 | java-client 45 | 8.3.0 46 | 47 | 48 | org.testng 49 | testng 50 | 7.7.1 51 | 52 | 53 | io.github.bonigarcia 54 | webdrivermanager 55 | 5.3.2 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /setupAndroidSDK.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | 5 | arch_name="$(uname -m)" 6 | IMAGE_SUFFIX="arm64-v8a" 7 | 8 | if [ "${arch_name}" = "x86_64" ]; then 9 | IMAGE_SUFFIX="x86_64" 10 | if [ "$(sysctl -in sysctl.proc_translated)" = "1" ]; then 11 | echo "Running on Rosetta 2" 12 | else 13 | echo "Running on native Intel" 14 | fi 15 | elif [ "${arch_name}" = "arm64" ]; then 16 | echo "Running on ARM" 17 | else 18 | echo "Unknown architecture: ${arch_name}" 19 | fi 20 | 21 | function brewCaskInstall() { 22 | echo "Installing $1" 23 | echo "On platform: $arch_name" 24 | if "brew ls --versions $1" >/dev/null; then 25 | echo "- $1 already installed" 26 | else 27 | if [ "${arch_name}" = "arm64" ]; then 28 | "arch -arm64 brew install --cask $1" 29 | else 30 | "brew install --cask $1" 31 | fi 32 | fi 33 | } 34 | 35 | function brewInstall() { 36 | echo "Installing $1" 37 | echo "On platform: $arch_name" 38 | if brew ls --versions "$1" >/dev/null; then 39 | echo "- $1 already installed" 40 | else 41 | if [ "${arch_name}" = "arm64" ]; then 42 | arch -arm64 brew install "$1" 43 | else 44 | brew install "$1" 45 | fi 46 | fi 47 | } 48 | 49 | CURRENT_DIR=$("pwd") 50 | echo "============================================================" 51 | echo "Prerequisites: Install JDK and set JAVA_HOME environment variable. Also set ANDROID_HOME environment variable pointing to a directory where Android SDK should be installed" 52 | echo "============================================================" 53 | 54 | echo "CURRENT_DIR - $CURRENT_DIR" 55 | echo "JAVA_HOME - $JAVA_HOME" 56 | echo "ANDROID_HOME - $ANDROID_HOME" 57 | echo "On platform: $arch_name" 58 | echo "============================================================" 59 | 60 | [ -z "$JAVA_HOME" ] && echo "JAVA_HOME is NOT SET AS AN ENVIRONMENT VARIABLE. Set it first then rerun the script" && exit 1 61 | [ -z "$ANDROID_HOME" ] && echo "ANDROID_HOME is NOT SET AS AN ENVIRONMENT VARIABLE. Set it first then rerun the script" && exit 1 62 | 63 | brewInstall node 64 | brewInstall coreutils 65 | brewInstall wget 66 | brewInstall cmake 67 | brewInstall carthage 68 | brewInstall ruby 69 | brewInstall ffmpeg 70 | brewInstall mp4box 71 | brewInstall ideviceinstaller 72 | brewInstall libimobiledevice 73 | brew tap lyft/formulae 74 | brewInstall lyft/formulae/set-simulator-location 75 | brew tap wix/brew 76 | brewInstall applesimutils 77 | brewInstall gstreamer 78 | brewInstall gst-plugins-base 79 | brewInstall gst-plugins-good 80 | brewInstall gst-plugins-bad 81 | brewInstall gst-plugins-ugly 82 | brewInstall gst-libav 83 | 84 | if ! [ -d "$ANDROID_HOME" ]; then 85 | mkdir -pv ./temp 86 | DOWNLOADED_ZIP="./temp/tools.zip" 87 | echo "ANDROID_HOME ($ANDROID_HOME) directory NOT present. Setting it up now" 88 | mkdir -pv "$ANDROID_HOME" 89 | chmod 777 "$ANDROID_HOME" 90 | echo "Downloading android sdk" 91 | rm -f "$DOWNLOADED_ZIP" 2>/dev/null 92 | wget https://dl.google.com/android/repository/commandlinetools-mac-10406996_latest.zip -O $DOWNLOADED_ZIP 93 | unzip "$DOWNLOADED_ZIP" -d "$ANDROID_HOME" 94 | sleep 5 95 | else 96 | echo "ANDROID_HOME ($ANDROID_HOME) directory present. already set. IF YOU WANT TO REINSTALL, delete directory - $ANDROID_HOME and run the ./setup_mac.sh script again" 97 | fi 98 | 99 | echo "Setup android sdk" 100 | cd "$ANDROID_HOME/cmdline-tools/bin" 101 | pwd 102 | 103 | BUILD_TOOLS_VERSION=34.0.0 104 | BUILD_TOOLS_MINI_VERSION=34 105 | pwd 106 | ./sdkmanager --sdk_root="$ANDROID_HOME" "emulator" "build-tools;$BUILD_TOOLS_VERSION" 107 | 108 | echo "Install Android sdk packages and system images to allow creating emulators" 109 | ./sdkmanager --sdk_root="$ANDROID_HOME" "platform-tools" "platforms;android-$BUILD_TOOLS_MINI_VERSION" "sources;android-$BUILD_TOOLS_MINI_VERSION" "system-images;android-$BUILD_TOOLS_MINI_VERSION;google_apis_playstore;$IMAGE_SUFFIX" 110 | # if [ "${arch_name}" = "arm64" ]; then 111 | # ./sdkmanager --sdk_root="$ANDROID_HOME" "platform-tools" "platforms;android-$BUILD_TOOLS_MINI_VERSION" "sources;android-$BUILD_TOOLS_MINI_VERSION" "system-images;android-$BUILD_TOOLS_MINI_VERSION;google_apis_playstore;arm64-v8a" 112 | # else 113 | # ./sdkmanager --sdk_root="$ANDROID_HOME" "platform-tools" "platforms;android-$BUILD_TOOLS_MINI_VERSION" "sources;android-$BUILD_TOOLS_MINI_VERSION" "system-images;android-$BUILD_TOOLS_MINI_VERSION;google_apis_playstore;x86_64" 114 | # fi 115 | 116 | sleep 5 117 | echo "Done installing Android SDK in $ANDROID_HOME" 118 | 119 | if ! [ -d "$ANDROID_HOME/bundle-tool" ]; then 120 | echo "Setup bundletool" 121 | cd "$ANDROID_HOME" 122 | mkdir -pv bundle-tool 123 | cd bundle-tool 124 | wget https://github.com/google/bundletool/releases/download/1.15.6/bundletool-all-1.15.6.jar -O bundletool.jar 125 | chmod +x bundletool.jar 126 | else 127 | echo "$ANDROID_HOME/bundle-tool already setup" 128 | fi 129 | 130 | cd "$CURRENT_DIR" 131 | pwd 132 | echo "Installed node version" 133 | node -v 134 | 135 | ./cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME --list_installed 136 | 137 | echo "PLEASE ENSURE" 138 | echo "-- ANDROID_HOME is set to $ANDROID_HOME" 139 | echo "-- Update PATH:" 140 | echo "---- 'export PATH=\$PATH:\$ANDROID_HOME/build-tools/$BUILD_TOOLS_VERSION:\$ANDROID_HOME/bundle-tools:\$ANDROID_HOME/cmdline-tools\latest\bin:\$ANDROID_HOME/emulator:\$ANDROID_HOME/platform-tools:\$ANDROID_HOME/tools:\$ANDROID_HOME/tools/bin'" 141 | pwd 142 | -------------------------------------------------------------------------------- /setup_linux.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | function aptGet () { 5 | echo "Installing $1" 6 | sudo apt-get install $1 7 | } 8 | 9 | CURRENT_DIR=`pwd` 10 | echo "CURRENT_DIR - " $CURRENT_DIR 11 | echo "ANDROID_HOME - " $ANDROID_HOME 12 | 13 | [ -z "$JAVA_HOME" ] && echo "JAVA_HOME is NOT SET AS AN ENVIRONMENT VARIABLE. Set it first then rerun the script" && exit 1; 14 | 15 | aptGet node 16 | aptGet wget 17 | aptGet ruby 18 | aptGet ffmpeg 19 | aptGet cmake 20 | aptGet ideviceinstaller 21 | 22 | if ! [ -d "$ANDROID_HOME" ] ; then 23 | mkdir -pv ./temp 24 | DOWNLOADED_ZIP="./temp/tools.zip" 25 | echo "ANDROID_HOME ($ANDROID_HOME) directory NOT present. Setting it up now" 26 | sudo mkdir -pv $ANDROID_HOME 27 | sudo chmod 777 $ANDROID_HOME 28 | echo "Downloading android sdk" 29 | rm -f $DOWNLOADED_ZIP 2> /dev/null 30 | wget https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip -O $DOWNLOADED_ZIP 31 | unzip $DOWNLOADED_ZIP -d $ANDROID_HOME 32 | sleep 5 33 | else 34 | echo "ANDROID_HOME ($ANDROID_HOME) directory present. already set. IF YOU WANT TO REINSTALL, delete directory - $ANDROID_HOME and run the ./setup_linux.sh script again" 35 | fi 36 | 37 | echo "Setup android sdk" 38 | cd $ANDROID_HOME/tools/bin 39 | pwd 40 | 41 | echo "Installing ./sdkmanager tools platform-tools platforms;android-31 build-tools;31.0.0" 42 | pwd 43 | touch ~/.android/repositories.cfg 44 | ./sdkmanager "tools" "platform-tools" "platforms;android-31" "build-tools;31.0.0" 45 | 46 | sleep 5 47 | echo "Done installing android sdk" 48 | 49 | if ! [ -d "$ANDROID_HOME/bundle-tool" ] ; then 50 | echo "Setup bundletool" 51 | cd $ANDROID_HOME 52 | mkdir -pv bundle-tool 53 | cd bundle-tool 54 | wget https://github.com/google/bundletool/releases/download/0.9.0/bundletool-all-0.9.0.jar -O bundletool.jar 55 | chmod +x bundletool.jar 56 | else 57 | echo "$ANDROID_HOME/bundle-tool already setup" 58 | fi 59 | 60 | cd $CURRENT_DIR 61 | pwd 62 | echo "Installed node version" 63 | node -v 64 | echo "Install opencv4nodejs" 65 | npm install -g --save opencv4nodejs 66 | echo "Install mjpeg-consumer" 67 | npm install -g mjpeg-consumer 68 | echo "Install node modules - appium" 69 | npm install -g appium 70 | sleep 5 71 | echo "Install node modules - appium-doctor" 72 | npm install -g appium-doctor 73 | sleep 5 74 | echo "Run appium-doctor" 75 | appium-doctor 76 | 77 | echo "PLEASE ENSURE" 78 | echo "-- ANDROID_HOME is set to $ANDROID_HOME" 79 | echo "-- Update PATH:" 80 | echo "---- 'export PATH=\$PATH:\$ANDROID_HOME/platform-tools:\$ANDROID_HOME/tools:\$ANDROID_HOME/tools/bin:\$ANDROID_HOME/bundle-tool'" 81 | pwd 82 | -------------------------------------------------------------------------------- /src/test/java/com/eot/sample/Hooks.java: -------------------------------------------------------------------------------- 1 | package com.eot.sample; 2 | 3 | import io.appium.java_client.service.local.AppiumDriverLocalService; 4 | import io.appium.java_client.service.local.AppiumServiceBuilder; 5 | import io.appium.java_client.service.local.flags.GeneralServerFlag; 6 | 7 | import java.io.File; 8 | import java.net.URL; 9 | 10 | public class Hooks { 11 | private static AppiumDriverLocalService localAppiumServer; 12 | private static String APPIUM_SERVER_URL = "http://localhost:4723/wd/hub/"; 13 | 14 | public static void startAppiumServer() { 15 | System.out.println(String.format("Start local Appium server")); 16 | AppiumServiceBuilder serviceBuilder = new AppiumServiceBuilder(); 17 | // Use any port, in case the default 4723 is already taken (maybe by another Appium server) 18 | serviceBuilder.usingAnyFreePort(); 19 | serviceBuilder.withAppiumJS(new File("./node_modules/appium/build/lib/main.js")); 20 | serviceBuilder.withLogFile(new File("./target/appium_logs.txt")); 21 | serviceBuilder.withArgument(GeneralServerFlag.ALLOW_INSECURE, "adb_shell"); 22 | serviceBuilder.withArgument(GeneralServerFlag.RELAXED_SECURITY); 23 | 24 | // Appium 1.x 25 | localAppiumServer = AppiumDriverLocalService.buildService(serviceBuilder) 26 | .withBasePath("/wd/hub/"); 27 | 28 | // Appium 2.x 29 | // localAppiumServer = AppiumDriverLocalService.buildService(serviceBuilder); 30 | 31 | localAppiumServer.start(); 32 | APPIUM_SERVER_URL = localAppiumServer.getUrl().toString(); 33 | System.out.println(String.format("Appium server started on url: '%s'", 34 | localAppiumServer.getUrl().toString())); 35 | } 36 | 37 | public static void stopAppiumServer() { 38 | if (null != localAppiumServer) { 39 | System.out.println(String.format("Stopping the local Appium server running on: '%s'", 40 | localAppiumServer.getUrl() 41 | .toString())); 42 | localAppiumServer.stop(); 43 | System.out.println("Is Appium server running? " + localAppiumServer.isRunning()); 44 | } 45 | } 46 | 47 | public static URL getAppiumServerUrl() { 48 | System.out.println("Appium server url: " + localAppiumServer.getUrl()); 49 | return localAppiumServer.getUrl(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/test/java/com/eot/sample/android/AppiumNativeAndroidMessagesTest.java: -------------------------------------------------------------------------------- 1 | package com.eot.sample.android; 2 | 3 | import com.eot.utils.Wait; 4 | import io.appium.java_client.AppiumDriver; 5 | import io.appium.java_client.android.options.UiAutomator2Options; 6 | import io.appium.java_client.remote.MobileCapabilityType; 7 | import org.openqa.selenium.By; 8 | import org.openqa.selenium.WebElement; 9 | import org.testng.ITestResult; 10 | import org.testng.annotations.*; 11 | 12 | import java.io.File; 13 | import java.lang.reflect.Method; 14 | import java.net.URL; 15 | import java.util.Date; 16 | 17 | import static com.eot.sample.Hooks.*; 18 | 19 | public class AppiumNativeAndroidMessagesTest { 20 | 21 | private AppiumDriver driver; 22 | 23 | @BeforeSuite 24 | public void beforeAll() { 25 | startAppiumServer(); 26 | } 27 | 28 | @AfterSuite 29 | public void afterAll() { 30 | stopAppiumServer(); 31 | } 32 | 33 | @BeforeMethod 34 | public void beforeMethod(Method method) { 35 | String methodName = method.getName(); 36 | String udid = "emulator-5554"; 37 | log(String.format("Running test '%s' on '%s'", methodName, udid)); 38 | driver = createAppiumDriver(udid); 39 | handleUpgradePopup(); 40 | } 41 | 42 | private void handleUpgradePopup() { 43 | Wait.waitFor(1); 44 | WebElement upgradeAppNotificationElement = driver.findElement(By.id("android:id/button1")); 45 | if (null != upgradeAppNotificationElement) { 46 | upgradeAppNotificationElement.click(); 47 | Wait.waitFor(1); 48 | } 49 | WebElement gotItElement = driver.findElement(By.id("com.android2.calculator3:id/cling_dismiss")); 50 | if (null != gotItElement) { 51 | gotItElement.click(); 52 | Wait.waitFor(1); 53 | } 54 | } 55 | 56 | @AfterMethod 57 | public void afterMethod(ITestResult result) { 58 | if (null != driver) { 59 | log("Close the driver"); 60 | driver.quit(); 61 | } 62 | } 63 | 64 | @Test 65 | public void runMessagesTest() { 66 | int p1 = 3; 67 | int p2 = 5; 68 | driver.findElement(By.id("digit" + p1)) 69 | .click(); 70 | driver.findElement(By.id("plus")) 71 | .click(); 72 | driver.findElement(By.id("digit" + p2)) 73 | .click(); 74 | driver.findElement(By.id("equal")) 75 | .click(); 76 | } 77 | 78 | private void log(String message) { 79 | System.out.println(" ### " + new Date() + " ### " + message); 80 | } 81 | 82 | private AppiumDriver createAppiumDriver(String udid) { 83 | log(String.format("Create AppiumDriver with appium server with device udid - '%s'", udid)); 84 | 85 | // Appium 1.x 86 | // DesiredCapabilities capabilities = new DesiredCapabilities(); 87 | 88 | // Appium 2.x 89 | UiAutomator2Options capabilities = new UiAutomator2Options(); 90 | 91 | capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2"); 92 | capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android"); 93 | capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); 94 | capabilities.setCapability("autoGrantPermissions", 95 | true); 96 | capabilities.setCapability("app", 97 | new File("./src/test/resources/sampleApps/AndroidCalculator.apk").getAbsolutePath()); 98 | capabilities.setCapability(MobileCapabilityType.FULL_RESET, true); 99 | URL appiumServerUrl = getAppiumServerUrl(); 100 | AppiumDriver appiumDriver = new AppiumDriver(appiumServerUrl, capabilities); 101 | log(String.format("Created AppiumDriver for - %s, appiumPort - %s", udid, appiumServerUrl)); 102 | return appiumDriver; 103 | } 104 | } -------------------------------------------------------------------------------- /src/test/java/com/eot/sample/android/AppiumNativeAndroidParallelCalcTest.java: -------------------------------------------------------------------------------- 1 | package com.eot.sample.android; 2 | 3 | import io.appium.java_client.AppiumDriver; 4 | import io.appium.java_client.android.options.UiAutomator2Options; 5 | import io.appium.java_client.remote.MobileCapabilityType; 6 | import org.openqa.selenium.By; 7 | import org.testng.ITestResult; 8 | import org.testng.annotations.*; 9 | 10 | import java.lang.reflect.Method; 11 | import java.net.URL; 12 | import java.util.Date; 13 | import java.util.HashMap; 14 | 15 | import static com.eot.sample.Hooks.*; 16 | 17 | public class AppiumNativeAndroidParallelCalcTest { 18 | 19 | private final HashMap drivers = new HashMap<>(); 20 | 21 | @DataProvider(name = "device-provider", parallel = true) 22 | public Object[][] provide() { 23 | return new Object[][]{{"emulator-5554", 2, 5}, {"emulator-5556", 3, 6}}; 24 | } 25 | 26 | @BeforeSuite 27 | public void beforeAll() { 28 | startAppiumServer(); 29 | } 30 | 31 | @AfterSuite 32 | public void afterAll() { 33 | stopAppiumServer(); 34 | } 35 | 36 | @BeforeMethod 37 | public void beforeMethod(Object[] testArgs) { 38 | String methodName = ((Method) testArgs[0]).getName(); 39 | String udid = (String) testArgs[2]; 40 | log(String.format("Running test '%s' on '%s'", methodName, udid)); 41 | 42 | log(String.format("Create AppiumDriver for - %s:%s", udid)); 43 | AppiumDriver driver = createAppiumDriver(getAppiumServerUrl(), udid); 44 | drivers.put(udid, driver); 45 | log(String.format("Created AppiumDriver for - %s:%s", udid)); 46 | } 47 | 48 | @AfterMethod 49 | public void afterMethod(Object[] testArgs) { 50 | log(testArgs.toString()); 51 | String methodName = ((Method) testArgs[0]).getName(); 52 | ITestResult result = ((ITestResult) testArgs[1]); 53 | log(String.format("Test '%s' result: '%s'", methodName, result.toString())); 54 | String udid = (String) testArgs[2]; 55 | Integer systemPort = (Integer) testArgs[3]; 56 | 57 | AppiumDriver driver = drivers.get(udid); 58 | 59 | try { 60 | if (null != driver) { 61 | driver.quit(); 62 | } 63 | 64 | log(String.format("Visual Validation Results for - %s:%s", udid, systemPort)); 65 | } catch (Exception e) { 66 | log("Exception - " + e.getMessage()); 67 | e.printStackTrace(); 68 | } finally { 69 | } 70 | } 71 | 72 | @Test(dataProvider = "device-provider", threadPoolSize = 2) 73 | public void runTest(Method method, ITestResult testResult, String udid, int num1, int num2) { 74 | log(String.format("Runnng test on %s:%s, appiumPort - ", udid)); 75 | log(String.format("drivers.size()=%d", drivers.size())); 76 | AppiumDriver driver = drivers.get(udid); 77 | try { 78 | driver.findElement(By.id("digit_" + num1)) 79 | .click(); 80 | driver.findElement(By.id("op_add")) 81 | .click(); 82 | driver.findElement(By.id("digit_" + num2)) 83 | .click(); 84 | } catch (Exception e) { 85 | log(e.toString()); 86 | } finally { 87 | if (null != driver) { 88 | driver.quit(); 89 | } 90 | } 91 | } 92 | 93 | private void log(String message) { 94 | System.out.println(" ### " + new Date() + " ### " + message); 95 | } 96 | 97 | private AppiumDriver createAppiumDriver(URL appiumServerUrl, String udid) { 98 | // Appium 1.x 99 | // DesiredCapabilities capabilities = new DesiredCapabilities(); 100 | 101 | // Appium 2.x 102 | UiAutomator2Options capabilities = new UiAutomator2Options(); 103 | 104 | capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2"); 105 | capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); 106 | capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); 107 | capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "11"); 108 | capabilities.setCapability(MobileCapabilityType.UDID, udid); 109 | capabilities.setCapability("app", "src/test/resources/sampleApps/AndroidCalculator.apk"); 110 | capabilities.setCapability(MobileCapabilityType.NO_RESET, false); 111 | capabilities.setCapability(MobileCapabilityType.FULL_RESET, false); 112 | return new AppiumDriver(appiumServerUrl, capabilities); 113 | } 114 | } -------------------------------------------------------------------------------- /src/test/java/com/eot/sample/android/AppiumWebAndroidHelloWorldTest.java: -------------------------------------------------------------------------------- 1 | package com.eot.sample.android; 2 | 3 | import com.eot.utils.DriverUtils; 4 | import io.appium.java_client.AppiumDriver; 5 | import io.appium.java_client.android.options.UiAutomator2Options; 6 | import io.appium.java_client.remote.MobileCapabilityType; 7 | import org.openqa.selenium.By; 8 | import org.testng.ITestResult; 9 | import org.testng.annotations.*; 10 | 11 | import java.lang.reflect.Method; 12 | import java.time.Duration; 13 | import java.util.Date; 14 | 15 | import static com.eot.sample.Hooks.*; 16 | 17 | public class AppiumWebAndroidHelloWorldTest { 18 | private AppiumDriver driver; 19 | 20 | @BeforeSuite 21 | public void beforeAll() { 22 | startAppiumServer(); 23 | } 24 | 25 | @AfterSuite 26 | public void afterAll() { 27 | stopAppiumServer(); 28 | } 29 | 30 | @BeforeMethod 31 | public void beforeMethod(Method method) { 32 | DriverUtils.setChromeDriverForConnectedDevice(); 33 | driver = setupMobileWeb(); 34 | } 35 | 36 | @AfterMethod 37 | public void afterMethod(ITestResult result) { 38 | if (null != driver) { 39 | System.out.println("Close the driver"); 40 | driver.quit(); 41 | } 42 | } 43 | 44 | @Test() 45 | public void appiumWebTest() throws 46 | InterruptedException { 47 | System.out.println("Start time: " + new Date()); 48 | driver.get("https://applitools.com/helloworld"); 49 | for (int stepNumber = 0; stepNumber < 5; stepNumber++) { 50 | driver.findElement(By.linkText("?diff1")) 51 | .click(); 52 | Thread.sleep(1000); 53 | } 54 | 55 | driver.findElement(By.tagName("button")) 56 | .click(); 57 | System.out.println("End time: " + new Date()); 58 | } 59 | 60 | private AppiumDriver setupMobileWeb() { 61 | // Appium 1.x 62 | // DesiredCapabilities capabilities = new DesiredCapabilities(); 63 | 64 | // Appium 2.x 65 | UiAutomator2Options capabilities = new UiAutomator2Options(); 66 | 67 | capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); 68 | capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "11"); 69 | capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android"); 70 | capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2"); 71 | capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome"); 72 | capabilities.setCapability("chromedriverExecutable", System.getProperty("webdriver.chrome.driver")); 73 | 74 | // Open browser. 75 | AppiumDriver driver = null; 76 | driver = new AppiumDriver(getAppiumServerUrl(), capabilities); 77 | driver.manage() 78 | .timeouts() 79 | .implicitlyWait(Duration.ofSeconds(60)); 80 | return driver; 81 | } 82 | } -------------------------------------------------------------------------------- /src/test/java/com/eot/sample/android/FirstAppiumTest.java: -------------------------------------------------------------------------------- 1 | package com.eot.sample.android; 2 | 3 | import com.eot.sample.Hooks; 4 | import io.appium.java_client.AppiumBy; 5 | import io.appium.java_client.AppiumDriver; 6 | import io.appium.java_client.android.options.UiAutomator2Options; 7 | import io.appium.java_client.remote.AndroidMobileCapabilityType; 8 | import io.appium.java_client.remote.MobileCapabilityType; 9 | import org.openqa.selenium.By; 10 | import org.testng.annotations.Test; 11 | 12 | public class FirstAppiumTest 13 | extends Hooks { 14 | private AppiumDriver driver; 15 | 16 | @Test 17 | public void runMessagesTest() { 18 | // 1. Create a AppiumDriver 19 | // 1.1 Set the capabilities of the driver 20 | 21 | // Appium 1.x 22 | // DesiredCapabilities capabilities = new DesiredCapabilities(); 23 | 24 | // Appium 2.x 25 | UiAutomator2Options capabilities = new UiAutomator2Options(); 26 | 27 | capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, 28 | "UiAutomator2"); 29 | capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, 30 | "Android"); 31 | capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, 32 | "Android"); 33 | capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, 34 | "12"); 35 | capabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, 36 | "com.google.android.apps.messaging"); 37 | capabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, 38 | "com.google.android.apps.messaging.ui.ConversationListActivity"); 39 | capabilities.setCapability(MobileCapabilityType.NO_RESET, 40 | false); 41 | capabilities.setCapability(MobileCapabilityType.FULL_RESET, 42 | false); 43 | driver = new AppiumDriver(getAppiumServerUrl(), 44 | capabilities); 45 | System.out.println("Created AppiumDriver"); 46 | 47 | // 2. Orchestrate the test scenario 48 | try { 49 | driver.findElement(By.id("com.google.android.apps.messaging:id/conversation_list_google_tos_popup_positive_button")) 50 | .click(); 51 | driver.findElement(By.id("android:id/button2")) 52 | .click(); 53 | driver.findElement(By.id("android:id/button1")) 54 | .click(); 55 | } catch (Exception e) { 56 | System.out.println("Agree button not seen"); 57 | } 58 | driver.findElement(AppiumBy.accessibilityId("Start chat")) 59 | .click(); 60 | driver.findElement(AppiumBy.accessibilityId("Switch between entering text and numbers")) 61 | .click(); 62 | driver.findElement(AppiumBy.accessibilityId("com.google.android.apps.messaging:id/recipient_text_view")) 63 | .sendKeys("anand"); 64 | waitFor(5); 65 | if (null != driver) { 66 | System.out.println("Close the driver"); 67 | driver.quit(); 68 | } 69 | } 70 | 71 | private void waitFor(int numberOfSeconds) { 72 | try { 73 | System.out.println("Sleep for " + numberOfSeconds); 74 | Thread.sleep(numberOfSeconds * 1000); 75 | } catch (InterruptedException e) { 76 | e.printStackTrace(); 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/test/java/com/eot/sample/ios/AppiumNativeiOSHelloWorldTest.java: -------------------------------------------------------------------------------- 1 | package com.eot.sample.ios; 2 | 3 | import io.appium.java_client.AppiumBy; 4 | import io.appium.java_client.AppiumDriver; 5 | import io.appium.java_client.ios.options.XCUITestOptions; 6 | import io.appium.java_client.remote.MobileCapabilityType; 7 | import org.openqa.selenium.By; 8 | import org.testng.ITestResult; 9 | import org.testng.annotations.*; 10 | 11 | import java.lang.reflect.Method; 12 | 13 | import static com.eot.sample.Hooks.*; 14 | 15 | public class AppiumNativeiOSHelloWorldTest { 16 | private static final String UDID = "7B0FA5D8-1926-4461-A313-243BCE78A6CE"; 17 | private static final String DEVICE_NAME = "iPhone 14 Pro"; 18 | private static final String PLATFORM_VERSION = "16.2"; 19 | private AppiumDriver driver; 20 | 21 | @BeforeSuite 22 | public void beforeAll() { 23 | startAppiumServer(); 24 | } 25 | 26 | @AfterSuite 27 | public void afterAll() { 28 | stopAppiumServer(); 29 | } 30 | 31 | @BeforeMethod 32 | public void beforeMethod(Method method) { 33 | driver = createAppiumDriver(); 34 | } 35 | 36 | @AfterMethod 37 | public void afterMethod(ITestResult result) { 38 | if (null != driver) { 39 | System.out.println("Close the driver"); 40 | driver.quit(); 41 | } 42 | } 43 | 44 | @Test 45 | public void runIOSNativeAppTest() { 46 | driver.findElement(AppiumBy.accessibilityId("Make the number below random.")) 47 | .click(); 48 | driver.findElement(AppiumBy.accessibilityId("MakeRandomNumberCheckbox")) 49 | .click(); 50 | driver.findElement(AppiumBy.accessibilityId("SimulateDiffsCheckbox")) 51 | .click(); 52 | driver.findElement(By.xpath("//XCUIElementTypeStaticText[@name=\"Click me!\"]")) 53 | .click(); 54 | } 55 | 56 | private AppiumDriver createAppiumDriver() { 57 | // Appium 1.x 58 | // DesiredCapabilities dc = new DesiredCapabilities(); 59 | 60 | // Appium 2.x 61 | XCUITestOptions dc = new XCUITestOptions(); 62 | 63 | dc.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); 64 | dc.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest"); 65 | dc.setCapability(MobileCapabilityType.PLATFORM_VERSION, PLATFORM_VERSION); 66 | dc.setCapability(MobileCapabilityType.DEVICE_NAME, DEVICE_NAME); 67 | dc.setCapability(MobileCapabilityType.UDID, UDID); 68 | dc.setCapability("app", System.getProperty("user.dir") + "/src/test/resources/sampleApps" + 69 | "/HelloWorldiOS.app"); 70 | // dc.setCapability("app", System.getProperty("user.dir") + "/src/test/resources/sampleApps/eyes-ios-hello-world.zip"); 71 | 72 | return new AppiumDriver(getAppiumServerUrl(), dc); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/test/java/com/eot/sample/ios/AppiumWebiOSHelloWorldTest.java: -------------------------------------------------------------------------------- 1 | package com.eot.sample.ios; 2 | 3 | import io.appium.java_client.AppiumDriver; 4 | import io.appium.java_client.ios.options.XCUITestOptions; 5 | import io.appium.java_client.remote.MobileCapabilityType; 6 | import org.openqa.selenium.By; 7 | import org.testng.ITestResult; 8 | import org.testng.annotations.*; 9 | 10 | import java.lang.reflect.Method; 11 | import java.util.Date; 12 | 13 | import static com.eot.sample.Hooks.*; 14 | 15 | public class AppiumWebiOSHelloWorldTest { 16 | private static final String UDID = "F2D71DA6-ABD3-4311-A694-349FD64A5E7D"; 17 | private static final String DEVICE_NAME = "iPhone 12 Pro Max"; 18 | private static final String PLATFORM_VERSION = "14.5"; 19 | private AppiumDriver driver; 20 | 21 | @BeforeSuite 22 | public void beforeAll() { 23 | startAppiumServer(); 24 | } 25 | 26 | @AfterSuite 27 | public void afterAll() { 28 | stopAppiumServer(); 29 | } 30 | 31 | @BeforeMethod 32 | public void beforeMethod(Method method) { 33 | driver = createAppiumDriver(); 34 | } 35 | 36 | @AfterMethod 37 | public void afterMethod(ITestResult result) { 38 | if (null != driver) { 39 | System.out.println("Close the driver"); 40 | driver.quit(); 41 | } 42 | } 43 | 44 | @Test 45 | public void runIOSWebTest() throws InterruptedException { 46 | System.out.println("Start time: " + new Date()); 47 | Thread.sleep(3000); 48 | driver.get("https://applitools.com/helloworld"); 49 | for (int stepNumber = 0; stepNumber < 5; stepNumber++) { 50 | driver.findElement(By.linkText("?diff1")).click(); 51 | Thread.sleep(1000); 52 | } 53 | 54 | driver.findElement(By.tagName("button")).click(); 55 | driver.quit(); 56 | 57 | System.out.println("End time: " + new Date()); 58 | } 59 | 60 | 61 | private AppiumDriver createAppiumDriver() { 62 | // Appium 1.x 63 | // DesiredCapabilities dc = new DesiredCapabilities(); 64 | 65 | // Appium 2.x 66 | XCUITestOptions dc = new XCUITestOptions(); 67 | 68 | dc.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); 69 | dc.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest"); 70 | dc.setCapability(MobileCapabilityType.PLATFORM_VERSION, PLATFORM_VERSION); 71 | dc.setCapability(MobileCapabilityType.DEVICE_NAME, DEVICE_NAME); 72 | dc.setCapability(MobileCapabilityType.UDID, UDID); 73 | dc.setCapability(MobileCapabilityType.BROWSER_NAME, "safari"); 74 | dc.setCapability(MobileCapabilityType.APP, "io.appium.SafariLauncher"); 75 | 76 | return new AppiumDriver(getAppiumServerUrl(), dc); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/test/java/com/eot/utils/CommandPrompt.java: -------------------------------------------------------------------------------- 1 | package com.eot.utils; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | import java.io.InputStreamReader; 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | public class CommandPrompt { 12 | 13 | Process p; 14 | ProcessBuilder builder; 15 | 16 | public String runCommand(String command) throws 17 | IOException { 18 | p = Runtime.getRuntime() 19 | .exec(command); 20 | // get std output 21 | BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); 22 | String line = ""; 23 | String allLine = ""; 24 | int i = 1; 25 | while((line = r.readLine()) != null) { 26 | allLine = allLine + "" + line + "\n"; 27 | if(line.contains("Console LogLevel: debug") && line.contains("Complete")) { 28 | break; 29 | } 30 | i++; 31 | } 32 | return allLine; 33 | 34 | } 35 | 36 | public BufferedReader getBufferedReader(String command) throws 37 | IOException { 38 | List commands = new ArrayList<>(); 39 | commands.add("/bin/sh"); 40 | commands.add("-c"); 41 | commands.add(command); 42 | ProcessBuilder builder = new ProcessBuilder(commands); 43 | Map environ = builder.environment(); 44 | 45 | final Process process = builder.start(); 46 | InputStream is = process.getInputStream(); 47 | InputStreamReader isr = new InputStreamReader(is); 48 | return new BufferedReader(isr); 49 | } 50 | 51 | public String runCommandThruProcess(String command) throws 52 | IOException { 53 | BufferedReader br = getBufferedReader(command); 54 | String line; 55 | String allLine = ""; 56 | while((line = br.readLine()) != null) { 57 | allLine = allLine + "" + line + "\n"; 58 | } 59 | return allLine; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/test/java/com/eot/utils/DriverUtils.java: -------------------------------------------------------------------------------- 1 | package com.eot.utils; 2 | 3 | import io.github.bonigarcia.wdm.WebDriverManager; 4 | import org.apache.commons.lang3.ArrayUtils; 5 | 6 | import java.io.IOException; 7 | import java.util.ArrayList; 8 | import java.util.Arrays; 9 | 10 | public class DriverUtils { 11 | public static String setPathForChromeDriverFromMachine() { 12 | WebDriverManager.chromedriver() 13 | .setup(); 14 | String chromeDriverPath = WebDriverManager.chromedriver() 15 | .getDownloadedDriverPath(); 16 | System.out.println("ChromeDriver path: " + chromeDriverPath); 17 | System.setProperty("webdriver.chrome.driver", 18 | chromeDriverPath); 19 | return chromeDriverPath; 20 | } 21 | 22 | private static void setDriverForConnectedDevice(String browserName) { 23 | int[] versionNamesArr = getBrowserVersionsFor(browserName); 24 | if (versionNamesArr.length > 0) { 25 | int highestBrowserVersion = Arrays.stream(versionNamesArr) 26 | .max() 27 | .getAsInt(); 28 | String message = "Setting up ChromeDriver for Chrome version " + highestBrowserVersion + " on device"; 29 | System.out.println(message); 30 | switch (browserName) { 31 | case "chrome": 32 | WebDriverManager.chromedriver() 33 | .browserVersion(String.valueOf(highestBrowserVersion)) 34 | .setup(); 35 | break; 36 | case "firefox": 37 | WebDriverManager.firefoxdriver() 38 | .browserVersion(String.valueOf(highestBrowserVersion)) 39 | .setup(); 40 | break; 41 | case "safari": 42 | WebDriverManager.safaridriver() 43 | .browserVersion(String.valueOf(highestBrowserVersion)) 44 | .setup(); 45 | break; 46 | case "edge": 47 | WebDriverManager.edgedriver() 48 | .browserVersion(String.valueOf(highestBrowserVersion)) 49 | .setup(); 50 | break; 51 | } 52 | } else { 53 | throw new RuntimeException("No devices connected"); 54 | } 55 | } 56 | 57 | public static void setChromeDriverForConnectedDevice() { 58 | setDriverForConnectedDevice("chrome"); 59 | } 60 | 61 | public static void setFirefoxDriverForConnectedDevice() { 62 | setDriverForConnectedDevice("firefox"); 63 | } 64 | 65 | public static void setSafariDriverForConnectedDevice() { 66 | setDriverForConnectedDevice("safari"); 67 | } 68 | 69 | public static void setEdgeDriverForConnectedDevice() { 70 | setDriverForConnectedDevice("edge"); 71 | } 72 | 73 | private static int[] getBrowserVersionsFor(final String browserName) { 74 | ArrayList deviceUdids = getConnectedDeviceUdids(); 75 | CommandPrompt cmd = new CommandPrompt(); 76 | String resultStdOut = null; 77 | resultStdOut = getBrowserVersionsOnDevice(cmd, 78 | browserName, 79 | deviceUdids.get(0)); 80 | int[] versionNamesArr = {}; 81 | if (resultStdOut.contains("versionName=")) { 82 | String[] foundVersions = resultStdOut.split("\n"); 83 | for (String foundVersion : foundVersions) { 84 | String version = foundVersion.split("=")[1].split("\\.")[0]; 85 | String format = String.format("Found " + browserName + " version - '%s' on device", 86 | version); 87 | System.out.println(format); 88 | versionNamesArr = ArrayUtils.add(versionNamesArr, 89 | Integer.parseInt(version)); 90 | } 91 | } else { 92 | System.out.println(String.format(browserName + " not found on device")); 93 | } 94 | return versionNamesArr; 95 | } 96 | 97 | private static ArrayList getConnectedDeviceUdids() { 98 | ArrayList udids = new ArrayList<>(); 99 | CommandPrompt cmd = new CommandPrompt(); 100 | String resultStdOut = null; 101 | try { 102 | resultStdOut = cmd.runCommandThruProcess("adb devices"); 103 | String[] devices = resultStdOut.split("\n"); 104 | for (int cnt=1; cnt 2 | 3 | 4 | 5 | files 6 | 7 | Info.plist 8 | 9 | jreU5hZGNCik2Hp5uPrGZUy11X8= 10 | 11 | version.plist 12 | 13 | IBuwnssTaVoEqhVHtNTT91gSl10= 14 | 15 | 16 | files2 17 | 18 | version.plist 19 | 20 | hash 21 | 22 | IBuwnssTaVoEqhVHtNTT91gSl10= 23 | 24 | hash2 25 | 26 | JWd/ru1b6k0uNZgO60tQbs9H8n+wZ9N9P0FKdkazZ2c= 27 | 28 | 29 | 30 | rules 31 | 32 | ^.* 33 | 34 | ^.*\.lproj/ 35 | 36 | optional 37 | 38 | weight 39 | 1000 40 | 41 | ^.*\.lproj/locversion.plist$ 42 | 43 | omit 44 | 45 | weight 46 | 1100 47 | 48 | ^Base\.lproj/ 49 | 50 | weight 51 | 1010 52 | 53 | ^version.plist$ 54 | 55 | 56 | rules2 57 | 58 | .*\.dSYM($|/) 59 | 60 | weight 61 | 11 62 | 63 | ^(.*/)?\.DS_Store$ 64 | 65 | omit 66 | 67 | weight 68 | 2000 69 | 70 | ^.* 71 | 72 | ^.*\.lproj/ 73 | 74 | optional 75 | 76 | weight 77 | 1000 78 | 79 | ^.*\.lproj/locversion.plist$ 80 | 81 | omit 82 | 83 | weight 84 | 1100 85 | 86 | ^Base\.lproj/ 87 | 88 | weight 89 | 1010 90 | 91 | ^Info\.plist$ 92 | 93 | omit 94 | 95 | weight 96 | 20 97 | 98 | ^PkgInfo$ 99 | 100 | omit 101 | 102 | weight 103 | 20 104 | 105 | ^embedded\.provisionprofile$ 106 | 107 | weight 108 | 20 109 | 110 | ^version\.plist$ 111 | 112 | weight 113 | 20 114 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/XCTAutomationSupport.framework/version.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildAliasOf 6 | XCTest 7 | BuildVersion 8 | 25 9 | CFBundleShortVersionString 10 | 1.0 11 | CFBundleVersion 12 | 15509 13 | ProjectName 14 | XCTest_Sim 15 | SourceVersion 16 | 15509000000000000 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/XCTest.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/XCTest.framework/Info.plist -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/XCTest.framework/XCTest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/XCTest.framework/XCTest -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/XCTest.framework/_CodeSignature/CodeResources: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | Headers/XCAbstractTest.h 8 | 9 | 4jnRu9kM4nMP+Xh3ikwmHuBDxsI= 10 | 11 | Headers/XCTActivity.h 12 | 13 | BVKd+CuVL/fMWVnojVTY7BZiXkc= 14 | 15 | Headers/XCTAttachment.h 16 | 17 | Oj+TPGqNugq6OdGTXp+pv8RABrw= 18 | 19 | Headers/XCTAttachmentLifetime.h 20 | 21 | uBkx/rPKjZiieZXjaYSrZHfYrQc= 22 | 23 | Headers/XCTContext.h 24 | 25 | S2c/fkq5xnjLgsMY3mNIE7jPMFE= 26 | 27 | Headers/XCTDarwinNotificationExpectation.h 28 | 29 | xgLoekZTNR/Co8filS6uLNYJf/E= 30 | 31 | Headers/XCTKVOExpectation.h 32 | 33 | lFyxpAOexy4I0FeOWpffoTT8it0= 34 | 35 | Headers/XCTMeasureOptions.h 36 | 37 | ibArYCN2zdKhgx+eBgBCBNDAXwk= 38 | 39 | Headers/XCTMetric.h 40 | 41 | 0ajIZMxTB6Ui2i7sW317ciFSITk= 42 | 43 | Headers/XCTNSNotificationExpectation.h 44 | 45 | GgPD0VxAR13kxU718XyIoANRFnI= 46 | 47 | Headers/XCTNSPredicateExpectation.h 48 | 49 | aSEO1rwf6zy0Du3+eCT33nba5NQ= 50 | 51 | Headers/XCTWaiter.h 52 | 53 | 3xRcrUqW54PHl7VXGv1RNSfgZAg= 54 | 55 | Headers/XCTest.apinotes 56 | 57 | rdxiCOk1+8LS5qAXN2bvobJDFFQ= 58 | 59 | Headers/XCTest.h 60 | 61 | bQFfKucFGBSbvIYCB0BZ5s/oxjc= 62 | 63 | Headers/XCTestAssertions.h 64 | 65 | TFhruscn++ANKgidq0O8+oRGZg0= 66 | 67 | Headers/XCTestAssertionsImpl.h 68 | 69 | T99AMAYulUY/rC8Jm3f2wue/NwQ= 70 | 71 | Headers/XCTestCase+AsynchronousTesting.h 72 | 73 | rWTz3GJooC6B9F2UuPe8rraZ3co= 74 | 75 | Headers/XCTestCase+XCUIInterruptionMonitoring.h 76 | 77 | HshK97GInp8BY09Lz+IOOiSjMLw= 78 | 79 | Headers/XCTestCase.h 80 | 81 | cMytFl3o1iFwLUyeTTEODEj9URQ= 82 | 83 | Headers/XCTestCaseRun.h 84 | 85 | /XUqDHA/BFdQDUxQU8Ft5LXo/Ps= 86 | 87 | Headers/XCTestDefines.h 88 | 89 | Am3+DsqkiGWVQdMxbvP+PnX1GEc= 90 | 91 | Headers/XCTestErrors.h 92 | 93 | BnBscwpH851RQwavB0TR1R+NFGk= 94 | 95 | Headers/XCTestExpectation.h 96 | 97 | KhXKWvul02bgmcJVo8Ndr6k6XGc= 98 | 99 | Headers/XCTestLog.h 100 | 101 | 9BU/gwbaKcfn2L9dfo2dHRFN6Bc= 102 | 103 | Headers/XCTestObservation.h 104 | 105 | eYPPds+/sIm1g8tzzWEi74ngT8s= 106 | 107 | Headers/XCTestObservationCenter.h 108 | 109 | 5ySsNYFGF0ZFvLZnL7UTg1HNRR4= 110 | 111 | Headers/XCTestObserver.h 112 | 113 | DV3Cjdd1CAe6nYFEzmUrCtnzxQg= 114 | 115 | Headers/XCTestProbe.h 116 | 117 | fIVR0xRsxMAabrJmeGX3hPDwL0Y= 118 | 119 | Headers/XCTestRun.h 120 | 121 | 7GVNxTeghh0aBxY/Gvb+j2VTkqQ= 122 | 123 | Headers/XCTestSuite.h 124 | 125 | eRc+OVrMoZSKfP/hWkP9044Xkwo= 126 | 127 | Headers/XCTestSuiteRun.h 128 | 129 | OX+g52bOAnhjLVDKkweTKM8jTHQ= 130 | 131 | Headers/XCUIApplication.h 132 | 133 | KRfS5tDZSII6EIDyPAL3+83RDuE= 134 | 135 | Headers/XCUICoordinate.h 136 | 137 | KH9oPuVEvERZxuUq0MRGlJmp92I= 138 | 139 | Headers/XCUIDevice.h 140 | 141 | U+d9WpjjRCjLiLvCZfzVvHgwSac= 142 | 143 | Headers/XCUIElement.h 144 | 145 | kik/CdE89CdCkfNcElgLOL/fEfY= 146 | 147 | Headers/XCUIElementAttributes.h 148 | 149 | 8ihGn99tX4C4PPRNW4qUqlS9tBo= 150 | 151 | Headers/XCUIElementQuery.h 152 | 153 | C3ZXTnkZIFu38bImb5YnKX8ME3s= 154 | 155 | Headers/XCUIElementTypeQueryProvider.h 156 | 157 | eNC8SZmVLap2/0pE8MEIXg23K5k= 158 | 159 | Headers/XCUIElementTypes.h 160 | 161 | rS+FtIJ/fnc0UIdAg5Fupx0KuVc= 162 | 163 | Headers/XCUIKeyboardKeys.h 164 | 165 | iM5NitaH7AFOmYTcSm86X0OTpSw= 166 | 167 | Headers/XCUIRemote.h 168 | 169 | mL0ValPqxcHHQ2g5GKFehud+hmg= 170 | 171 | Headers/XCUIScreen.h 172 | 173 | DBqshlCvI4VeOu1t7slE1L12Akw= 174 | 175 | Headers/XCUIScreenshot.h 176 | 177 | WRAFpS5fsJOjpa68uJDYY7QcwzQ= 178 | 179 | Headers/XCUIScreenshotProviding.h 180 | 181 | qghz8l697gauRG1WZGkXCsisS40= 182 | 183 | Headers/XCUISiriService.h 184 | 185 | dHcrL5GzEWnfAVIIdfMRtkHKRh8= 186 | 187 | Info.plist 188 | 189 | PKZERfvFR9NslOzRKnNmu1CCGOk= 190 | 191 | Modules/module.modulemap 192 | 193 | ha0qqLvU0UdkLu07qH5tE4agQV4= 194 | 195 | en.lproj/InfoPlist.strings 196 | 197 | hash 198 | 199 | TuBj57ZP6zBqcL9HttO2Rucaw9E= 200 | 201 | optional 202 | 203 | 204 | version.plist 205 | 206 | IBuwnssTaVoEqhVHtNTT91gSl10= 207 | 208 | 209 | files2 210 | 211 | Headers/XCAbstractTest.h 212 | 213 | hash 214 | 215 | 4jnRu9kM4nMP+Xh3ikwmHuBDxsI= 216 | 217 | hash2 218 | 219 | IFgW59C1Ktqp4LtLT30sw91amGbNOGweE+JfCOD3+Zg= 220 | 221 | 222 | Headers/XCTActivity.h 223 | 224 | hash 225 | 226 | BVKd+CuVL/fMWVnojVTY7BZiXkc= 227 | 228 | hash2 229 | 230 | rRcgcNhfkv8++PLGoc2+V7RKA+20od2gktcAZnNphso= 231 | 232 | 233 | Headers/XCTAttachment.h 234 | 235 | hash 236 | 237 | Oj+TPGqNugq6OdGTXp+pv8RABrw= 238 | 239 | hash2 240 | 241 | sPKuJRf7076bHZkdcyw9yIODM7cLQgzwVepIaxfKcwg= 242 | 243 | 244 | Headers/XCTAttachmentLifetime.h 245 | 246 | hash 247 | 248 | uBkx/rPKjZiieZXjaYSrZHfYrQc= 249 | 250 | hash2 251 | 252 | yrLG05PHjYkx013jrhQuHeuuP2sz3+LqbAIRN/0Mqc4= 253 | 254 | 255 | Headers/XCTContext.h 256 | 257 | hash 258 | 259 | S2c/fkq5xnjLgsMY3mNIE7jPMFE= 260 | 261 | hash2 262 | 263 | aKMqn4OBmb2Fg3/8sTMLXW2eHWiyWP3bQkSzTnvrwmQ= 264 | 265 | 266 | Headers/XCTDarwinNotificationExpectation.h 267 | 268 | hash 269 | 270 | xgLoekZTNR/Co8filS6uLNYJf/E= 271 | 272 | hash2 273 | 274 | WWhQiD61KIzmH4HGY0m0DL81cWWNlj8/UbmObbMosCo= 275 | 276 | 277 | Headers/XCTKVOExpectation.h 278 | 279 | hash 280 | 281 | lFyxpAOexy4I0FeOWpffoTT8it0= 282 | 283 | hash2 284 | 285 | 0LwmSqNDabujMjFkD4VsuBrVvpDiagCmMT7+TrOMQJ8= 286 | 287 | 288 | Headers/XCTMeasureOptions.h 289 | 290 | hash 291 | 292 | ibArYCN2zdKhgx+eBgBCBNDAXwk= 293 | 294 | hash2 295 | 296 | KDHwa5eBjk9vZzDnpRNyoTiLMHC+9NfBU2oMFJTvlmQ= 297 | 298 | 299 | Headers/XCTMetric.h 300 | 301 | hash 302 | 303 | 0ajIZMxTB6Ui2i7sW317ciFSITk= 304 | 305 | hash2 306 | 307 | ohpVoJzlGk8aW+Bm+UIJpMN7QLu7ZRCzMw9yK/vngRg= 308 | 309 | 310 | Headers/XCTNSNotificationExpectation.h 311 | 312 | hash 313 | 314 | GgPD0VxAR13kxU718XyIoANRFnI= 315 | 316 | hash2 317 | 318 | VXvwBWOD16+KFCowURMEv0kaNQr2vnqCACoYDoCXge4= 319 | 320 | 321 | Headers/XCTNSPredicateExpectation.h 322 | 323 | hash 324 | 325 | aSEO1rwf6zy0Du3+eCT33nba5NQ= 326 | 327 | hash2 328 | 329 | ks1YzdiBYJW2038936fbKLaf/Ib1fAhJioMzCA6WxWg= 330 | 331 | 332 | Headers/XCTWaiter.h 333 | 334 | hash 335 | 336 | 3xRcrUqW54PHl7VXGv1RNSfgZAg= 337 | 338 | hash2 339 | 340 | mA5vx6/QQ25gHCNLjo9Y0eX1khy7s52IB7yacIGlrNk= 341 | 342 | 343 | Headers/XCTest.apinotes 344 | 345 | hash 346 | 347 | rdxiCOk1+8LS5qAXN2bvobJDFFQ= 348 | 349 | hash2 350 | 351 | d7IpqGCCD0CfwYoa51brylY4fgu3M72FcmaoEnvUdsw= 352 | 353 | 354 | Headers/XCTest.h 355 | 356 | hash 357 | 358 | bQFfKucFGBSbvIYCB0BZ5s/oxjc= 359 | 360 | hash2 361 | 362 | lsupTQ3bRsQoIE7MDToK4j69d+bLEn28IJlqk78FmQY= 363 | 364 | 365 | Headers/XCTestAssertions.h 366 | 367 | hash 368 | 369 | TFhruscn++ANKgidq0O8+oRGZg0= 370 | 371 | hash2 372 | 373 | HNwN4r4tVDYAyxvEdGWpbCOzE9tjFMwivSpf/OMiSA0= 374 | 375 | 376 | Headers/XCTestAssertionsImpl.h 377 | 378 | hash 379 | 380 | T99AMAYulUY/rC8Jm3f2wue/NwQ= 381 | 382 | hash2 383 | 384 | zNlx0hWK8x8UjUS+KOfeHvvervr/BWjBpV+5mJipE14= 385 | 386 | 387 | Headers/XCTestCase+AsynchronousTesting.h 388 | 389 | hash 390 | 391 | rWTz3GJooC6B9F2UuPe8rraZ3co= 392 | 393 | hash2 394 | 395 | tJGZbkx6PTinAC1utC38ad/hNBMIojawFdNt3abKvKE= 396 | 397 | 398 | Headers/XCTestCase+XCUIInterruptionMonitoring.h 399 | 400 | hash 401 | 402 | HshK97GInp8BY09Lz+IOOiSjMLw= 403 | 404 | hash2 405 | 406 | bQ07uLDQQVxFhGMZVX2mEVx0PcELxAp83yWtTivdhY4= 407 | 408 | 409 | Headers/XCTestCase.h 410 | 411 | hash 412 | 413 | cMytFl3o1iFwLUyeTTEODEj9URQ= 414 | 415 | hash2 416 | 417 | yswC/H8HQQONXgDwc7kA0veuoTP0vr9nKShnoBPShXg= 418 | 419 | 420 | Headers/XCTestCaseRun.h 421 | 422 | hash 423 | 424 | /XUqDHA/BFdQDUxQU8Ft5LXo/Ps= 425 | 426 | hash2 427 | 428 | jEzXeXeFAbT7xbfbqjlf4yF+lZvOKKw9u0dhT8Lzpe4= 429 | 430 | 431 | Headers/XCTestDefines.h 432 | 433 | hash 434 | 435 | Am3+DsqkiGWVQdMxbvP+PnX1GEc= 436 | 437 | hash2 438 | 439 | zuT+9hJS0Gkek0vsBM0QbHA2iRIwxHkAVlflT6Dl5Cs= 440 | 441 | 442 | Headers/XCTestErrors.h 443 | 444 | hash 445 | 446 | BnBscwpH851RQwavB0TR1R+NFGk= 447 | 448 | hash2 449 | 450 | vY/UAdXlAJaUKG1L3k0Tji8c7J/L2vAGoidgKK/87+o= 451 | 452 | 453 | Headers/XCTestExpectation.h 454 | 455 | hash 456 | 457 | KhXKWvul02bgmcJVo8Ndr6k6XGc= 458 | 459 | hash2 460 | 461 | mAYhxq+bEQg5FJhqAi4Cub/7+mMl0pLWISlW4pdh3p0= 462 | 463 | 464 | Headers/XCTestLog.h 465 | 466 | hash 467 | 468 | 9BU/gwbaKcfn2L9dfo2dHRFN6Bc= 469 | 470 | hash2 471 | 472 | Tu+6JYZZzftcXmUWH11IO9/jXCXi6QPeWDrL6izup6s= 473 | 474 | 475 | Headers/XCTestObservation.h 476 | 477 | hash 478 | 479 | eYPPds+/sIm1g8tzzWEi74ngT8s= 480 | 481 | hash2 482 | 483 | DlaZPljnXduHBIxVFsQHWivHsQV6+QqtkPm3wqcNC9c= 484 | 485 | 486 | Headers/XCTestObservationCenter.h 487 | 488 | hash 489 | 490 | 5ySsNYFGF0ZFvLZnL7UTg1HNRR4= 491 | 492 | hash2 493 | 494 | d+hY4S23zmWO8E2YIrh4biGe9oQWCfD497a+oVk2+yY= 495 | 496 | 497 | Headers/XCTestObserver.h 498 | 499 | hash 500 | 501 | DV3Cjdd1CAe6nYFEzmUrCtnzxQg= 502 | 503 | hash2 504 | 505 | 7CTdhCJbuEzQNSyp3exgcCn6JnIRjBwpUcOKmiddBtU= 506 | 507 | 508 | Headers/XCTestProbe.h 509 | 510 | hash 511 | 512 | fIVR0xRsxMAabrJmeGX3hPDwL0Y= 513 | 514 | hash2 515 | 516 | FKXb32Ennc+6f3SkuVdo8bBNcIIWwryV5u5FmQYN8Fc= 517 | 518 | 519 | Headers/XCTestRun.h 520 | 521 | hash 522 | 523 | 7GVNxTeghh0aBxY/Gvb+j2VTkqQ= 524 | 525 | hash2 526 | 527 | bSeEEos9toHX4ZeMGeRYdv1KXdCziExa2r95Y6Qcem8= 528 | 529 | 530 | Headers/XCTestSuite.h 531 | 532 | hash 533 | 534 | eRc+OVrMoZSKfP/hWkP9044Xkwo= 535 | 536 | hash2 537 | 538 | L7lrx0/vT/6C441YiHqyBo8c41P7nh8AVfj2Ju9MWF0= 539 | 540 | 541 | Headers/XCTestSuiteRun.h 542 | 543 | hash 544 | 545 | OX+g52bOAnhjLVDKkweTKM8jTHQ= 546 | 547 | hash2 548 | 549 | QDxhlFfxAJEcudV29W9M96FJW5LQiR0yqdUHzkjMuA0= 550 | 551 | 552 | Headers/XCUIApplication.h 553 | 554 | hash 555 | 556 | KRfS5tDZSII6EIDyPAL3+83RDuE= 557 | 558 | hash2 559 | 560 | ZcQ8tkNuRMWSj71jyx56Uc/drEs5EQzV/1jFn/fCc8E= 561 | 562 | 563 | Headers/XCUICoordinate.h 564 | 565 | hash 566 | 567 | KH9oPuVEvERZxuUq0MRGlJmp92I= 568 | 569 | hash2 570 | 571 | +0+WTr805cIzOsY72c8KSuWA6SUFtagukcxOv0ili5g= 572 | 573 | 574 | Headers/XCUIDevice.h 575 | 576 | hash 577 | 578 | U+d9WpjjRCjLiLvCZfzVvHgwSac= 579 | 580 | hash2 581 | 582 | VW3IwP1TYREPNB2r2kMjYcDRy4pIEIanLPXa2Q6103I= 583 | 584 | 585 | Headers/XCUIElement.h 586 | 587 | hash 588 | 589 | kik/CdE89CdCkfNcElgLOL/fEfY= 590 | 591 | hash2 592 | 593 | Fy65/sTJUEiV0ngzbtJLFKs9c0kPw/E9TxgozUurqbM= 594 | 595 | 596 | Headers/XCUIElementAttributes.h 597 | 598 | hash 599 | 600 | 8ihGn99tX4C4PPRNW4qUqlS9tBo= 601 | 602 | hash2 603 | 604 | /RERxiLo8BzHBf5biK7xsVJnDB73TOHeOH72FBuhMTo= 605 | 606 | 607 | Headers/XCUIElementQuery.h 608 | 609 | hash 610 | 611 | C3ZXTnkZIFu38bImb5YnKX8ME3s= 612 | 613 | hash2 614 | 615 | LF3E68WtedEEM/IFD3q/tOZ3q0JtUQQhOK4XkamNjNM= 616 | 617 | 618 | Headers/XCUIElementTypeQueryProvider.h 619 | 620 | hash 621 | 622 | eNC8SZmVLap2/0pE8MEIXg23K5k= 623 | 624 | hash2 625 | 626 | TkdeCwm9pHYslVsfOQREYI9bFdf4Uli/p8MK/GYWfoY= 627 | 628 | 629 | Headers/XCUIElementTypes.h 630 | 631 | hash 632 | 633 | rS+FtIJ/fnc0UIdAg5Fupx0KuVc= 634 | 635 | hash2 636 | 637 | PUsaHf1pPvtkPng1Gk8jnyBg64It8wcfcNQK5lbNMs4= 638 | 639 | 640 | Headers/XCUIKeyboardKeys.h 641 | 642 | hash 643 | 644 | iM5NitaH7AFOmYTcSm86X0OTpSw= 645 | 646 | hash2 647 | 648 | MbFj4xHxsP2eF3L+IKG6cETqjvOpZFLq0ztIDCdeyt8= 649 | 650 | 651 | Headers/XCUIRemote.h 652 | 653 | hash 654 | 655 | mL0ValPqxcHHQ2g5GKFehud+hmg= 656 | 657 | hash2 658 | 659 | ybx2NetsmHdACotRXmQIih0R1cU6EFEkgC4E82ttsQ4= 660 | 661 | 662 | Headers/XCUIScreen.h 663 | 664 | hash 665 | 666 | DBqshlCvI4VeOu1t7slE1L12Akw= 667 | 668 | hash2 669 | 670 | 45JwTQ4UtWVT2wvzdq2QOl8rBZ9Wxq9ubBB2vGvgBKc= 671 | 672 | 673 | Headers/XCUIScreenshot.h 674 | 675 | hash 676 | 677 | WRAFpS5fsJOjpa68uJDYY7QcwzQ= 678 | 679 | hash2 680 | 681 | F2tCZijPx0hU+7CIdW0fMZK4cwKbgFYiI9LKYINt5sU= 682 | 683 | 684 | Headers/XCUIScreenshotProviding.h 685 | 686 | hash 687 | 688 | qghz8l697gauRG1WZGkXCsisS40= 689 | 690 | hash2 691 | 692 | s35VI6Lzy6LUDsIoANQTenLSsJeaPXvonWElqk8cJbM= 693 | 694 | 695 | Headers/XCUISiriService.h 696 | 697 | hash 698 | 699 | dHcrL5GzEWnfAVIIdfMRtkHKRh8= 700 | 701 | hash2 702 | 703 | 3sM9IB3tMtnQkwtK6ml+Cyc98wfQkjwaoA/cdI7i500= 704 | 705 | 706 | Modules/module.modulemap 707 | 708 | hash 709 | 710 | ha0qqLvU0UdkLu07qH5tE4agQV4= 711 | 712 | hash2 713 | 714 | w5Zd8voFpYyDVfx4t9/bCAZAs1kTrhmGSzTXQMiBd/c= 715 | 716 | 717 | en.lproj/InfoPlist.strings 718 | 719 | hash 720 | 721 | TuBj57ZP6zBqcL9HttO2Rucaw9E= 722 | 723 | hash2 724 | 725 | 89RGkjZaKuewYnjpzwhIswhqfrU8+pcEXqM/DHVrUmo= 726 | 727 | optional 728 | 729 | 730 | version.plist 731 | 732 | hash 733 | 734 | IBuwnssTaVoEqhVHtNTT91gSl10= 735 | 736 | hash2 737 | 738 | JWd/ru1b6k0uNZgO60tQbs9H8n+wZ9N9P0FKdkazZ2c= 739 | 740 | 741 | 742 | rules 743 | 744 | ^.* 745 | 746 | ^.*\.lproj/ 747 | 748 | optional 749 | 750 | weight 751 | 1000 752 | 753 | ^.*\.lproj/locversion.plist$ 754 | 755 | omit 756 | 757 | weight 758 | 1100 759 | 760 | ^Base\.lproj/ 761 | 762 | weight 763 | 1010 764 | 765 | ^version.plist$ 766 | 767 | 768 | rules2 769 | 770 | .*\.dSYM($|/) 771 | 772 | weight 773 | 11 774 | 775 | ^(.*/)?\.DS_Store$ 776 | 777 | omit 778 | 779 | weight 780 | 2000 781 | 782 | ^.* 783 | 784 | ^.*\.lproj/ 785 | 786 | optional 787 | 788 | weight 789 | 1000 790 | 791 | ^.*\.lproj/locversion.plist$ 792 | 793 | omit 794 | 795 | weight 796 | 1100 797 | 798 | ^Base\.lproj/ 799 | 800 | weight 801 | 1010 802 | 803 | ^Info\.plist$ 804 | 805 | omit 806 | 807 | weight 808 | 20 809 | 810 | ^PkgInfo$ 811 | 812 | omit 813 | 814 | weight 815 | 20 816 | 817 | ^embedded\.provisionprofile$ 818 | 819 | weight 820 | 20 821 | 822 | ^version\.plist$ 823 | 824 | weight 825 | 20 826 | 827 | 828 | 829 | 830 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/XCTest.framework/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/XCTest.framework/en.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/XCTest.framework/version.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildAliasOf 6 | XCTest 7 | BuildVersion 8 | 25 9 | CFBundleShortVersionString 10 | 1.0 11 | CFBundleVersion 12 | 15509 13 | ProjectName 14 | XCTest_Sim 15 | SourceVersion 16 | 15509000000000000 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/libXCTestBundleInject.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/libXCTestBundleInject.dylib -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/libXCTestSwiftSupport.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/Frameworks/libXCTestSwiftSupport.dylib -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/HelloWorldiOS: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/HelloWorldiOS -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/Info.plist -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/EyesImagesTests(UnitTests): -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/EyesImagesTests(UnitTests) -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/.gitkeep -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode10 3 | xcode_project: ApplitoolsEyes/Applitools.xcodeproj # path to xcodeproj folder 4 | xcode_scheme: IntegrationTests 5 | xcode_sdk: iphonesimulator12.0 6 | sudo: enabled 7 | notifications: 8 | email: 9 | - anton.chuev@applitools.com 10 | script: 11 | - xcodebuild build -project ApplitoolsEyes/Applitools.xcodeproj -scheme IntegrationTests -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6,OS=12.0' test 12 | - xcodebuild build -project ApplitoolsEyes/Applitools.xcodeproj -scheme UnitTests -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6,OS=12.0' test 13 | 14 | after_success: 15 | - sh ApplitoolsEyes/Scripts/set_tags.sh 16 | - if [ "$TRAVIS_BRANCH" == "master" ] && [ -n $TRAVIS_TAG ] && [ "$APPLITOOLS_AUTO_DEPLOY" == "true" ]; then 17 | sh ApplitoolsEyes/Scripts/build_sdk.sh; 18 | sh ApplitoolsEyes/Scripts/update_version_on_cocoapods.sh; 19 | sh ApplitoolsEyes/Scripts/update_carthage_integration.sh; 20 | fi; 21 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [4.4.1] - 2019-12-20 2 | ### Added 3 | - License info at the top of public headers 4 | ### Fixed 5 | - Timeout for network requests is 5 minutes. 6 | ### Added 7 | - Log message of actual path where debug screenshots are saved(if flag saveDebugScreenshots is set to true) 8 | ### Fixed 9 | - Nullability warnings 10 | ### Added 11 | - "Accept" HTTP header with value "application/json" 12 | ### Fixed 13 | - Work with regions those got floating x,, y, width and height values 14 | ### Added 15 | - Support of APPLITOOLS_SERVER_URL environment 16 | - Support of all existent environment variables with "bamboo_" prefix 17 | 18 | ## [4.4.0] - 2019-11-5 19 | ### Added 20 | - Configuration API. 21 | ### Added 22 | - CHANGELOG file for EyesImages SDK. 23 | . 24 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/EyesImages: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/EyesImages -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/Gemfile: -------------------------------------------------------------------------------- 1 | source :rubygems 2 | 3 | gem 'thor', '~> 0.20' 4 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/Info.plist -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/_CodeSignature/CodeResources: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | .gitkeep 8 | 9 | 2jmj7l5rSw0yVb/vlWAYkK/YBwk= 10 | 11 | .travis.yml 12 | 13 | yWyVd3M8YYB8CQ5MhlY1yTDt8m4= 14 | 15 | CHANGELOG.md 16 | 17 | Ve8s7/MVCaGGltYNbnhHleF30Nw= 18 | 19 | Gemfile 20 | 21 | 9yRft9MJyV8hWCKT3jQ2XPoPk9s= 22 | 23 | Info.plist 24 | 25 | QJwVpITuyWMG5QPinODTe827PwQ= 26 | 27 | build_sdk.sh 28 | 29 | +ltLaR5Jd9hl+DrIc/OIBBl+53Y= 30 | 31 | carthage_dependencies_json.thor 32 | 33 | aPc7yLvXn3RefQa/tFwUis1CA98= 34 | 35 | carthage_dependencies_json.tt 36 | 37 | QR42GLN/wADU+A3PM6elHoZJ8NA= 38 | 39 | podspec.thor 40 | 41 | RP2wmWtkNEdPTlBe9Chg8xPtxtI= 42 | 43 | podspec.tt 44 | 45 | kgkaoU9H2J17Zgs9Q/F+0oZv+ck= 46 | 47 | set_tags.sh 48 | 49 | bDqclV6o7RSQ56C+EZ4C+w0HOxM= 50 | 51 | update_carthage_integration.sh 52 | 53 | UGhGbwfNV7niwXBxxNiIJOn2GJ0= 54 | 55 | update_version_on_cocoapods.sh 56 | 57 | YosveBWYSTorY5OfTPrAqsPnfRc= 58 | 59 | 60 | files2 61 | 62 | .gitkeep 63 | 64 | hash 65 | 66 | 2jmj7l5rSw0yVb/vlWAYkK/YBwk= 67 | 68 | hash2 69 | 70 | 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= 71 | 72 | 73 | .travis.yml 74 | 75 | hash 76 | 77 | yWyVd3M8YYB8CQ5MhlY1yTDt8m4= 78 | 79 | hash2 80 | 81 | elfZ/dHVDlfrkzYN1buapwRQ4Ahdl1fIQDz49xusry4= 82 | 83 | 84 | CHANGELOG.md 85 | 86 | hash 87 | 88 | Ve8s7/MVCaGGltYNbnhHleF30Nw= 89 | 90 | hash2 91 | 92 | 9pVD/CDMXoFvl175mzPvlFjRRXQNao62kl9peTaUDtg= 93 | 94 | 95 | Gemfile 96 | 97 | hash 98 | 99 | 9yRft9MJyV8hWCKT3jQ2XPoPk9s= 100 | 101 | hash2 102 | 103 | o85Tau514JChZmNnh8C8nq63p++d+ZqQ7LH7vunZuDs= 104 | 105 | 106 | build_sdk.sh 107 | 108 | hash 109 | 110 | +ltLaR5Jd9hl+DrIc/OIBBl+53Y= 111 | 112 | hash2 113 | 114 | /pOrDuUX9NT1ofjzU6YUHRiCFDDEQcMVIFcUyCRSckw= 115 | 116 | 117 | carthage_dependencies_json.thor 118 | 119 | hash 120 | 121 | aPc7yLvXn3RefQa/tFwUis1CA98= 122 | 123 | hash2 124 | 125 | FhpyCgVGoveLPe3I25m74bGQFQI5N04leIa1DKjwAz8= 126 | 127 | 128 | carthage_dependencies_json.tt 129 | 130 | hash 131 | 132 | QR42GLN/wADU+A3PM6elHoZJ8NA= 133 | 134 | hash2 135 | 136 | +sqj1LcJxc+rtX4hkmLR9+CRHb4eTQx+Z++vWOpMjtk= 137 | 138 | 139 | podspec.thor 140 | 141 | hash 142 | 143 | RP2wmWtkNEdPTlBe9Chg8xPtxtI= 144 | 145 | hash2 146 | 147 | k+lD2AYYyJjmNLO+/yCvwQ8FGQ0F7Kmn78Z/cQEiyRk= 148 | 149 | 150 | podspec.tt 151 | 152 | hash 153 | 154 | kgkaoU9H2J17Zgs9Q/F+0oZv+ck= 155 | 156 | hash2 157 | 158 | pR2CaxkjnA5CgCi53GVF23QhCXi9raDDU1yJSFf7RsU= 159 | 160 | 161 | set_tags.sh 162 | 163 | hash 164 | 165 | bDqclV6o7RSQ56C+EZ4C+w0HOxM= 166 | 167 | hash2 168 | 169 | Fi+AfbNgTXCIaKRcjT3BaFiRahKpYYJJk+/OQlFmE5Q= 170 | 171 | 172 | update_carthage_integration.sh 173 | 174 | hash 175 | 176 | UGhGbwfNV7niwXBxxNiIJOn2GJ0= 177 | 178 | hash2 179 | 180 | sIOKtClNSioYRXxMKI+xWYAeKSCN+lbNQ1EfzOAN5Gk= 181 | 182 | 183 | update_version_on_cocoapods.sh 184 | 185 | hash 186 | 187 | YosveBWYSTorY5OfTPrAqsPnfRc= 188 | 189 | hash2 190 | 191 | cr4tkpehfLDHbSEw4SsOdyi5LUAMcYYKuj5YftRvDUo= 192 | 193 | 194 | 195 | rules 196 | 197 | ^.* 198 | 199 | ^.*\.lproj/ 200 | 201 | optional 202 | 203 | weight 204 | 1000 205 | 206 | ^.*\.lproj/locversion.plist$ 207 | 208 | omit 209 | 210 | weight 211 | 1100 212 | 213 | ^Base\.lproj/ 214 | 215 | weight 216 | 1010 217 | 218 | ^version.plist$ 219 | 220 | 221 | rules2 222 | 223 | .*\.dSYM($|/) 224 | 225 | weight 226 | 11 227 | 228 | ^(.*/)?\.DS_Store$ 229 | 230 | omit 231 | 232 | weight 233 | 2000 234 | 235 | ^.* 236 | 237 | ^.*\.lproj/ 238 | 239 | optional 240 | 241 | weight 242 | 1000 243 | 244 | ^.*\.lproj/locversion.plist$ 245 | 246 | omit 247 | 248 | weight 249 | 1100 250 | 251 | ^Base\.lproj/ 252 | 253 | weight 254 | 1010 255 | 256 | ^Info\.plist$ 257 | 258 | omit 259 | 260 | weight 261 | 20 262 | 263 | ^PkgInfo$ 264 | 265 | omit 266 | 267 | weight 268 | 20 269 | 270 | ^embedded\.provisionprofile$ 271 | 272 | weight 273 | 20 274 | 275 | ^version\.plist$ 276 | 277 | weight 278 | 20 279 | 280 | 281 | 282 | 283 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/build_sdk.sh: -------------------------------------------------------------------------------- 1 | # Custom environment variables: 2 | # - FRAMEWORK_NAME 3 | # Change values of custom environment variables at https://travis-ci.com/applitools/eyes.ios/settings 4 | # List of default environment variables at: https://docs.travis-ci.com/user/environment-variables/ 5 | 6 | # 1 7 | # Set bash script to exit immediately if any commands fail. 8 | set -e 9 | 10 | # 2 11 | # Build the framework for device and for simulator (using all needed architectures). 12 | echo "Creating of builds for device and simulator..." 13 | xcodebuild -project "ApplitoolsEyes/Applitools.xcodeproj" -target "${FRAMEWORK_NAME}" -configuration Release -arch arm64 -arch armv7 -arch armv7s only_active_arch=no defines_module=yes -sdk "iphoneos" 14 | xcodebuild -project "ApplitoolsEyes/Applitools.xcodeproj" -target "${FRAMEWORK_NAME}" -configuration Release -arch x86_64 -arch i386 only_active_arch=no defines_module=yes -sdk "iphonesimulator" 15 | echo "Builds were created!" 16 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/carthage_dependencies_json.thor: -------------------------------------------------------------------------------- 1 | class Dependencies_Json < Thor::Group 2 | include Thor::Actions 3 | 4 | argument :name 5 | class_option :version 6 | 7 | def self.source_root 8 | File.dirname(__FILE__) 9 | end 10 | 11 | def check_version_exist 12 | raise StandardError, "--version is required!" unless options['version'] && !options['version'].empty? 13 | end 14 | 15 | def create_json_file 16 | template('carthage_dependencies_json', "#{name}-#{options['version']}.json") 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/carthage_dependencies_json.tt: -------------------------------------------------------------------------------- 1 | { 2 | "<%= options['version'] %>" : "https://applitools.bintray.com/iOS/<%= name %>/<%= options['version'] %>/<%= name %>-<%= options['version'] %>.zip" 3 | } 4 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/podspec.thor: -------------------------------------------------------------------------------- 1 | class Podspec < Thor::Group 2 | include Thor::Actions 3 | 4 | argument :name 5 | class_option :version 6 | 7 | def self.source_root 8 | File.dirname(__FILE__) 9 | end 10 | 11 | def check_version_exist 12 | raise StandardError, "--version is required!" unless options['version'] && !options['version'].empty? 13 | end 14 | 15 | def create_podspec_file 16 | template('podspec.tt', "#{name}.podspec") 17 | end 18 | end -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/podspec.tt: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = '<%= name %>' 3 | s.version = '<%= options['version'] %>' 4 | s.summary = '<%= name %> SDK for automatic visual validation in XCUI.' 5 | s.homepage = 'https://applitools.com' 6 | 7 | s.author = 'Applitools Team' 8 | s.license = { :type => 'Copyright', :file => 'LICENSE' } 9 | 10 | s.source = { :http => 'https://applitools.bintray.com/iOS/<%= name %>/<%= options['version'] %>/<%= name %>-<%= options['version'] %>.zip' } 11 | 12 | s.platform = :ios 13 | s.requires_arc = true 14 | s.ios.deployment_target = '9.0' 15 | 16 | s.vendored_frameworks = '<%= name %>/<%= name %>.framework' 17 | s.public_header_files = '<%= name %>/<%= name %>.framework/Headers/*.h' 18 | s.source_files = '<%= name %>/<%= name %>.framework/Headers/*.{h}' 19 | end 20 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/set_tags.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # set_tags.sh 4 | # Applitools 5 | # 6 | # Created by Anton Chuev on 4/17/18. 7 | # Copyright © 2018 Applitools. All rights reserved. 8 | 9 | # Custom environment variables: 10 | # - GH_TOKEN 11 | # - FRAMEWORK_NAME 12 | # Default environment variables: 13 | # - TRAVIS_REPO_SLUG 14 | # - TRAVIS_BUILD_DIR 15 | # 16 | # Change values of custom environment variables at https://travis-ci.com/applitools/eyes.ios/settings 17 | # List of default environment variables at: https://docs.travis-ci.com/user/environment-variables/ 18 | 19 | BRANCH="master" 20 | 21 | # Get SDK's version 22 | INFO="${TRAVIS_BUILD_DIR}/ApplitoolsEyes/${FRAMEWORK_NAME}/Info.plist" 23 | VERSION=$( defaults read "$INFO" CFBundleShortVersionString ) 24 | echo "SDK version = ${VERSION}" 25 | 26 | # Are we on the right branch? 27 | if [ "$TRAVIS_BRANCH" = "$BRANCH" ]; then 28 | 29 | # Is this not a Pull Request? 30 | if [ "$TRAVIS_PULL_REQUEST" = false ]; then 31 | 32 | # Is this not a build which was triggered by setting a new tag? 33 | if [ -z "$TRAVIS_TAG" ]; then 34 | 35 | echo -e "Starting to tag commit.\n" 36 | 37 | git config --global user.email "travis@travis-ci.org" 38 | git config --global user.name "Travis" 39 | 40 | # Add tag and push to master. 41 | git tag -a v"${VERSION}-${FRAMEWORK_NAME}" -m "Travis build pushed a tag." 42 | git push https://$GH_TOKEN@github.com/$TRAVIS_REPO_SLUG.git --tags 43 | git fetch origin 44 | 45 | echo -e "Done commit with tags.\n" 46 | 47 | fi 48 | fi 49 | fi 50 | 51 | echo "SUCCESS!" 52 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/update_carthage_integration.sh: -------------------------------------------------------------------------------- 1 | # Encrypted variables: 2 | # - BINTRAY_API_KEY 3 | 4 | 5 | # 1 6 | # Set bash script to exit immediately if any commands fail. 7 | set -e 8 | 9 | # 2 10 | # Get access to set_target_framework_name.sh file, because FRAMEWORK_NAME variable is calculated there. 11 | source "${TRAVIS_BUILD_DIR}/ApplitoolsEyes/Scripts/set_target_framework_name.sh" 12 | 13 | FRAMEWORK_NAME="${TARGET_FRAMEWORK_NAME}" 14 | 15 | # 3 16 | # Get SDK's version 17 | INFO="${TRAVIS_BUILD_DIR}/ApplitoolsEyes/${FRAMEWORK_NAME}/Info.plist" 18 | VERSION=$( defaults read "$INFO" CFBundleShortVersionString ) 19 | echo "SDK version = ${VERSION}" 20 | 21 | # 4 22 | # Go to 'Cocoapods Spec Generator' folder 23 | cd "ApplitoolsEyes/Carthage Dependencies JSON Generator" 24 | echo "'Carthage Dependencies JSON Generator' folder" 25 | ls 26 | 27 | # 5 28 | # Generate .json with dependencies for new version that is needed in integration with EyesXCUI of EyesImages SDK via Carthage. 29 | # Thor tool is used in generating .podspec file as well during updating Cocoa Pods part. Installation thor .gem is done there. 30 | thor dependencies_json "${FRAMEWORK_NAME}" --version="${VERSION}" 31 | ls 32 | 33 | # 6 34 | # Set up file variable 35 | FILE="${FRAMEWORK_NAME}-${VERSION}.json" 36 | 37 | # 7 38 | # Set up BINTRAY_USER variable 39 | BINTRAY_USER="antonchuev" 40 | 41 | # 8 42 | # Upload new version to Bintray. 43 | curl -T "${FILE}" -"u${BINTRAY_USER}:${BINTRAY_API_KEY}" "https://api.bintray.com/content/applitools/iOS/Carthage${FRAMEWORK_NAME}/${VERSION}/Carthage${FRAMEWORK_NAME}/${VERSION}/${FILE}" 44 | 45 | # 9 46 | # Publish new version on Bintray. 47 | curl -X POST -"u${BINTRAY_USER}:${BINTRAY_API_KEY}" "https://api.bintray.com/content/applitools/iOS/Carthage${FRAMEWORK_NAME}/${VERSION}/publish" 48 | 49 | # 10 50 | # Return back to build folder 51 | cd "${TRAVIS_BUILD_DIR}" 52 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/update_version_on_cocoapods.sh: -------------------------------------------------------------------------------- 1 | # Custom environment variables: 2 | # - GH_TOKEN 3 | # - FRAMEWORK_NAME 4 | # - BINTRAY_USER 5 | # - BINTRAY_API_KEY 6 | # Default environment variables: 7 | # - TRAVIS_BUILD_DIR 8 | # 9 | # Change values of custom environment variables at https://travis-ci.com/applitools/eyes.ios/settings 10 | # List of default environment variables at: https://docs.travis-ci.com/user/environment-variables/ 11 | 12 | # 1 13 | # Set bash script to exit immediately if any commands fail. 14 | set -e 15 | 16 | # 2 17 | # Setup some constants for use later on. 18 | COCOAPODS_RELEASE_FOLDER="${TRAVIS_BUILD_DIR}/ApplitoolsEyes/${FRAMEWORK_NAME}/Release/CocoaPods/${FRAMEWORK_NAME}" 19 | 20 | # 3 21 | # Copy the device version of framework to the CocoaPods release folder. 22 | echo "--- Copying device version of framework to CocoPods release folder..." 23 | cp -r "${TRAVIS_BUILD_DIR}/ApplitoolsEyes/build/Release-iphoneos/" "${COCOAPODS_RELEASE_FOLDER}" 24 | 25 | # 4 26 | # Replace the framework exequtable within the framework with a new version created by merging the device and simulator frameworks' executables with lipo. 27 | echo "--- Merging the device and simulator frameworks' executables with lipo..." 28 | lipo -create -output "${COCOAPODS_RELEASE_FOLDER}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${TRAVIS_BUILD_DIR}/ApplitoolsEyes/build/Release-iphoneos/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${TRAVIS_BUILD_DIR}/ApplitoolsEyes/build/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" 29 | 30 | # 5 31 | # Remove .dsym file from CocoaPods release folder. 32 | echo "--- Removing .dsym file from CocoaPods release folder..." 33 | rm -rf "${COCOAPODS_RELEASE_FOLDER}/${FRAMEWORK_NAME}.framework.dSYM" 34 | 35 | # 6 36 | # Copy LICENSE to CocoaPods release folder. 37 | echo "--- Coping LICENSE to CocoaPods release folder..." 38 | cp -r LICENSE "${COCOAPODS_RELEASE_FOLDER}" 39 | 40 | # 7 41 | # Copy Release folder to project directory excluding hidden files. 42 | echo "--- Coping release folder to project directory excluding hidden files..." 43 | rsync -av --exclude=".*" "${COCOAPODS_RELEASE_FOLDER}" . 44 | 45 | # 8 46 | # Get SDK's version. 47 | INFO="${TRAVIS_BUILD_DIR}/ApplitoolsEyes/${FRAMEWORK_NAME}/Info.plist" 48 | VERSION=$( defaults read "$INFO" CFBundleShortVersionString ) 49 | echo "Getting the SDK version = ${VERSION}" 50 | 51 | # 9 52 | # Compress CocoaPods release folder 53 | echo "--- Compressing CocoaPods release folder..." 54 | zip -r "${FRAMEWORK_NAME}-${VERSION}.zip" "${FRAMEWORK_NAME}" 55 | 56 | # 10 57 | # Create variables for uploading to Bintray. BINTRAY_API_KEY variable is encrypted and locates in .yml. 58 | FILE="${FRAMEWORK_NAME}-${VERSION}.zip" 59 | BINTRAY_USER="antonchuev" 60 | 61 | # 11 62 | # Upload new version to Bintray. 63 | echo "--- Uploading new version to Bintray..." 64 | curl -T "${FILE}" -"u${BINTRAY_USER}:${BINTRAY_API_KEY}" "https://api.bintray.com/content/applitools/iOS/${FRAMEWORK_NAME}/${VERSION}/${FRAMEWORK_NAME}/${VERSION}/${FILE}" 65 | 66 | # 12 67 | # Publish new version to Bintray. 68 | echo "--- Publishing new version to Bintray..." 69 | curl -X POST -"u${BINTRAY_USER}:${BINTRAY_API_KEY}" "https://api.bintray.com/content/applitools/iOS/${FRAMEWORK_NAME}/${VERSION}/publish" 70 | 71 | # 13 72 | # Go to 'Cocoapods Spec Generator' folder 73 | cd "ApplitoolsEyes/Cocoapods Spec Generator" 74 | 75 | # 14 76 | # Install bundler gem. 77 | echo "--- Installing bundler gem..." 78 | gem install bundler 79 | bundle install 80 | 81 | # 15 82 | # Generate .podspec file 83 | echo "--- Generating .podspec file..." 84 | thor podspec "${FRAMEWORK_NAME}" --version="${VERSION}" 85 | 86 | # 16 87 | # Push Podspec to Cocoa pods repo. 88 | echo "--- Pushing .podspec file to Cocoa pods..." 89 | source ~/.rvm/scripts/rvm 90 | rvm use default 91 | pod trunk push "${FRAMEWORK_NAME}.podspec" --allow-warnings 92 | 93 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCore.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCore.dylib -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCoreFoundation.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCoreFoundation.dylib -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCoreGraphics.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCoreGraphics.dylib -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftDarwin.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftDarwin.dylib -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftDispatch.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftDispatch.dylib -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftFoundation.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftFoundation.dylib -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftObjectiveC.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftObjectiveC.dylib -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/Info.plist -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/PlugIns/EyesImagesTests(UnitTests).xctest/_CodeSignature/CodeResources: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | Frameworks/EyesImages.framework/.gitkeep 8 | 9 | 2jmj7l5rSw0yVb/vlWAYkK/YBwk= 10 | 11 | Frameworks/EyesImages.framework/.travis.yml 12 | 13 | yWyVd3M8YYB8CQ5MhlY1yTDt8m4= 14 | 15 | Frameworks/EyesImages.framework/CHANGELOG.md 16 | 17 | Ve8s7/MVCaGGltYNbnhHleF30Nw= 18 | 19 | Frameworks/EyesImages.framework/EyesImages 20 | 21 | zPh3z0rcgL3CzWffX+rRzT0RGdM= 22 | 23 | Frameworks/EyesImages.framework/Gemfile 24 | 25 | 9yRft9MJyV8hWCKT3jQ2XPoPk9s= 26 | 27 | Frameworks/EyesImages.framework/Info.plist 28 | 29 | QJwVpITuyWMG5QPinODTe827PwQ= 30 | 31 | Frameworks/EyesImages.framework/_CodeSignature/CodeResources 32 | 33 | MH5AAYeccQqQYOWdD4wbO/PV9Do= 34 | 35 | Frameworks/EyesImages.framework/build_sdk.sh 36 | 37 | +ltLaR5Jd9hl+DrIc/OIBBl+53Y= 38 | 39 | Frameworks/EyesImages.framework/carthage_dependencies_json.thor 40 | 41 | aPc7yLvXn3RefQa/tFwUis1CA98= 42 | 43 | Frameworks/EyesImages.framework/carthage_dependencies_json.tt 44 | 45 | QR42GLN/wADU+A3PM6elHoZJ8NA= 46 | 47 | Frameworks/EyesImages.framework/podspec.thor 48 | 49 | RP2wmWtkNEdPTlBe9Chg8xPtxtI= 50 | 51 | Frameworks/EyesImages.framework/podspec.tt 52 | 53 | kgkaoU9H2J17Zgs9Q/F+0oZv+ck= 54 | 55 | Frameworks/EyesImages.framework/set_tags.sh 56 | 57 | bDqclV6o7RSQ56C+EZ4C+w0HOxM= 58 | 59 | Frameworks/EyesImages.framework/update_carthage_integration.sh 60 | 61 | UGhGbwfNV7niwXBxxNiIJOn2GJ0= 62 | 63 | Frameworks/EyesImages.framework/update_version_on_cocoapods.sh 64 | 65 | YosveBWYSTorY5OfTPrAqsPnfRc= 66 | 67 | Frameworks/libswiftCore.dylib 68 | 69 | rrAp64iPhUL40XQR7JlGMDIZaMA= 70 | 71 | Frameworks/libswiftCoreFoundation.dylib 72 | 73 | P4IT9OqWCWZ8FyecMxQHhM6h4G8= 74 | 75 | Frameworks/libswiftCoreGraphics.dylib 76 | 77 | l7cOuKnVMm1hG9tuAE36M0hgwY4= 78 | 79 | Frameworks/libswiftDarwin.dylib 80 | 81 | XJGVexKAsC220QzBQHwL6VS/whc= 82 | 83 | Frameworks/libswiftDispatch.dylib 84 | 85 | xYRhwsR1eeXatGDr8WNyVj93krw= 86 | 87 | Frameworks/libswiftFoundation.dylib 88 | 89 | WclOTQyDfPDOGEjZboBz+yfxGVQ= 90 | 91 | Frameworks/libswiftObjectiveC.dylib 92 | 93 | W4v+YlroD8+v27M4zKa/3r9eqdA= 94 | 95 | Info.plist 96 | 97 | 5SiovgviETh/+O120dEsE62WKuA= 98 | 99 | 100 | files2 101 | 102 | Frameworks/EyesImages.framework/.gitkeep 103 | 104 | hash 105 | 106 | 2jmj7l5rSw0yVb/vlWAYkK/YBwk= 107 | 108 | hash2 109 | 110 | 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= 111 | 112 | 113 | Frameworks/EyesImages.framework/.travis.yml 114 | 115 | hash 116 | 117 | yWyVd3M8YYB8CQ5MhlY1yTDt8m4= 118 | 119 | hash2 120 | 121 | elfZ/dHVDlfrkzYN1buapwRQ4Ahdl1fIQDz49xusry4= 122 | 123 | 124 | Frameworks/EyesImages.framework/CHANGELOG.md 125 | 126 | hash 127 | 128 | Ve8s7/MVCaGGltYNbnhHleF30Nw= 129 | 130 | hash2 131 | 132 | 9pVD/CDMXoFvl175mzPvlFjRRXQNao62kl9peTaUDtg= 133 | 134 | 135 | Frameworks/EyesImages.framework/EyesImages 136 | 137 | hash 138 | 139 | zPh3z0rcgL3CzWffX+rRzT0RGdM= 140 | 141 | hash2 142 | 143 | W+18/sPkfbJS4uh2FAlceOLv3qNpg5juu3OV8F+QGeg= 144 | 145 | 146 | Frameworks/EyesImages.framework/Gemfile 147 | 148 | hash 149 | 150 | 9yRft9MJyV8hWCKT3jQ2XPoPk9s= 151 | 152 | hash2 153 | 154 | o85Tau514JChZmNnh8C8nq63p++d+ZqQ7LH7vunZuDs= 155 | 156 | 157 | Frameworks/EyesImages.framework/Info.plist 158 | 159 | hash 160 | 161 | QJwVpITuyWMG5QPinODTe827PwQ= 162 | 163 | hash2 164 | 165 | TjfzMfoeOKKDPPf9KUKtK0mV6xjbVizjJjCVkzy9i10= 166 | 167 | 168 | Frameworks/EyesImages.framework/_CodeSignature/CodeResources 169 | 170 | hash 171 | 172 | MH5AAYeccQqQYOWdD4wbO/PV9Do= 173 | 174 | hash2 175 | 176 | Go4ZoZhzUrR5HeDqBxONNq5n0wxOd9sKtXu3zGw4fA8= 177 | 178 | 179 | Frameworks/EyesImages.framework/build_sdk.sh 180 | 181 | hash 182 | 183 | +ltLaR5Jd9hl+DrIc/OIBBl+53Y= 184 | 185 | hash2 186 | 187 | /pOrDuUX9NT1ofjzU6YUHRiCFDDEQcMVIFcUyCRSckw= 188 | 189 | 190 | Frameworks/EyesImages.framework/carthage_dependencies_json.thor 191 | 192 | hash 193 | 194 | aPc7yLvXn3RefQa/tFwUis1CA98= 195 | 196 | hash2 197 | 198 | FhpyCgVGoveLPe3I25m74bGQFQI5N04leIa1DKjwAz8= 199 | 200 | 201 | Frameworks/EyesImages.framework/carthage_dependencies_json.tt 202 | 203 | hash 204 | 205 | QR42GLN/wADU+A3PM6elHoZJ8NA= 206 | 207 | hash2 208 | 209 | +sqj1LcJxc+rtX4hkmLR9+CRHb4eTQx+Z++vWOpMjtk= 210 | 211 | 212 | Frameworks/EyesImages.framework/podspec.thor 213 | 214 | hash 215 | 216 | RP2wmWtkNEdPTlBe9Chg8xPtxtI= 217 | 218 | hash2 219 | 220 | k+lD2AYYyJjmNLO+/yCvwQ8FGQ0F7Kmn78Z/cQEiyRk= 221 | 222 | 223 | Frameworks/EyesImages.framework/podspec.tt 224 | 225 | hash 226 | 227 | kgkaoU9H2J17Zgs9Q/F+0oZv+ck= 228 | 229 | hash2 230 | 231 | pR2CaxkjnA5CgCi53GVF23QhCXi9raDDU1yJSFf7RsU= 232 | 233 | 234 | Frameworks/EyesImages.framework/set_tags.sh 235 | 236 | hash 237 | 238 | bDqclV6o7RSQ56C+EZ4C+w0HOxM= 239 | 240 | hash2 241 | 242 | Fi+AfbNgTXCIaKRcjT3BaFiRahKpYYJJk+/OQlFmE5Q= 243 | 244 | 245 | Frameworks/EyesImages.framework/update_carthage_integration.sh 246 | 247 | hash 248 | 249 | UGhGbwfNV7niwXBxxNiIJOn2GJ0= 250 | 251 | hash2 252 | 253 | sIOKtClNSioYRXxMKI+xWYAeKSCN+lbNQ1EfzOAN5Gk= 254 | 255 | 256 | Frameworks/EyesImages.framework/update_version_on_cocoapods.sh 257 | 258 | hash 259 | 260 | YosveBWYSTorY5OfTPrAqsPnfRc= 261 | 262 | hash2 263 | 264 | cr4tkpehfLDHbSEw4SsOdyi5LUAMcYYKuj5YftRvDUo= 265 | 266 | 267 | Frameworks/libswiftCore.dylib 268 | 269 | hash 270 | 271 | rrAp64iPhUL40XQR7JlGMDIZaMA= 272 | 273 | hash2 274 | 275 | SVCZK2UG9ihtWggcfIn/i94g//jyC4cI73gURFdHavA= 276 | 277 | 278 | Frameworks/libswiftCoreFoundation.dylib 279 | 280 | hash 281 | 282 | P4IT9OqWCWZ8FyecMxQHhM6h4G8= 283 | 284 | hash2 285 | 286 | /wz85l+DKAaQ7/BS+77vK5X998iA4Lwz+DGJ95g4kZw= 287 | 288 | 289 | Frameworks/libswiftCoreGraphics.dylib 290 | 291 | hash 292 | 293 | l7cOuKnVMm1hG9tuAE36M0hgwY4= 294 | 295 | hash2 296 | 297 | 2g2ULh1dF2q53hPG3PIdHtRNobjaoh8CmjkUk9GLjTs= 298 | 299 | 300 | Frameworks/libswiftDarwin.dylib 301 | 302 | hash 303 | 304 | XJGVexKAsC220QzBQHwL6VS/whc= 305 | 306 | hash2 307 | 308 | Fy3X7nPk7IgG+lCSWKHuMHgGz6Yi56UOKe6XajzinhU= 309 | 310 | 311 | Frameworks/libswiftDispatch.dylib 312 | 313 | hash 314 | 315 | xYRhwsR1eeXatGDr8WNyVj93krw= 316 | 317 | hash2 318 | 319 | ZSH1H7EN5E4TGGB63N2+7rR7N+rDR1LBmkhABOf9RVQ= 320 | 321 | 322 | Frameworks/libswiftFoundation.dylib 323 | 324 | hash 325 | 326 | WclOTQyDfPDOGEjZboBz+yfxGVQ= 327 | 328 | hash2 329 | 330 | 6SyHvvl3dAOzLH6bFEeF41TPcUHS3iYOdFK7I0FEU6M= 331 | 332 | 333 | Frameworks/libswiftObjectiveC.dylib 334 | 335 | hash 336 | 337 | W4v+YlroD8+v27M4zKa/3r9eqdA= 338 | 339 | hash2 340 | 341 | zLWBGbdbTQk6chVChX0c8CFwhq8ogd9K00QEU5AufEY= 342 | 343 | 344 | 345 | rules 346 | 347 | ^.* 348 | 349 | ^.*\.lproj/ 350 | 351 | optional 352 | 353 | weight 354 | 1000 355 | 356 | ^.*\.lproj/locversion.plist$ 357 | 358 | omit 359 | 360 | weight 361 | 1100 362 | 363 | ^Base\.lproj/ 364 | 365 | weight 366 | 1010 367 | 368 | ^version.plist$ 369 | 370 | 371 | rules2 372 | 373 | .*\.dSYM($|/) 374 | 375 | weight 376 | 11 377 | 378 | ^(.*/)?\.DS_Store$ 379 | 380 | omit 381 | 382 | weight 383 | 2000 384 | 385 | ^.* 386 | 387 | ^.*\.lproj/ 388 | 389 | optional 390 | 391 | weight 392 | 1000 393 | 394 | ^.*\.lproj/locversion.plist$ 395 | 396 | omit 397 | 398 | weight 399 | 1100 400 | 401 | ^Base\.lproj/ 402 | 403 | weight 404 | 1010 405 | 406 | ^Info\.plist$ 407 | 408 | omit 409 | 410 | weight 411 | 20 412 | 413 | ^PkgInfo$ 414 | 415 | omit 416 | 417 | weight 418 | 20 419 | 420 | ^embedded\.provisionprofile$ 421 | 422 | weight 423 | 20 424 | 425 | ^version\.plist$ 426 | 427 | weight 428 | 20 429 | 430 | 431 | 432 | 433 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/README.md: -------------------------------------------------------------------------------- 1 | ## How To Get Started 2 | To make any of Applitools SDKs(**EyesXCUI**, **EyesEarlGrey** and **EyesImages**) work, you should install it using [CocoaPods](http://cocoapods.org), [Carthage](https://github.com/Carthage/Carthage) or manually. 3 | 4 | ## Installation with CocoaPods 5 | ### Step 1: Install gem 6 | CocoaPods is distributed as a ruby gem, and is installed by running the following commands in terminal: 7 | ```bash 8 | $ gem install cocoapods 9 | ``` 10 | 11 | ### Step 2: Create a Podfile 12 | Open a terminal window, and $ cd into your project directory. Then, run the following command: 13 | 14 | ```bash 15 | $ pod init 16 | ``` 17 | 18 | ### Step 3: Edit the Podfile 19 | Specify it in your `Podfile`: 20 | ##### EyesXCUI 21 | ```ruby 22 | target 'APPLICATION_TARGET_NAME' do 23 | target 'UI_TESTING_TARGET_NAME' do 24 | pod 'EyesXCUI' 25 | end 26 | end 27 | ``` 28 | ##### EyesEarlGrey 29 | ```ruby 30 | target 'APPLICATION_TARGET_NAME' do 31 | target 'UNIT_TESTING_TARGET_NAME' do 32 | pod 'EyesEarlGrey' 33 | end 34 | end 35 | ``` 36 | ##### EyesEarlGrey 37 | ```ruby 38 | target 'APPLICATION_TARGET_NAME' do 39 | target 'UNIT_TESTING_TARGET_NAME' do 40 | pod 'EyesImages' 41 | end 42 | end 43 | ``` 44 | 45 | Save your `Podfile`. 46 | 47 | ### Step 4: Install dependencies 48 | Run the following command in the terminal window: 49 | ```bash 50 | $ pod install 51 | ``` 52 | 53 | Close Xcode, and then open your project's `.xcworkspace` file to launch Xcode. 54 | From this time onwards, you must use the `.xcworkspace` file to open the project. 55 | 56 | ## Installation with Carthage 57 | ### Step 1: Install Carthage 58 | You can install Carthage with [Homebrew](http://brew.sh/) using the following command: 59 | ```bash 60 | $ brew update 61 | $ brew install carthage 62 | ``` 63 | 64 | Or choose [another installation method](https://github.com/Carthage/Carthage#installing-carthage). 65 | 66 | ### Step 2: Create a Cartfile 67 | Create a `Cartfile` in the same directory, where your `.xcodeproj` or `.xcworkspace` locates, using command: 68 | ```bash 69 | $ touch Cartfile 70 | ``` 71 | ### Step 3: Edit the Cartfile 72 | Specify it in your `Cartfile`: 73 | 74 | ##### EyesXCUI 75 | ```ogdl 76 | binary "https://applitools.bintray.com/iOS/CarthageEyesXCUI/VERSION/EyesXCUI-VERSION.json" 77 | ``` 78 | 79 | ##### EyesEarlGrey 80 | ```ogdl 81 | binary "https://applitools.bintray.com/iOS/CarthageEyesEarlGrey/VERSION/EyesEarlGrey-VERSION.json" 82 | ``` 83 | 84 | ##### EyesImages 85 | ```ogdl 86 | binary "https://applitools.bintray.com/iOS/CarthageEyesImages/VERSION/EyesImages-VERSION.json" 87 | ``` 88 | 89 | Replace 'VERSION' with the number value of SDK. 90 | Save your `Cartfile`. 91 | 92 | ### Step 4: Install dependencies 93 | Run the following command in the terminal window: 94 | ```bash 95 | $ carthage update 96 | ``` 97 | 98 | ### Step 5: Set up environment: 99 | - Drag the built binary of Applitools's SDK, that you want to work with(EyesXCUI.framework, EyesEarlGrey.framework, EyesImages.framework), from Carthage/Build/ into your application’s Xcode project. 100 | - On your application targets’ Build Phases settings tab, click the + icon and choose New Run Script Phase. Create a Run Script in which you specify your shell (ex: /bin/sh), add the following contents to the script area below the shell: 101 | ```bash 102 | /usr/local/bin/carthage copy-frameworks 103 | ``` 104 | - Click the + under `Input Files` and add an entry for each framework: 105 | ##### EyesXCUI 106 | ```bash 107 | $(SRCROOT)/Carthage/Build/iOS/EyesXCUI.framework 108 | ``` 109 | ##### EyesEarlGrey 110 | ```bash 111 | $(SRCROOT)/Carthage/Build/iOS/EyesEarlGrey.framework 112 | ``` 113 | ##### EyesImages 114 | ```bash 115 | $(SRCROOT)/Carthage/Build/iOS/EyesImages.framework 116 | ``` 117 | - Click the + under `Output Files` and add an entry for each framework: 118 | ##### EyesXCUI 119 | ```bash 120 | $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/EyesXCUI.framework 121 | ``` 122 | ##### EyesEarlGrey 123 | ```bash 124 | $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/EyesEarlGrey.framework 125 | ``` 126 | ##### EyesImages 127 | ```bash 128 | $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/EyesImages.framework 129 | ``` 130 | 131 | ## Manual installation 132 | 1. Drag-and-drop EyesXCUI.framework to UI test target. 133 | ![](https://applitools.bintray.com/Examples/Manual%20Installation%20Guide%20Images/Step1-1.png) 134 | ![](https://applitools.bintray.com/Examples/Manual%20Installation%20Guide%20Images/Step1-2.png) 135 | 136 | 2. Open project navigator, select UI tests target(where you want to work with EyesXCUI SDK). Select **Build Phases** section. 137 | ![](https://applitools.bintray.com/Examples/Manual%20Installation%20Guide%20Images/Step2.png) 138 | 139 | 3. Select **Copy Files** phase(or create if it does not exist by tapping **+** button on the top left corner of Project Navigator). 140 | ![](https://applitools.bintray.com/Examples/Manual%20Installation%20Guide%20Images/Step3-1.png) 141 | ![](https://applitools.bintray.com/Examples/Manual%20Installation%20Guide%20Images/Step3-2.png) 142 | 143 | 4. Tap **+** button on **Copy Files** phase, find and add EyesXCUI.framework. 144 | ![](https://applitools.bintray.com/Examples/Manual%20Installation%20Guide%20Images/Step4-1.png) 145 | ![](https://applitools.bintray.com/Examples/Manual%20Installation%20Guide%20Images/Step4-2.png) 146 | 147 | 5. Change **Destination** value to *Frameworks* on **Copy Files** phase. 148 | ![](https://applitools.bintray.com/Examples/Manual%20Installation%20Guide%20Images/Step5.png) 149 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/HelloWorldiOS.app/_CodeSignature/CodeResources: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | Assets.car 8 | 9 | VRDSIpEl+TEUypJHofhk4h/WRx4= 10 | 11 | Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib/objects-13.0+.nib 12 | 13 | WHL0yoGjEmKnlspYXUL17ZJ87WI= 14 | 15 | Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib/runtime.nib 16 | 17 | mMb9DYxnTBqQOkUo6G+1GBchZCg= 18 | 19 | Base.lproj/LaunchScreen.storyboardc/Info.plist 20 | 21 | n2t8gsDpfE6XkhG31p7IQJRxTxU= 22 | 23 | Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib/objects-13.0+.nib 24 | 25 | s3s4zIwfb3by+EUfXCIqnhqmFqg= 26 | 27 | Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib/runtime.nib 28 | 29 | +1bc+05vtCmmfnuli/VPoYPWXtE= 30 | 31 | Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib/objects-13.0+.nib 32 | 33 | MOnNuyxy+gbv0ZsRdN7Aoq174Z8= 34 | 35 | Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib/runtime.nib 36 | 37 | bE8FodLiRgjQeLxnALxDTAF+nr8= 38 | 39 | Base.lproj/Main.storyboardc/Info.plist 40 | 41 | MDrKFvFWroTb0+KEbQShBcoBvo4= 42 | 43 | Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib/objects-13.0+.nib 44 | 45 | Dd+WTZvpxdBmZ4DG7vK0M9cdkv8= 46 | 47 | Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib/runtime.nib 48 | 49 | Ay769Ng0wjcEayVDXXqHO1IPw7k= 50 | 51 | Frameworks/XCTAutomationSupport.framework/Info.plist 52 | 53 | jreU5hZGNCik2Hp5uPrGZUy11X8= 54 | 55 | Frameworks/XCTAutomationSupport.framework/XCTAutomationSupport 56 | 57 | DUF+a5Z+T16n5pmNIgOYP+s3mOk= 58 | 59 | Frameworks/XCTAutomationSupport.framework/_CodeSignature/CodeResources 60 | 61 | 6feUATTd0/r2tER+rb3JnV0+CQY= 62 | 63 | Frameworks/XCTAutomationSupport.framework/version.plist 64 | 65 | IBuwnssTaVoEqhVHtNTT91gSl10= 66 | 67 | Frameworks/XCTest.framework/Info.plist 68 | 69 | PKZERfvFR9NslOzRKnNmu1CCGOk= 70 | 71 | Frameworks/XCTest.framework/XCTest 72 | 73 | n5db+miM5jX+gnf1Sh637Gr89Zw= 74 | 75 | Frameworks/XCTest.framework/_CodeSignature/CodeResources 76 | 77 | PrHbL9gCjHUBaCqWSsu0b+EGnYc= 78 | 79 | Frameworks/XCTest.framework/en.lproj/InfoPlist.strings 80 | 81 | hash 82 | 83 | TuBj57ZP6zBqcL9HttO2Rucaw9E= 84 | 85 | optional 86 | 87 | 88 | Frameworks/XCTest.framework/version.plist 89 | 90 | IBuwnssTaVoEqhVHtNTT91gSl10= 91 | 92 | Frameworks/libXCTestBundleInject.dylib 93 | 94 | FjI0l272em8/mVEjw4rbrzKfxZA= 95 | 96 | Frameworks/libXCTestSwiftSupport.dylib 97 | 98 | VJQSqjeRdA4318OjlAyd6XT73/c= 99 | 100 | Info.plist 101 | 102 | GdcAHF9owZ3ea1KIky3D2gtvfQk= 103 | 104 | PkgInfo 105 | 106 | n57qDP4tZfLD1rCS43W0B4LQjzE= 107 | 108 | PlugIns/EyesImagesTests(UnitTests).xctest/EyesImagesTests(UnitTests) 109 | 110 | 7DGtOmc0xjF6QcgjEGlAam4nqog= 111 | 112 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/.gitkeep 113 | 114 | 2jmj7l5rSw0yVb/vlWAYkK/YBwk= 115 | 116 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/.travis.yml 117 | 118 | yWyVd3M8YYB8CQ5MhlY1yTDt8m4= 119 | 120 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/CHANGELOG.md 121 | 122 | Ve8s7/MVCaGGltYNbnhHleF30Nw= 123 | 124 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/EyesImages 125 | 126 | zPh3z0rcgL3CzWffX+rRzT0RGdM= 127 | 128 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/Gemfile 129 | 130 | 9yRft9MJyV8hWCKT3jQ2XPoPk9s= 131 | 132 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/Info.plist 133 | 134 | QJwVpITuyWMG5QPinODTe827PwQ= 135 | 136 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/_CodeSignature/CodeResources 137 | 138 | MH5AAYeccQqQYOWdD4wbO/PV9Do= 139 | 140 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/build_sdk.sh 141 | 142 | +ltLaR5Jd9hl+DrIc/OIBBl+53Y= 143 | 144 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/carthage_dependencies_json.thor 145 | 146 | aPc7yLvXn3RefQa/tFwUis1CA98= 147 | 148 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/carthage_dependencies_json.tt 149 | 150 | QR42GLN/wADU+A3PM6elHoZJ8NA= 151 | 152 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/podspec.thor 153 | 154 | RP2wmWtkNEdPTlBe9Chg8xPtxtI= 155 | 156 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/podspec.tt 157 | 158 | kgkaoU9H2J17Zgs9Q/F+0oZv+ck= 159 | 160 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/set_tags.sh 161 | 162 | bDqclV6o7RSQ56C+EZ4C+w0HOxM= 163 | 164 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/update_carthage_integration.sh 165 | 166 | UGhGbwfNV7niwXBxxNiIJOn2GJ0= 167 | 168 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/update_version_on_cocoapods.sh 169 | 170 | YosveBWYSTorY5OfTPrAqsPnfRc= 171 | 172 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCore.dylib 173 | 174 | rrAp64iPhUL40XQR7JlGMDIZaMA= 175 | 176 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCoreFoundation.dylib 177 | 178 | P4IT9OqWCWZ8FyecMxQHhM6h4G8= 179 | 180 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCoreGraphics.dylib 181 | 182 | l7cOuKnVMm1hG9tuAE36M0hgwY4= 183 | 184 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftDarwin.dylib 185 | 186 | XJGVexKAsC220QzBQHwL6VS/whc= 187 | 188 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftDispatch.dylib 189 | 190 | xYRhwsR1eeXatGDr8WNyVj93krw= 191 | 192 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftFoundation.dylib 193 | 194 | WclOTQyDfPDOGEjZboBz+yfxGVQ= 195 | 196 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftObjectiveC.dylib 197 | 198 | W4v+YlroD8+v27M4zKa/3r9eqdA= 199 | 200 | PlugIns/EyesImagesTests(UnitTests).xctest/Info.plist 201 | 202 | 5SiovgviETh/+O120dEsE62WKuA= 203 | 204 | PlugIns/EyesImagesTests(UnitTests).xctest/_CodeSignature/CodeResources 205 | 206 | emDLoGtkWr9+vLCcru+ROVyhn4U= 207 | 208 | README.md 209 | 210 | kYgWYLMpRZ7XL+WlSEbTWiJHOhE= 211 | 212 | 213 | files2 214 | 215 | Assets.car 216 | 217 | hash2 218 | 219 | xeLRKaHSztI9Z4QpWIIgAjLRHzaOLvlOK9EllnmjKmc= 220 | 221 | 222 | Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib/objects-13.0+.nib 223 | 224 | hash2 225 | 226 | UGiFKNa5Yla8Qs4RQ32wjiGec7O/H1jd2HqSx52WEr4= 227 | 228 | 229 | Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib/runtime.nib 230 | 231 | hash2 232 | 233 | pXBIGhu9K1neDcOi4UXZ4SLs9824ftzPYX9uxhGxRkQ= 234 | 235 | 236 | Base.lproj/LaunchScreen.storyboardc/Info.plist 237 | 238 | hash2 239 | 240 | HyVdXMU7Ux4/KalAao30mpWOK/lEPT4gvYN09wf31cg= 241 | 242 | 243 | Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib/objects-13.0+.nib 244 | 245 | hash2 246 | 247 | e3D28uI9u8eI6w89oZM9BufoLlrAsWALyQVEBymoON8= 248 | 249 | 250 | Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib/runtime.nib 251 | 252 | hash2 253 | 254 | A7tNhBxORljFklNw8CP2/jCbAsL9+El73naMUYBEMjQ= 255 | 256 | 257 | Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib/objects-13.0+.nib 258 | 259 | hash2 260 | 261 | dU/SzRlIts+VURZFM3uDALIHsnqZWD6OC7+MPHF/jxw= 262 | 263 | 264 | Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib/runtime.nib 265 | 266 | hash2 267 | 268 | fjCp83byuhmbFxEe6HHLHUdnGoUoOsvy6XTgrGC9yTg= 269 | 270 | 271 | Base.lproj/Main.storyboardc/Info.plist 272 | 273 | hash2 274 | 275 | PpvapAjR62rl6Ym4E6hkTgpKmBICxTaQXeUqcpHmmqQ= 276 | 277 | 278 | Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib/objects-13.0+.nib 279 | 280 | hash2 281 | 282 | o6dX3JFqD9/QtfPuvvRR05g/LSiT0Sb7pBilh4A39ag= 283 | 284 | 285 | Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib/runtime.nib 286 | 287 | hash2 288 | 289 | 6imaquWxEyBo9oPd/CnM8vGGVQ6evRBRj6/zsO0fuWM= 290 | 291 | 292 | Frameworks/XCTAutomationSupport.framework/Info.plist 293 | 294 | hash2 295 | 296 | +nr3ouuUEQTKa3ftEYI3Fg0rDlErksYX+eDxpZ1LVaI= 297 | 298 | 299 | Frameworks/XCTAutomationSupport.framework/XCTAutomationSupport 300 | 301 | hash2 302 | 303 | kZCvHePeVutqsyDtgfClyDWqxTeDIZDrp+iwV39UevE= 304 | 305 | 306 | Frameworks/XCTAutomationSupport.framework/_CodeSignature/CodeResources 307 | 308 | hash2 309 | 310 | AKj1Rrfouzxuyo4wUGoNg1mj1lAqZrsPYOvuSMJn8Aw= 311 | 312 | 313 | Frameworks/XCTAutomationSupport.framework/version.plist 314 | 315 | hash2 316 | 317 | JWd/ru1b6k0uNZgO60tQbs9H8n+wZ9N9P0FKdkazZ2c= 318 | 319 | 320 | Frameworks/XCTest.framework/Info.plist 321 | 322 | hash2 323 | 324 | T3aARpB6bVvaFExMgjbfOQc+iQUEFERrbnjO8L6DvZc= 325 | 326 | 327 | Frameworks/XCTest.framework/XCTest 328 | 329 | hash2 330 | 331 | CpxZ1W8v75Koo6FOru2i8z4EVvgoPRc4T0TIiu62pB0= 332 | 333 | 334 | Frameworks/XCTest.framework/_CodeSignature/CodeResources 335 | 336 | hash2 337 | 338 | 9ir34yGFEiL4iXHgeWCV1xU+GGEJQ/IYVsoy2yc9Nks= 339 | 340 | 341 | Frameworks/XCTest.framework/en.lproj/InfoPlist.strings 342 | 343 | hash2 344 | 345 | 89RGkjZaKuewYnjpzwhIswhqfrU8+pcEXqM/DHVrUmo= 346 | 347 | optional 348 | 349 | 350 | Frameworks/XCTest.framework/version.plist 351 | 352 | hash2 353 | 354 | JWd/ru1b6k0uNZgO60tQbs9H8n+wZ9N9P0FKdkazZ2c= 355 | 356 | 357 | Frameworks/libXCTestBundleInject.dylib 358 | 359 | hash2 360 | 361 | r1hEe52+xQY2ZdMm4JF7zjPjDt9jCnxR7dH/Q63lX+A= 362 | 363 | 364 | Frameworks/libXCTestSwiftSupport.dylib 365 | 366 | hash2 367 | 368 | 45pg9HlsUKawUobZCeEKqB3iB74fbPfWZUqEs9oZTYM= 369 | 370 | 371 | PlugIns/EyesImagesTests(UnitTests).xctest/EyesImagesTests(UnitTests) 372 | 373 | hash2 374 | 375 | HlTifwIpZyfb6EhCGATknL7JdND1GIZ0yZ0B0YO+nZU= 376 | 377 | 378 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/.gitkeep 379 | 380 | hash2 381 | 382 | 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= 383 | 384 | 385 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/.travis.yml 386 | 387 | hash2 388 | 389 | elfZ/dHVDlfrkzYN1buapwRQ4Ahdl1fIQDz49xusry4= 390 | 391 | 392 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/CHANGELOG.md 393 | 394 | hash2 395 | 396 | 9pVD/CDMXoFvl175mzPvlFjRRXQNao62kl9peTaUDtg= 397 | 398 | 399 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/EyesImages 400 | 401 | hash2 402 | 403 | W+18/sPkfbJS4uh2FAlceOLv3qNpg5juu3OV8F+QGeg= 404 | 405 | 406 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/Gemfile 407 | 408 | hash2 409 | 410 | o85Tau514JChZmNnh8C8nq63p++d+ZqQ7LH7vunZuDs= 411 | 412 | 413 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/Info.plist 414 | 415 | hash2 416 | 417 | TjfzMfoeOKKDPPf9KUKtK0mV6xjbVizjJjCVkzy9i10= 418 | 419 | 420 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/_CodeSignature/CodeResources 421 | 422 | hash2 423 | 424 | Go4ZoZhzUrR5HeDqBxONNq5n0wxOd9sKtXu3zGw4fA8= 425 | 426 | 427 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/build_sdk.sh 428 | 429 | hash2 430 | 431 | /pOrDuUX9NT1ofjzU6YUHRiCFDDEQcMVIFcUyCRSckw= 432 | 433 | 434 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/carthage_dependencies_json.thor 435 | 436 | hash2 437 | 438 | FhpyCgVGoveLPe3I25m74bGQFQI5N04leIa1DKjwAz8= 439 | 440 | 441 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/carthage_dependencies_json.tt 442 | 443 | hash2 444 | 445 | +sqj1LcJxc+rtX4hkmLR9+CRHb4eTQx+Z++vWOpMjtk= 446 | 447 | 448 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/podspec.thor 449 | 450 | hash2 451 | 452 | k+lD2AYYyJjmNLO+/yCvwQ8FGQ0F7Kmn78Z/cQEiyRk= 453 | 454 | 455 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/podspec.tt 456 | 457 | hash2 458 | 459 | pR2CaxkjnA5CgCi53GVF23QhCXi9raDDU1yJSFf7RsU= 460 | 461 | 462 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/set_tags.sh 463 | 464 | hash2 465 | 466 | Fi+AfbNgTXCIaKRcjT3BaFiRahKpYYJJk+/OQlFmE5Q= 467 | 468 | 469 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/update_carthage_integration.sh 470 | 471 | hash2 472 | 473 | sIOKtClNSioYRXxMKI+xWYAeKSCN+lbNQ1EfzOAN5Gk= 474 | 475 | 476 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/EyesImages.framework/update_version_on_cocoapods.sh 477 | 478 | hash2 479 | 480 | cr4tkpehfLDHbSEw4SsOdyi5LUAMcYYKuj5YftRvDUo= 481 | 482 | 483 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCore.dylib 484 | 485 | hash2 486 | 487 | SVCZK2UG9ihtWggcfIn/i94g//jyC4cI73gURFdHavA= 488 | 489 | 490 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCoreFoundation.dylib 491 | 492 | hash2 493 | 494 | /wz85l+DKAaQ7/BS+77vK5X998iA4Lwz+DGJ95g4kZw= 495 | 496 | 497 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftCoreGraphics.dylib 498 | 499 | hash2 500 | 501 | 2g2ULh1dF2q53hPG3PIdHtRNobjaoh8CmjkUk9GLjTs= 502 | 503 | 504 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftDarwin.dylib 505 | 506 | hash2 507 | 508 | Fy3X7nPk7IgG+lCSWKHuMHgGz6Yi56UOKe6XajzinhU= 509 | 510 | 511 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftDispatch.dylib 512 | 513 | hash2 514 | 515 | ZSH1H7EN5E4TGGB63N2+7rR7N+rDR1LBmkhABOf9RVQ= 516 | 517 | 518 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftFoundation.dylib 519 | 520 | hash2 521 | 522 | 6SyHvvl3dAOzLH6bFEeF41TPcUHS3iYOdFK7I0FEU6M= 523 | 524 | 525 | PlugIns/EyesImagesTests(UnitTests).xctest/Frameworks/libswiftObjectiveC.dylib 526 | 527 | hash2 528 | 529 | zLWBGbdbTQk6chVChX0c8CFwhq8ogd9K00QEU5AufEY= 530 | 531 | 532 | PlugIns/EyesImagesTests(UnitTests).xctest/Info.plist 533 | 534 | hash2 535 | 536 | pQIQ61rBBL3jCP133rQI4uQ+p7yuqzG77qHZuhb9NiY= 537 | 538 | 539 | PlugIns/EyesImagesTests(UnitTests).xctest/_CodeSignature/CodeResources 540 | 541 | hash2 542 | 543 | 1wfn9BrRaVtxb8jC9ukNJN/ZMUc+zgQpvnEu6sXhmDc= 544 | 545 | 546 | README.md 547 | 548 | hash2 549 | 550 | 1iWhRlkc4N3arYBvuBkRY7zU4FRHLEnGjraYvmXog4o= 551 | 552 | 553 | 554 | rules 555 | 556 | ^.* 557 | 558 | ^.*\.lproj/ 559 | 560 | optional 561 | 562 | weight 563 | 1000 564 | 565 | ^.*\.lproj/locversion.plist$ 566 | 567 | omit 568 | 569 | weight 570 | 1100 571 | 572 | ^Base\.lproj/ 573 | 574 | weight 575 | 1010 576 | 577 | ^version.plist$ 578 | 579 | 580 | rules2 581 | 582 | .*\.dSYM($|/) 583 | 584 | weight 585 | 11 586 | 587 | ^(.*/)?\.DS_Store$ 588 | 589 | omit 590 | 591 | weight 592 | 2000 593 | 594 | ^.* 595 | 596 | ^.*\.lproj/ 597 | 598 | optional 599 | 600 | weight 601 | 1000 602 | 603 | ^.*\.lproj/locversion.plist$ 604 | 605 | omit 606 | 607 | weight 608 | 1100 609 | 610 | ^Base\.lproj/ 611 | 612 | weight 613 | 1010 614 | 615 | ^Info\.plist$ 616 | 617 | omit 618 | 619 | weight 620 | 20 621 | 622 | ^PkgInfo$ 623 | 624 | omit 625 | 626 | weight 627 | 20 628 | 629 | ^embedded\.provisionprofile$ 630 | 631 | weight 632 | 20 633 | 634 | ^version\.plist$ 635 | 636 | weight 637 | 20 638 | 639 | 640 | 641 | 642 | -------------------------------------------------------------------------------- /src/test/resources/sampleApps/TheApp-VR-v1.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/TheApp-VR-v1.apk -------------------------------------------------------------------------------- /src/test/resources/sampleApps/VodQAReactNative.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/VodQAReactNative.zip -------------------------------------------------------------------------------- /src/test/resources/sampleApps/eyes-ios-hello-world.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anandbagmar/AppiumJavaSample/e2e924d959d7afa9e0795f28228da005e2330693/src/test/resources/sampleApps/eyes-ios-hello-world.zip -------------------------------------------------------------------------------- /src/test/resources/testng.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | --------------------------------------------------------------------------------