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

Как сохранить инстанс WebDriver'a между тестами (Java + Selenium WebDriver + JUnit + Ant)


(Galina.Bratchik) #1

Здравствуйте!

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

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


private static WebDriver driver; 

  public static WebDriver getWebDriver()
 {if (driver == null) 
{createWebDriver();} 
return driver;} 

И это решение прекрасно работает, когда я запускаю тесты из среды разработки (eclipse).

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

<target name="test" depends="sethosts"> 
<junit fork="yes" haltonfailure="no" printsummary="on" > 
 <classpath>
<path refid="test.classpath"/>
</classpath> 
<formatter type="xml" usefile="true"/> 
<batchtest  todir="${report}/xml"> 
<fileset dir="${build}" > 
<include name="Tests/**/*Test.class"/> 
</fileset> 
</batchtest> 
</junit>
</target>

 
Подскажите, пожалуйста, что я делаю не так? Возможно ли вобще при такой организации сохранять ссылку на вебдрайвер между тестами?
Заранее спасибо

(Alexander Ivanovsky) #2

По умолчанию Ant запускает каждый тест в новой JVM (т.к. у вас fork="yes"), поэтому значение переменной и "стирается".

Вам нужно добавить атрибут "forkmode" во 2-ой строчке, чтобы изменить это поведение:

<junit fork="yes" forkmode="perBatch" haltonfailure="no" printsummary="on" >

 

2-ой вариант: убрать атрибут "fork" вообще (или установить его в "no"), тогда тесты будут запускаться в той же JVM, в которой работает сам Ant.

 

Подробнее можно почитать в документации: http://ant.apache.org/manual/Tasks/junit.html


(Sergey Korol) #3

Можно воспользоваться средствами TestNG: инициализацию драйвера занести под аннотацию @BeforeSuite. И даже не нужно определять сам драйвер, как static.


(Alexander Ivanovsky) #4

Согласен, правильная организация сьюта помогла бы избежать такой проблемы, но TestNG -- не панацея. В Junit это реализуется аналогичным образом: создаём сьют, и в @BeforeClass сьюта добавляем инициализацию драйвера.

В данном случае проблема была именно в способе запуска тестов Ant-ом, и xUnit фреймворк тут ни при чём, имхо.


(Galina.Bratchik) #5

Спасибо большое! Решение forkmode="perBatch" помогло!