Приветствую.
Тесты запускаются последовательно с перезапуском браузера каждый раз. Запуск браузера через jenkins на удаленной машине делается ну очень долго, минуты две наверно точно.
Исходные данные: webdriver + java + pageobject + testng + ant + jenkins + удаленная тачка с jenkins и браузером вместе.
Вот так выглядит TestNGTestBase:
@BeforeSuite public void initDriver() throws IOException { driver = WebDriverFactory.getDriver(DesiredCapabilities.firefox()); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); WebDriverRunner.setWebDriver(driver); // Передаем selenide свой драйвер. иначе selenide будет запускать свой браузер при вызове его методов } @AfterMethod(alwaysRun = true) public void takeScreenshotOnError(ITestResult result) throws ParseException { if (! result.isSuccess()) { //КОД СНЯТИЯ СКРИНШОТА } } @AfterSuite (alwaysRun = true) public void stopBrowser() { WebDriverFactory.dismissDriver(); }
Xml файл теста выглядит так:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" [ <!ENTITY lt "<"> <!ENTITY gt ">"> <!ENTITY quot """> <!ENTITY amp "&">]> <suite name="ALLtest" parallel="false" thread-count="2"> <test verbose="2" name="Авторизация" annotations="JDK"> <parameter name= "email" value="iuz@aaa.ru"></parameter> <parameter name= "pass" value="123456"></parameter> <classes> <class name="Test.LoginPrTest"/> </classes> </test> <test verbose="2" name="Регистрация" annotations="JDK"> <parameter name= "name" value="name"></parameter> <parameter name= "surname" value="sername"></parameter> <parameter name= "email" value="aaa@werw.ru"></parameter> <parameter name= "pass" value="123456"></parameter> <classes> <class name="Test.RegistrationUserTest"/> </classes> </test> </suite>
Тесты вот так написаны:
public class LoginPrTest extends TestNGTestBase { @Parameters({"email", "pass"}) @Test(groups = "Selenium2") public void registrationUser(String email, String pass) { driver.get(loadprops("urlopen")); LoginPage loginPr = new LoginPage(driver); /* успешная авторизация пользователя */ loginPr.loginSuccess(email, pass); // глубже находятся шаги выполнения } }
Файл Page вот так:
public class LoginPage { private WebDriver driver; public LoginPage(WebDriver driver) { PageFactory.initElements(driver, this); this.driver = driver; } /* Успешная авторизация */ public VacancyListPage loginSuccess(String email, String pass) { LoginUtils object = PageFactory.initElements(driver, LoginUtils.class); // инициализация object.login(email, pass); // проваливаемся глубже return new VacancyListPage(driver); } }
Найти кто гасит браузер не получилось. Хоть и выставлял prinln. Грешу на WebDriverFactory:
static { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { dismissDriver(); } }); }
Что можно сделать чтобы браузер стартовал быстрее на удаленной машине (ресурсов у нее много)? Jenkins виноват? Testng?
Как сделать чтобы можно было стартовать тесты не перезапуская браузер? Буду признателен если тыкните в файл и строчку, потому что сам уже много перепробовал. Хотя полгода назад я сделал так чтобы браузер не закрывался, а теперь ступор какой-то и не пойму как мне это сделать.