【问题标题】:Use same web driver throughout selenium suite在整个 selenium 套件中使用相同的 Web 驱动程序
【发布时间】:2012-01-24 16:48:29
【问题描述】:

我有一个继承自同一个基类的以下 selenium 测试套件,当我运行整个测试套件时,如何让测试使用相同的 Web 驱动程序实例?我也想单独运行每个测试。我相信这将大大减少运行套件所需的时间。

此测试从 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")));

}

【问题讨论】:

    标签: java selenium-rc selenium-webdriver


    【解决方案1】:

    我就是这样做的。在 SeleniumTestSuite 中,我添加了一个静态 WebDriver 并在一个用 @BeforeClass 注释的 setUp() 方法中实例化它。然后,在我所有的 selenium 测试都继承自的 Base 类中,我添加了一个 getDriver() 方法,它将尝试从 SeleniumTestSuite 获取静态驱动程序。如果该驱动程序为空,则实例化并返回一个新驱动程序。因此,当 selenium 测试类通过套件运行时,它们将使用 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
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      我对 JUnit 不太满意...看起来您正在尝试此处建议的解决方案: Before and After Suite execution hook in jUnit 4.x

      这建议您应该将您的 @BeforeClass 移动到您的 SeleniumTestSuite 类中。

      【讨论】:

      • 我曾经这样做过。现在我认为你应该创建一个基本的单例模式类,它有一个 getDriver() 方法,如果它等于 null 则初始化驱动程序,否则将单例返回给调用者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      相关资源
      最近更新 更多