JUnit, Selenium и tearDown

Такой юнит:

    @Test
    public void testA {
//some code here...
}

    @Test
    pulic void testB {
//some code here...
}   
    @After
    public void closeBrowsers() throws Exception {
selenium.stop();
}

Вот вопрос: метод closeBrowsers() вызывается после каждого тестового метода; в этом случае он вызывается дважды, и я получаю «Неправильный тест завершен». из Юнит. Мне нужен метод/аннотация junit, который будет вызываться после завершения всех тестов (просто вызывается один раз после завершения всех тестов), возможно ли это?

Также я пытался проверить, работает ли селен или нет в closeBrowsers(), но никак не мог найти решение.

PS: я прочитал это: Как закрыть браузер на сервере Selenium RC, который потерял клиент

но я не мог понять решение, а также в настоящее время http://www.santiycr.com.ar/djangosite/blog/posts/2009/aug/25/close-remaining-browsers-from-selenium-rc на стороне блога не работает


person Altug    schedule 27.07.2010    source источник
comment
@AfterClass нужен статический метод. Посмотрите на это, пожалуйста: открытый класс xxxTest extends SeleneseTestCase { @Test public void testaaa() throws Exception { try {selenium.setSpeed(100); ..... } } } Если я использую @AfterClass, тогда testaaa() должен быть статическим, и в этом случае я не могу использовать переменную selenium... Есть какое-нибудь решение для этого? Спасибо.   -  person Altug    schedule 28.07.2010
comment
Вы можете сделать свою переменную селена статической   -  person Sergii Pozharov    schedule 28.07.2010


Ответы (2)


Вы можете сделать переменную selenium статической, инициализировать ее в статическом методе @BeforeClass и очистить в @AfterClass:

public class ...... {

  private static Selenium selenium;

  @BeforeClass
  public static void initSelenium() {
     selenium = new DefaultSelenium(...); // or initialize it in any other way
  }

  @Test
  public void testA {...}

  @Test
  pulic void testB {...}

  @AfterClass
  public static void closeBrowsers() throws Exception { 
    selenium.stop(); 
  }
}
person Sergii Pozharov    schedule 28.07.2010
comment
Хотя это работает, если все ваши тесты содержатся в одном классе, это не сработает, если у вас есть тесты в отдельных файлах классов (и вы не используете Suite, тем самым принимая поведение по умолчанию для запуска всех тестов в проекте). Для этого нам понадобится аннотация AfterSuite или специальный хак, чтобы сделать подобное. - person djangofan; 09.02.2013
comment
Вопрос был именно об использовании браузера в одном классе, если вам нужно повторно использовать один и тот же браузер для нескольких тестов, конечно, вам понадобится что-то еще - базовый класс для всех тестов, инъекция экземпляра браузера и т. д. - есть так много вариантов - person Sergii Pozharov; 14.02.2013

Используйте аннотацию @AfterClass.

http://junit.sourceforge.net/doc/faq/faq.htm#organize_3

person Reflux    schedule 27.07.2010