Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Выполняется только первый тест в сьюте


(Lebs) #1

Сделал два теста, вынес в новый класс методы BeforeSuite и AfterSuite

Тесты по одному выполняются, а если запускаю пакет из Eclipse, то первый выполняется, а второй ошибка nullPointerException на этой строчке driver.get(baseUrl + "test/test/");

Фреймворк TestNG

@BeforeSuite
public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "http://test/";
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  }

	@AfterSuite
public void tearDown() throws Exception {
    driver.quit();
  }

(Максим Малунов) #2

group ни на каких тестах не стоит ?

@BeforeSuite стартует токо раз
а потом где-то driver где-то закрываеться .
Проверьте сделав @BeforeMethod


(Lebs) #3

Groups нету нигде

Если ставлю BeforeMethod and AfterMethod, то тесты выполняются, но бразузер стартует два раза, а я хотел запуститься браузер и чтобы он закрылся только после прогона сьюта


(Максим Малунов) #4

Естественно он у тебя закріваеться только после suite / 1раз
BeforeTest/AfterTest = как работает ?
ТестЫ не покажешь = не понятно где у тебя движок умирает .
Деbug если идешь движек живой ?


(Lebs) #5

Debug живой

Test1


package com.example.tests;

import org.testng.annotations.Test;

public class AddAnotherEquipment extends MyTestBase {
	
  @Test
  public void testAddAnotherEquipment() throws Exception {
	GroupData group = new GroupData("оборудование1", "описание2");
	createEquipment(group);
	// assert
  }

}

Test 2


package com.example.tests;

import org.testng.annotations.Test;

public class AddEquipment extends MyTestBase {
	
  @Test
  public void testAddEquipment() throws Exception {
	GroupData group = new GroupData("оборудование", "описание");
	createEquipment(group);
	// assert
  }

}

у них есть обращение к методу login, на первой строчке которого у второго теста и появляется ошибка nullPoinerException

вот он

	private void login() throws InterruptedException {
		driver.get(baseUrl + "test/test/");
	    driver.findElement(By.xpath("//input")).clear();
	    driver.findElement(By.xpath("//input")).sendKeys("username");
	    driver.findElement(By.xpath("//div[2]/div[2]/div/input")).clear();
	    driver.findElement(By.xpath("//div[2]/div[2]/div/input")).sendKeys("password");
	    submitButton();
	    Thread.sleep(2000);
	}

(Максим Малунов) #6

у тебя 2 класса тестовых правильно ?
MyTestBase = аннотации @BeforeSuite @AfterSuite так ?

  1. Стартует @BeforeSuite (driver инициализирован)
    стартует 1 класс в него из @BeforeSuite driver /.
    class 1 заканчиваеться
    После выполнения 1 тестового класса у тебя driver как передаеться в 2 класс ?

(Lebs) #7

тестовых класса два
в суперклассе аннотации @BeforeSuite @AfterSuite и еще общие методы для тестов

драйвер инициализируется в начале сьюта, не знал, что он должен передаваться в следующий класс, я думал он живет до конца сьюта (


(Lebs) #8

переменную надо сделать глобальной, чтобы она не исчезала при завершении первого теста?


(Максим Малунов) #9

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

  1. перенсти в один класс эти тесты . как вариант

(Александр Таранков) #10

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