Android тесты с Appium и Gradle

Недавно я начал изучать некоторые функциональные тесты с Appium. Я хотел бы запустить тесты Appium через студию Android через gradle.

Кто-нибудь пытался это сделать, и если да, то можете ли вы дать мне некоторую информацию об установке, например о том, какие задачи gradle использовать и т.д.

Я включил необходимые зависимости в мой файл сборки:

androidTestCompile ( 'io.appium: Java-клиент: 2.0.0')

У меня есть образец теста ниже, мне просто нужно запустить его через 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();
    }
    }
}

Ответ 1

Запуск этого в командной строке должен просматривать все классы в вашем проекте для одного, называемого TrialTest, и запускать только те тесты

gradle -Dtest.single=TrialTest

У вас должна быть задача gradle, называемая тестом. Убедитесь, что у вас есть это в файле build.gradle

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

Ответ 2

Я сделал это с помощью Eclipse через gradle. Вот пошаговое описание:

  • Создать файл build.gradle
  • укажите repoistories (maven central())
  • укажите все ваши зависимости проекта в разделе "зависимости"
  • Если вы хотите создать файл манифеста, в котором есть все ваши jar, а не упоминать один за другим в classpath, вы можете указать все в одном месте, используя это:

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

Вот оно. Твой хороший ход.

Ответ 3

Я знаю, что это очень старый вопрос. Но здесь является образцом рабочего шаблона для функциональной системы тестирования Android с использованием Appium, который находится на Java и настроен для запуска тестов с использованием Gradle.

Ответ 4

Похоже, до сих пор нет принятого ответа на этот вопрос. Выполнение тестов с помощью gradle аналогично и чисто, чтобы запускать их с помощью maven. В build.gradle вы можете указать тестовые ресурсы, включенные в

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

и после этого после выполнения команды cmd/shell:

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

PS: то, что @BenJi предложило в приведенных ниже ответах, также является хорошим подходом к определению настраиваемой задачи для выполнения любого использования gradle.