t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как после запуска каждого теста перезапускать браузер ????? Помогите.


(Taras) #1

После запуска Suit-а тестов, второй тест начинаеться с места где закончился первый тест. 

После запуска каждого теста нужно перезапускать браузер.

Каким образом сделать.

Вот код suite-а и 2 класса, в которых по одному тесту UI.class, CreateMeeting.class:

 

package TestSuite;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
 
import scripts.testscripts.AdhocWizard.CreateMeeting;
import scripts.testscripts.AdhocWizard.UI;
import Core.MeetingMateMain;
import Core.PageLoader;
 
@RunWith(Suite.class)
@Suite.SuiteClasses({
 
UI.class,
CreateMeeting.class,
 
 
})
public class TestSuiteAdhocWizard{
@BeforeClass
public static void setUp() {
 
PageLoader.hostUrl.setIp(MeetingMateMain.ip);
PageLoader.startDriverOnHost("gc",PageLoader.hostUrl.getIp());
 
 }
}
 
Архитектура такая:
Есть отцовкский класс с методами там разними, в нем есть свой after и before, от него наследуються класы страницы, тоже со своими after и before, а от класс страниц уже классы с тестами.
after и before классов страниц выглядят примерно так:
 
@Before
public void setup(){
super.setup();
}
 
@After
public void cleanup(){
super.cleanup();
}
 
Что нужно мне сделать чтоб при запуске каждого теста браузер перезаскался ???
 
 
  

 


(Mykhailo Poliarush) #2

все решается через аннотацию Before и After для конечного теста.

т.е. тебе надо удостовериться, что перед запуском каждого теста открывался браузер (т.е. инициализаци и get), а после закрывался обязательно (driver.close())

тут вроде бы не должно быть какой-то сложности

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


(Taras) #3

Фреймворка структура такова:

есть клас базовий Class A

в нем есть after и before, 

от него наследуються класси Class Page1 extends A, Class Page2 extends A - ето класси для страниц

от каждого такого Page(I) унаследуються класы в которых есть тесты

Class Page1Test1 extends Page1 {

@ Test

void TestBlablabla {

//....

}

}

 

Class Page1Test2 extends Page1 {

@ Test

void TestBlablabla {

//....

}

}

 

есть для каждой Page(I) свой класс сюта запуска тестов, тоесть классов с тестами для каждой пейджи. 

Мне нужно чтоб в сюте каждий тест запускался с запуска браузера и закрития.

Тоесть запустился Class Page1Test1 extends Page1 {

@ Test

void TestBlablabla {

//....

}

}

потом запустился

 

Class Page1Test2 extends Page1 {

@ Test

void TestBlablabla {

//....

}

}

итд
 
ссилка для запуска у всех одна и та же, так как она статическая всегда.
 
у класа suite есть свой beforeclass :
 
@RunWith(Suite.class)
@Suite.SuiteClasses({
 
UI.class,
CreateMeeting.class,
 
 
})
public class TestSuiteAdhocWizard{
@BeforeClass
public static void setUp() {
 
PageLoader.hostUrl.setIp(MeetingMateMain.ip);
PageLoader.startDriverOnHost("gc",PageLoader.hostUrl.getIp());
 
 }
}
 
UI.class,
CreateMeeting.class, именно класи с тестами, 
 
Я так понимаю что нужно для каждого класса с тестами делать свой after и before так как suite автоматически не дает етой возможности для каждого теста, правильно ????
 
 

(Mykhailo Poliarush) #4

 

>> есть клас базовий Class A в нем есть after и before,

теоритически вот тут тебе надо менять код, а что конкретно - не знаю, не видно, где происходит инициализация веб-драйвера


(Taras) #5

Инициализация вебрайвера происходит в отдельном классе PageLoader в котором есть метод public static void startDriverOnHost

 

 

public static void startDriverOnHost(String browser, int ip){
 
 
browsername = browser;
 
//String urlHost = "http://172.24.226." + ip + ":8080/www/apps/MeetingMate/index.php?host=1";
//mainAddress = hostUrl.getUrl();
 
if (URL.isHttpConnectionSuccess(hostUrl)){
if(browser.equalsIgnoreCase("firefox")||browser.equalsIgnoreCase("ff"))
driver = new FirefoxDriver();
if(browser.equalsIgnoreCase("tablet")||browser.equalsIgnoreCase("tab")||browser.equalsIgnoreCase("tabletUI"))
driver = new AndroidDriver();
if(browser.equalsIgnoreCase("googlechrome")||browser.equalsIgnoreCase("gc")){
File path = new File("ChromeDriver/chromedriver.exe");
System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY , path.getAbsolutePath());
driver = new ChromeDriver();
 
}
System.out.println("Starting Server in: " + browser);
//   driver.get(urlHost);
GetInstance().get(hostUrl.getFullUrl());
}
else {System.out.println("No Connection with appropriate URL !!!");}
//System.out.println("TestObject tested " + getTestObject());
}

 

а потом у меня есть метод GetInstance которий возвращает драйвер в етом же класе,и в самом главному классе А я его визиваю

public static WebDriver getDriver(){

return PageLoader.GetInstance();
}

 

 


(Taras) #6

мне друг подсказал сделать булевскую переменную, типа если она тру то убивать браузер после конца теста и перезапускать, если фолс - то ничего не делать, но как ее и куда впихнуть не знаю, мучался - не получилось.


(Mykhailo Poliarush) #7

мда, такие разбирательства могут быть долго

можешь сделать маленький пример теста на гугл с помощью своего фреймворка и выслать

как только посмотрю в код, может быть что-то подскажу


(Taras) #8

окей, в среду сделаю, так как сорси на работе


(Taras) #9

Проблема решена, нужно в самый верхний клас для тестов добавить в setUp - код с suite:

 

PageLoader.startDriverOnHost("gc",PageLoader.hostUrl.getIp());
тоесть запускать браузер в сетапе верхнего класса, и в after того же класса делать getDriver().close();
 
Большое спасибо Михаилу Полярушу за оказанную помощь !!!

(viktor.gogulenko) #10

А чем пользуешься? Junit'ом? Я в TestNG в таких случаях в базовом классе аннотациями @BeforeTest - @AfterTest, @BeforeSuite - @AfterSuite указываю что нужно делать соответственно перед или после теста-сьюта.


(Shaman) #11

пользуюсь testNG фреймворком. тестсьюты собираю и запускаю муравьем. для каждого теста свой класс с аннотацией beforeClass(инициализация переменных: вебдрайвер и т.п.) afterClass(закрывает драйвера и прочее) у метода родителя выполняющего преинициализацию теста. классы тестов собраны в java пакеты по тестсьютам, и при сборке антом выполняюется разом весь пакет тестов.


(Taras) #12

ну я с конт-интегрейшн еще вообще не знаком и с сборщиками разными)


(Mykhailo Poliarush) #13

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

и жизнь с ними значительно легче.


(Taras) #14

посоветуйте с чего начать, Cucumber, Ant, Hudson - куча технологий, а незнаком с ни одной еще(


(Shaman) #15

имхо Ant+Hudson лучший вариант для начала.


(Mykhailo Poliarush) #16

я бы посоветовал сразу смотреть maven + jenkins


(Taras) #17

литературку можна какую то ?)