Cucumber + Selenium Java:在测试用例之间保持浏览器打开

时间:2015-10-14 14:39:40

标签: java selenium

我目前正在使用Java中的Cucumber和Selenium WebDriver来测试Web应用程序。 我对浏览器关闭并在每个测试用例之间重新打开这一事实感到不满。

首先,它非常缓慢,此外,对我来说没有任何意义。

我想要做的是在每次测试之间注销应用程序并保持浏览器打开。

我认为这条线可以完成这项工作,但它没有按预期工作:

driver.navigate().to("http://myurl.url");

而不是:

driver.get("http://myurl.url");

它会打开一个新的浏览器。我理解为什么会这样做,但我想附加到我之前的浏览器会话中。

3 个答案:

答案 0 :(得分:7)

我找到了一种在测试之间保持浏览器畅通的方法。我将Singleton Design Patternpicocontainer一起使用。 我在本课程的static中声明了我的浏览器。

public class Drivers {
    private static boolean initialized = false;
    private static WebDriver driver;

    @Before
    public void initialize(){
        if (!initialized){
            initialized = true;
            driver = new FirefoxDriver();
            driver.get("http://myurl.url");
        }
    }
    public static WebDriver getDriver(){
        return driver;
    }   
}

在每个StepDefinitions类中,我都有一个构造函数来实例化我的Singleton

public class DashboardSteps extends SuperSteps {
    Drivers context;

    @After
    public void close(Scenario scenario) {
        super.tearDown(scenario);
        loginPage = homePage.clickLogout();
        loginPage.waitPageLoaded();
    }

    public DashboardSteps(Drivers context) {
        super(context);
    }

SuperSteps课程:

public class SuperSteps {
    protected Drivers context;

    public SuperSteps(Drivers context){
        this.context = context;
    }

如您所见,我在每次测试后返回logIn页面,这样我就可以独立运行每个测试。

答案 1 :(得分:0)

如果我更正,您的浏览器实例化可能会以@Before标记的setUp方法进行,并且会以@After标记为tearDown的方式进行关闭。如果你想停止关闭浏览器,那么只需在tearDown中注释掉那些代码,或者你正在做什么。

答案 2 :(得分:0)

您可以使用@BeforeClass@AfterClass注释。它们分别在@Before和@After之后运行。假设您尝试测试的测试用例属于同一个类,您可以在WebDriver方法中初始化@BeforeClass并在@AfterClass方法中将其关闭。