Как запустить с помощью терминала на IntelliJ Idea с помощью Maven? - PullRequest
0 голосов
/ 06 мая 2019

Я новичок в IntelliJ IDEA и хотел бы провести свой тест через терминальные линии.

Я уже провел свой тест с помощью кнопки "Выполнить", и мой тест пройден.Теперь мое требование в проекте - запускать с использованием командной строки / терминала.Я действительно понятия не имею, как это сделать.

Я использую Appium в качестве инструмента для мобильной автоматизации.

Это все, где находятся мои тесты, C: \ Users \ ereyne \ IdeaProjects \ ioappium \ src \ test \ java \io

Расположение тестов

Я уже смотрю на Google, но все на высоком уровне, может кто-нибудь предоставить мне пошаговый процесс, как это сделать? Проверка классов Java

Это мой POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.appium</groupId>
    <artifactId>io.appium</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/io.appium/java-client -->
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>7.0.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.testng/testng -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

</project>

Это мой код в IntelliJ:

//package io;//package appium;

import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.MobileElement;
import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.By;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.net.URL;
import java.net.MalformedURLException;

public class appium {

public AndroidDriver<MobileElement> driver;
public WebDriverWait wait;
DesiredCapabilities dc = new DesiredCapabilities();
int CustomerNumber = 10088214;
int AccessCode = 44445555;
String SignIn = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.Button[3]";
String MakeaPayment = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View[2]/android.view.View[2]/android.widget.Button[4]";

@BeforeMethod
public void setUp() throws MalformedURLException {
    dc.setCapability("deviceName", "Pixel XL API 28");
    dc.setCapability("udid", "ce041714789604830d"); //DeviceId from "adb devices" command //Tab S3-674ce8f9 S8-ce041714789604830d
    dc.setCapability("platformName", "Android");
    dc.setCapability("platformVersion", "9.0");
    dc.setCapability("skipUnlock","true");
    dc.setCapability("appPackage", "com.loans.smartmoney");
    dc.setCapability("appActivity","com.loans.smartmoney.MainActivity");
    dc.setCapability("noReset","true");
    dc.setCapability("automationName", "UiAutomator2");
    driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"),dc);
    wait = new WebDriverWait(driver, 30);
}

@Test
public void testLoginTest() {

    //Login
    wait.until(ExpectedConditions.visibilityOfElementLocated
            (By.xpath(SignIn)));
    driver.findElement(By.xpath(SignIn)).click();

    driver.findElement(By.className("android.view.View")).click();
    driver.findElement(By.className("android.widget.EditText")).sendKeys(String.valueOf(CustomerNumber));
    driver.findElements(By.className("android.widget.EditText")).get(1).click();
    driver.findElements(By.className("android.widget.EditText")).get(1).sendKeys(String.valueOf(AccessCode));
    driver.findElements(By.className("android.widget.Button")).get(1).click();

    wait.until(ExpectedConditions.visibilityOfElementLocated
            (By.xpath(MakeaPayment)));
}

@AfterMethod
public void tearDown() {
    driver.quit();
}
}

Я запускаю это терминал: C: \ Users \ ereyne \ IdeaProjects \ ioappium> mvn appium.java

Ошибки: [ОШИБКА] Неизвестная фаза жизненного цикла "appium.java".Вы должны указать действительную фазу жизненного цикла или цель в формате: или: [:] :.Доступные этапы жизненного цикла: проверка, инициализация, генерация электронных источников, процесс-источников, генерация-ресурсов, процесс-ресурсов, компиляция, классы процессов, генерация-тестирование источников, процесс-тестирование источников, генерация-тестирование ресурсов,ресурсы-процесс-тестирование, тест-компиляция, процесс-тест-классы, тест, подготовка-пакет, пакет, тест перед интеграцией, тест интеграции, тест после интеграции, проверка, установка, развертывание, предварительная очистка, чистый, пост-чистый, предварительный сайт, сайт, пост-сайт, сайт-развертывание.-> [Справка 1] [ОШИБКА] [ОШИБКА] Чтобы увидеть полную трассировку стека ошибок, перезапустите Maven с ключом -e.[ОШИБКА] Перезапустите Maven, используя ключ -X, чтобы включить полное ведение журнала отладки.[ОШИБКА] [ОШИБКА] Для получения дополнительной информации об ошибках и возможных решениях, пожалуйста, прочитайте следующие статьи:

Я также пытаюсь запустить это в моем терминале: C: \ Users \ ereyne \ IdeaProjects \ ioappium \ src\ test \ java \ io> javac appium.java

И в результате все не существует, просто пример ошибки ниже.

appium.java: 2: ошибка: пакет io.appium.java_client не существует import io.appium.java_client.MobileBy;

1 Ответ

0 голосов
/ 06 мая 2019

IntelliJ-IDEA на самом деле имеет встроенный терминал, в котором вы можете запускать команды maven на уровне проекта. Просто нажмите кнопку «терминал» в самой нижней панели. Если вы этого не видите, попробуйте «Alt + F12». Если ваш терминал отключен, дважды нажмите Shift, введите «Терминал» и включите его.

Оттуда вы можете запускать команды maven. Допустимые этапы жизненного цикла:

  • чистый
  • Validate
  • компилировать
  • тест
  • пакет
  • проверить
  • установка
  • сайт
  • развернуть

Таким образом, в этом терминале вы уже находитесь в правильном каталоге и можете выполнять допустимые команды maven. Например

  • mvn clean
  • мвн проверить
  • mvn test -e

Вам понадобится плагин Maven-Compiler-Plugin и либо плагин Maven-Surefire-Plugin, либо Maven-Failsafe-plugin. Для моего личного проекта это pom.xml, который я использую, содержащий эти плагины.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>8</source>
                <target>8</target>
            </configuration>
        </plugin>
        <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M3</version>
        </plugin>
    </plugins>
</build>

'source' и 'target' обозначают версию Java, которую использует мой проект. Эти плагины позволяют мне запускать свой проект как проект maven, и в разные моменты жизненного цикла происходят определенные вещи.

В моем случае, на этапе проверки, maven запускает мой плагин для регистрации результатов и создания отчета.

Если вы получаете сообщение об ошибке

'mvn' не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.

Это означает, что Maven не был правильно добавлен в вашу PATH. Это может немного сбивать с толку, но это видео мне очень помогло.

Если вы хотите проверить установку maven, откройте новый терминал и выполните следующую команду

mvn -v

Вы должны получить ответ (с данными вашей системы)

Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T14:41:47-04:00)
Maven home: C:\Program Files\apache-maven-3.6.0\bin\..
Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_201\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

Edit: чтобы ответить на ваш вопрос ниже более подробно, я использую класс TestRunner, разработанный для фреймворка Cucumber, и у меня вообще нет метода main в моей программе. Мой тестовый класс выглядит следующим образом:

package Runner;

import cucumber.api.CucumberOptions;
import cucumber.api.testng.AbstractTestNGCucumberTests;


@CucumberOptions(
        plugin = {"pretty", "html:target/cucumber-pretty", "json:target/Cucumber.json"},
        features = {"src/test/resources/Features"},
        glue = {"StepDefinitions"},
        tags = {"@smoke"},
        monochrome = true
)
public class AppiumTest extends AbstractTestNGCucumberTests {


}

Как видите, в моем классе Test нет кода, он просто указывает на определенные тесты, которые я построил, и выполняет их. В случае использования TestNG в качестве набора тестов он будет выглядеть по-другому, и немного легче понять, что тестируется, но проверьте эти ресурсы, чтобы убедиться, что вы понимаете, что делать.

https://testng.org/doc/documentation-main.html#testng-xml https://howtodoinjava.com/testng/how-to-execute-testng-tests-with-maven-build/

Судя по вашему ответу, есть вероятность, что вы уже собрали комплект TestNG, и вам просто нужно связать его с Maven.

Структура pom.xml довольно проста, так что вы можете использовать это, чтобы помочь вам вставить нужные плагины в свои. Я включил копию моего pom.xml для набора тестов с использованием Cucumber и Appium, чтобы вы могли увидеть формат. Я настоятельно рекомендую вам оставлять комментарии, включая информацию о хранилище, на случай, если вам нужно будет их обновить в спешке.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupID</groupId>
    <artifactId>MobileAutomation</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>net.masterthought</groupId>
                <artifactId>maven-cucumber-reporting</artifactId>
                <version>4.6.0</version>
                <executions>
                    <execution>
                        <id>execution</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <projectName>Test</projectName>
                            <outputDirectory>${project.build.directory}/cucumber-report-html</outputDirectory>
                            <inputDirectory>${project.build.directory}</inputDirectory>
                            <jsonFiles>
                                <param>Cucumber.json</param>
                            </jsonFiles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M3</version>
                <configuration>
                    <failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
                    <failIfNoTests>false</failIfNoTests>
                    <testFailureIgnore>true</testFailureIgnore>
                </configuration>
            </plugin>
        </plugins>
    </build>


    <dependencies>
        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>4.3.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-picocontainer -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-picocontainer</artifactId>
            <version>4.3.0</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-junit -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>4.3.0</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-testng -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>4.3.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.5.0-M1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.appium/java-client -->
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>7.0.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
    </dependencies>
</project>

Как вы можете видеть, в моем pom.xml у меня есть плагин, который генерирует отчет о тестировании во время фазы проверки Maven. Когда я хочу запустить тест, я запусту

mvn clean verify

Это удаляет все мои старые результаты тестов и запускает цикл maven "Verify". Verify выполнит указанные мной тесты, а затем, в зависимости от результатов моих тестов, сборка maven будет либо успешной, либо неудачной.

Если вы видите сбой сборки maven, это не значит, что ваш код не удалось выполнить, это означает, что у maven была причина для сбоя сборки. Прочитайте о конкретных подключаемых модулях maven и фазах жизненного цикла, чтобы понять, что вызывает сбои сборки и какие действия следует ожидать от maven.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...