2012-01-24 3 views
3

У меня есть следующий набор тестов селена, унаследованный от одного и того же базового класса. Как я могу использовать тесты, используя тот же экземпляр веб-драйвера, когда я запускаю весь набор тестов ?. Я также хочу запускать каждый тест отдельно. Я считаю, что это сократит время, необходимое для того, чтобы запустить пакет значительно.Использовать тот же самый веб-драйвер в селенном пакете

Этот тест выполняется от maven, который, в свою очередь, запускает каждый тестовый класс.

@RunWith(Suite.class) 
@SuiteClasses({ 
    AdminPortalTestSuite.class, 
    DevPortalTestSuite.class, 
    CommonTestSuite.class 
}) 
public class SeleniumTestSuite { 

} 

BaseClass все тесты унаследовать от

@BeforeClass 
public static void setUp() throws Exception { 

    if (null == baseUrl || !baseUrl.startsWith("https://")) { 
     baseUrl = "https://localhost:8443"; 
    } 

    if (null == browser || browser.startsWith("${")) { 
     browser = "firefox"; 
    } 
    //retrieve properties including locale. 
    retrieveProperties(); 
    Thread.sleep(4000); 
    setUpDriver(); 
} 

@After 
public void tearDownAfterTest() { 
    openUrl(LIST_PARTNERS); 
    adminPortalLogout(); 
    openUrl(DASHBOARD); 
    developerPortalLogout(); 
    driver.manage().deleteAllCookies(); 
} 

@AfterClass 
public static void tearDown() throws Exception { 
    BaseFunctionalTestCase.driver.quit(); 
} 

тестового примера

public class APApplicationFunctionalTestCase extends BaseFunctionalTestCase { 

/** 
* Test validation when creating a new application. 
*/ 
@Test 
public void testApplicationValidation() { 
    Assume.assumeTrue(preHtml5); 

    final String partnerName = randomize("partner"); 
    //create partner 
    createPartnerThroughAP(partnerName); 

    adminPortalLogin(); 
    openUrl(ADD_APPLICATION + partnerName); 
    waitForId("applicationView.applicationName"); 
    findById("submit-button").click(); 
    waitForId("submit-button"); 

    //check validation 
    assertTrue("Failed to validate application name", 
     isTextPresent(resolveAPMessage("partner", "application.messages", 
      "NotEmpty.applicationEditView.applicationView.applicationName"))); 

    assertTrue("Failed to validate application username", 
     isTextPresent(resolveAPMessage("partner", "application.messages", 
      "NotEmpty.applicationEditView.applicationView.applicationUserName"))); 

    assertTrue("Failed to validate application password", 
     isTextPresent(resolveAPMessage("partner", "application.messages", 
      "Password.applicationEditView.applicationView.applicationPassword"))); 

    assertTrue("Failed to validate application password confirmation", 
     isTextPresent(resolveAPMessage("partner", "application.messages", 
      "Length.applicationEditView.applicationPasswordConfirmation"))); 

} 

ответ

1

Я не большой с JUnit ... Похоже, вы пытаетесь решение, предложенными здесь: Before and After Suite execution hook in jUnit 4.x

, который предполагает, что вы должны переместить свой @BeforeClass в ваш класс SeleniumTestSuite.

+1

Я использовал, чтобы сделать это таким образом. Теперь я думаю, что вы должны создать базовый класс шаблонов Singleton, у которого есть метод getDriver(), который инициализирует драйвер, если он равен нулю, но в противном случае возвращает singleton к вызывающему. – djangofan

3

Вот как я это сделал. В SeleniumTestSuite я добавил статический WebDriver и создаю его в методе setUp(), аннотированном с @BeforeClass. Затем, в классе Base, который наследует все мои тесты на селен, я добавил метод getDriver(), который попытается получить статический драйвер из SeleniumTestSuite. Если этот драйвер имеет значение NULL, то создается новый экземпляр и возвращается. Таким образом, когда классы тестирования селена работают через набор, они будут использовать драйвер из SeleniumTestSuite, и когда они будут работать индивидуально, они будут использовать свой собственный драйвер.

SeleniumTestSuite:

@RunWith(Suite.class) 
@SuiteClasses({ 
    AbcSeleniumTest.class, 
    XyzSeleniumTest.class 
}) 
public class SeleniumTestSuite { 

    private static WebDriver driver; 

    @BeforeClass 
    public static void setUp() { 
     driver = new FirefoxDriver(); 
    } 

    //driver getter/setter 

} 

BaseSeleniumTest:

public abstract class BaseSeleniumTest { 

    public WebDriver getDriver() { 
     WebDriver driver = SeleniumTestSuite.getDriver(); 
     if(driver != null) { 
      return driver; 
     } 

     return new FirefoxDriver(); 
    } 

} 

AbcSeleniumTest:

public class AbcSeleniumTest extends BaseSeleniumTest { 

    @Test 
    public void testAbc() { 
     WebDriver driver = getDriver(); 

     // test stuff 
    } 

} 
Смежные вопросы