Как запустить выполнение кейсов один за другим?

Добрый день, подскажите пожалуйста - есть несколько кейсов, но запускается только один кейс (последний). Что нужно чтобы кейсы выполнялись один за другим?

package com.appium.adnroid;

import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;

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

public class ICForms_Login {

private static AppiumDriver driver;
@BeforeTest
public void setup() throws MalformedURLException, InterruptedException {

  DesiredCapabilities capabilities = new DesiredCapabilities();
  capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "SM T230");
  
  capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
  capabilities.setCapability("appPackage", "com.apg.forms");
  capabilities.setCapability("appActivity", "md51e44cf4d1a9e72882c31911909deb5d7.MainActivity");
  driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
  
  driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
  Thread.sleep(3000);

}

@Test
public void ValidLoginValidPassword() {
LoginPage loginpage = new LoginPage(driver);
loginpage.ServerURL(“https://cheftest.com”);
loginpage.LoginPassword(“santaalania”,“123456”);
loginpage.ClickButton(“com.apg.forms:id/LoginFragment_LoginBtn”);
loginpage.SelectConfig(“ListItemView_Title”);
}

@Test
public void EmptyLoginEmptyPassword() {
LoginPage loginpage = new LoginPage(driver);
loginpage.ServerURL(“https://cheftest.com”);
loginpage.LoginPassword(“”,“”);
loginpage.ClickButton(“com.apg.forms:id/LoginFragment_LoginBtn”);
loginpage.GetMessageText().contains(“User Name field cannot be empty.”);
loginpage.ClickButton(“android:id/content”);
}

@AfterTest
public void tearDown() {
driver.close();
}
}

1 лайк

А как запускаете Терра тесты то?

Не делайте так, делайте driver.quit();

А по-поводу, вопроса вам сюда:
http://testng.org/doc/documentation-main.html#dependent-methods

Эмм…что есть терра тест? :slight_smile:

Запускаю через эклипс + TestNg

“Терра” - то опечатка была :slight_smile:

Testng запускается либо через xml файл, где указаны нужные тесты для запуска, либо через IDE. Не знаю, как в эклипсе, но в идее есть кнопки отдельные - запустить тест конкретный или весь тестовый класс. Посмотрите, может вы тоже запускаете один тест

можно сделать тесты зависимыми через параметр dependsOnMethods(или dependsOnMethod) в аннотации.
напр.

 @Test(groups = "myGroup", dependsOnMethod = "ValidLoginValidPassword" )

ну или через параметр priority в той же аннотации проставить порядок выполнения.

1 лайк

http://www.seleniumeasy.com/testng-tutorials/testng-test-case-priority
с помощью параметра priority

1 лайк

@Test(priority=1)

Помогло, спасибо, теперь тесты выполняются в нужном порядке.
Но есть еще одна проблемка - как закрыть приложение, без driver.close(); ?

По идее дизайн тестов такой:

  1. Открыть приложение

  2. Попытаться авторизоваться (Правильный логин \ Правильный пароль)

  3. закрыть приложение

  4. Открыть приложение

  5. Попытаться авторизоваться (НеПравильный логин \ Правильный пароль)

  6. закрыть приложение

и т.д.

без явного закрытия приложения, выполняется только первый кейс, а второй падает.

driver.quite(); в методе @After Test

Thread.sleep(3000); костыль уберите итак ожидание 80 сек

1 лайк

А зачем Вам зависимые тесты? Сделайте их лучше независимыми, потом не будет головняка с попыткой запускать их в несколько потоков.

Я бы шаги открыть и закрыть вынес в отдельные методы с анотациями @BeforeMethod и @AfterMethod соответственно. На кописпасту похоже.
Если нужно полностью убить драйвер - в @AfterMethod с driver.quit() или driver.dispose().
А вообще, да - TestNG

1 лайк

Сделать независимыми - значит по разным файлам разнести?

Нет. Это сделать так, чтобы порядок выполнения тестов был неважен. Иными словами, любой выполненный тест не должен изменить исходное состояние AUT.

1 лайк

Да, это правильнее, если юзать @BeforeMethod и @AfterMethod и 2 @Test метода без priority - так и будет.

1 лайк

Эм, тут есть 1 момент. Вам нужно понять как запускаются тесты и аннотации @Before… и @After… + Нужно понимать состояние объекта в момент выполнения теста. Тестовый класс в первую очередь объект (юзайте дебагер). TestNG не гарантирует запуск тестов по порядку. Поэтому есть priority.

1 лайк

закрыть приложение без driver.close можно так:
driver.closeApp();