Здравствуйте!
У меня возникла проблема с сохранением инстанса вебдрайвера между тестами (с тем, чтобы не запускать браузер в начале каждого теста).
Работа с вебдравйвером у меня вынесена в отдельный класс, в котором я создаю новый экземпляр только если статическая переменная пуста.
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>
Подскажите, пожалуйста, что я делаю не так? Возможно ли вобще при такой организации сохранять ссылку на вебдрайвер между тестами?
Заранее спасибо
SUNx2YCH
(Alexander Ivanovsky)
06.Декабрь.2012 20:16:54
#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
ArtOfLife
(Sergey Korol)
07.Декабрь.2012 07:58:13
#3
Можно воспользоваться средствами TestNG: инициализацию драйвера занести под аннотацию @BeforeSuite. И даже не нужно определять сам драйвер, как static.
SUNx2YCH
(Alexander Ivanovsky)
07.Декабрь.2012 09:03:24
#4
Согласен, правильная организация сьюта помогла бы избежать такой проблемы, но TestNG -- не панацея. В Junit это реализуется аналогичным образом: создаём сьют, и в @BeforeClass
сьюта добавляем инициализацию драйвера.
В данном случае проблема была именно в способе запуска тестов Ant-ом, и xUnit фреймворк тут ни при чём, имхо.
Спасибо большое! Решение forkmode="perBatch" помогло!