我试图运行一些测试,有七个是具体的,我已经创建了我的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;,如果你能告诉我如何改进问题细节,我会很感激
由于
答案 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也可以。