Maven + Selenium 2:如何在打开一个浏览器的情况下运行测试

时间:2014-07-08 18:08:24

标签: java maven selenium-webdriver webdriver

我试图运行一些测试,有七个是具体的,我已经创建了我的xml文件,并且它正常工作,我的测试文件有一个包含七个测试的包,所以问题是,当执行xml文件时,它会为每个测试打开一个新的浏览器窗口(如果你想知道,我确实有驱动程序退出并关闭函数,它们在@afterTest注释中)并且我不会这样做。我想要的是,我需要的只是让一个浏览器一直打开,例如在完成测试之后,关闭该浏览器,因为对于第二次测试,第二个浏览器是打开的,我希望获得的是在每次测试完成后关闭每个浏览器,这是实现这一目的的方法吗?

这是我的pom文件:

http://maven.apache.org/xsd/maven-4.0.0.xsd">     4.0.0

<groupId>com.enterprise.automation</groupId>
<artifactId>enterpriseAutomation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>barcoAutomation</name>
<url>http://maven.apache.org</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- added -->
    <suiteFile>src/test/resources/barcoColor.xml</suiteFile>
</properties>

<dependencies>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <!-- <classifier>jdk17</classifier> -->
    </dependency>
    <dependency>
        <groupId>org.uncommons</groupId>
        <artifactId>reportng</artifactId>
        <version>1.1.2</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.42.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.10-FINAL</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.10-FINAL</version>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>src/test/resources/myTestsFile.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/test/resources/</directory>
        </resource>
    </resources>
</build>

编辑:我不想打开七个浏览器的原因是因为我们正在测试一个拥有大量javascript的SPA,它消耗的PC资源有点过多,所以如果打开了多个浏览器,计算机性能下降

我也看到了&#34; -1&#34;,如果你能告诉我如何改进问题细节,我会很感激

由于

2 个答案:

答案 0 :(得分:1)

而不是@AfterTest@BeforeTest使用@BeforeSuite@AfterSuite

创建一个包含@BeforeSuite和@AfterSuite的BaseTest类。

public class BaseTest{
    static WebDriver driver;
    @BeforeSuite
    public void start() {
        driver = new FFDriver();
        driver.get(url);
    }


    @AfterSuite
    public void end() {
        driver.close();
        driver.quit();
    }
}

创建测试类。

public class Test1{
    static WebDriver driver;
    @Test
    public void test1() {
        driver = BaseTest.driver;
        //code goes here
    }
}


public class Test2{
    static WebDriver driver;
    @Test
    public void test2() {
        driver = BaseTest.driver;
        //code goes here
    }
}

修改testNG xml文件,如下所示。

<suite name="Regression Testing" parallel="classes">
    <test verbose="2" name="Test1">
        <classes>
            <class name="BaseTest"/>
            <class name="Test1"/>
        </classes>
    </test>
    <test verbose="2" name="Test2">
        <classes>
            <class name="Test2"/>
        </classes>
    </test>
</suite>

首先运行@BeforeSuite,然后运行Test1,Test2和@AfterSuite。通过在BaseTest中将驱动程序设置为静态,可以在每个Test类中获取驱动程序实例。

如果这有助于您,请告诉我。

答案 1 :(得分:0)

据我所知,如果你说你想要在每次测试结束后关闭每个浏览器并且#34;,你需要使用@AfterMethod和@BeforeMethod。这将确保在每次运行@Test后,浏览器都会关闭。

使用@AfterTest,这只会发生一次 - 注意@AfterTest中的测试映射到testng xml中的<test>,并且不会映射到代码中的@Test。

@AfterSuite会在整个执行过程中关闭浏览器一次,这意味着如果你想在每个@Test上进行一次干净的会话,那就不会发生。

如果你不想要一个干净的会话,那么@ Before / @ AfterSuite也可以。

相关问题