Home » Android » java – Android tests with Appium and Gradle

java – Android tests with Appium and Gradle

Posted by: admin May 14, 2020 Leave a comment

Questions:

I recently started looking at doing some functional testing with Appium. I would like to run the Appium tests through Android studio via gradle.

Has anyone attempted to do this and if so can you give me some information on the setup, such as what gradle tasks to use etc.

I have included the necessary dependencies in my build file:

androidTestCompile(‘io.appium:java-client:2.0.0’)

I have a sample test below, I just need a way of running it via gradle 🙂

package com.appium.trial;

import junit.framework.Assert;

import io.appium.java_client.AppiumDriver;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

public class TrialTest {
private static WebDriver wd;

@Before
public void setUp() {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("appium-version", "1.0");
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("platformVersion", "4.4");
    capabilities.setCapability("deviceName", "Samsung Galaxy S4 - 4.2.2 - API 17 - 1080x1920");
    capabilities.setCapability("app", "/Users/chuckster/Documents/Dev/AppiumTrial/appium-trial.apk");
    capabilities.setCapability("appPackage", "com.appium.trial");
    capabilities.setCapability("appActivity", "com.appium.trial.TrialTest");

    try {
        wd = new AppiumDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

    wd.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
}

@Test
public static void testThatClickingTheMotorSectionLeadsToSubSection(){

    wd.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.TextView[1]")).click();
    wd.close();
}

@After
public void tearDown() {
    if (wd != null) {
        wd.quit();
    }
    }
}
How to&Answers:

Running this in the command line should look through all the classes in your project for one called TrialTest and run only those tests

gradle -Dtest.single=TrialTest

You have to have a gradle task called test though. Make sure you have this in your build.gradle file

test {
    testLogging{
        events 'started', 'passed'
    }
}

Answer:

I have done this using Eclipse via gradle. Here are step by step description:

  1. Create a build.gradle file
  2. mention repoistories (maven central())
  3. mention all your project dependencies under “dependencies”
  4. If you want to create a manifest file which has all your jar instead of mentioning one by one in classpath, you can mention all at one place by using this:

    jar {
    manifest.attributes(
    ‘Class-Path’: configurations.runtime.files.collect { it.name }.join(‘ ‘)
    )
    }

Thats it. Your are good to go.

Answer:

I know this is a very old question. But here is a sample working template for Android functional testing framework using Appium, which is in Java and configured to run tests using Gradle.

Answer:

Seems like there is still no accepted answer to this. Running tests with gradle is similar and clean as to running them with maven. In your build.gradle you can specify the test resources included in

sourceSets {
  ...
  test {
    java {
        srcDirs = ["test/model"]  
        // this specifies directories irrespective of default test directory, could be com/appium/trial in your case
    }
  }
}

and there after on cmd/shell executing :

./gradlew test /* executes @Test as defined under the sourceSets*/

PS : What @BenJi has suggested in the below answers is also a good approach to define customised task for executing any using gradle.