Используйте один и тот же веб-драйвер во всем наборе селена - PullRequest
3 голосов
/ 24 января 2012

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

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

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

}

Базовый класс все тесты наследуют от

@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")));

}

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Вот как я это сделал. В SeleniumTestSuite я добавил статический WebDriver и создал его в методе setUp (), аннотированном @BeforeClass. Затем в базовом классе, от которого наследуются все мои тесты селена, я добавил метод 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
    }

}
1 голос
/ 25 января 2012

Я не очень хорош в JUnit ... похоже, что вы пытаетесь найти решение, предлагаемое здесь: До и после выполнения Suite в JUnit 4.x

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

...