大家好,我有一个TestNG测试套件,可以按顺序执行测试。但是在开始运行测试之前。它打开所需数量的浏览器,然后一个接一个地运行测试。我想更改此行为以打开一个浏览器,运行测试,然后关闭浏览器。在打开另一个浏览器之后,运行test / s并关闭,依此类推。这可能吗?
我在IntelliJ上使用TestNG,JAVA。示例测试套件:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" parallel="false" preserve-order="true" thread-count="1">
<test name="something1" group-by-instances="true">
<classes>
<class name="com.this.is.First"/>
</classes>
</test>
<test name="something2" group-by-instances="true">
<classes>
<class name="com.this.is.Second"/>
</classes>
</test>
<test name="something3" group-by-instances="true">
<classes>
<class name="com.this.is.Third"/>
</classes>
</suite>
所有测试都继承Main类,该类具有@BeforeClass和@AfterClass方法,这些实例在我实例化浏览器的地方。
每个类可以有多个测试,有时只有一个。
根据要求提供主类:
public class MainBeforeAfter
{
protected WebDriver driver;
protected String testUrl = "someurl";
public MainBeforeAfter()
{
if (System.getProperty("webdriver.chrome.driver") == null)
{
System.setProperty("webdriver.chrome.driver", "C:/Drivers/chromedriver_win32/chromedriver.exe");
}
if (System.getProperty("test.url") != null)
{
testUrl = System.getProperty("test.url");
}
System.out.println(System.getProperty("webdriver.chrome.driver"));
ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
options.addArguments("window-size=1200x600");
driver = new ChromeDriver(options);
//driver = new ChromeDriver();
}
@BeforeClass public void beforeClass() throws InterruptedException
{
driver.get(testUrl);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
enterLogin();
}
protected void enterLogin()
{
driver.findElement(By.name("username")).sendKeys("user");
driver.findElement(By.name("password")).sendKeys("password");
driver.findElement(By.name("password")).sendKeys(Keys.ENTER);
}
@AfterClass public void afterClass() throws InterruptedException
{
driver.close();
try
{
driver.quit();
}
catch (Exception e)
{
System.out.println("Unable to close browser after login header exception caught: " + e);
}
}
}
答案 0 :(得分:1)
尝试这样:
这应该可以解决问题,就在类后面的标签名称之内
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" preserve-order="true">
<test name="something1">
<classes>
<class name="com.this.is.First"/>
<class name="com.this.is.Second"/>
<class name="com.this.is.Third"/>
</classes>
</suite>
希望有帮助,
答案 1 :(得分:0)
您必须在这里使用单例,像这样尝试
public class MainBeforeAfter {
public static WebDriver driver;
public static String testUrl = "http://www.urlhere.com";
public static WebDriver getInstance()
{
if (System.getProperty("webdriver.chrome.driver") == null)
{
System.setProperty("webdriver.chrome.driver", "E:\\gita_workspace\\GitaProject\\drivers\\chromedriver.exe");
}
if (System.getProperty("test.url") != null)
{
testUrl = System.getProperty("test.url");
}
System.out.println(System.getProperty("webdriver.chrome.driver"));
ChromeOptions options = new ChromeOptions();
//options.addArguments("headless");
options.addArguments("window-size=1200x600");
return driver = new ChromeDriver(options);
}
@BeforeClass
public void beforeClass() throws InterruptedException
{
driver = MainBeforeAfter.getInstance();
driver.get(testUrl);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
// enterLogin();
}
protected void enterLogin()
{
driver.findElement(By.name("username")).sendKeys("user");
driver.findElement(By.name("password")).sendKeys("password");
driver.findElement(By.name("password")).sendKeys(Keys.ENTER);
}
@AfterClass
public void afterClass() throws InterruptedException
{
driver.close();
try
{
driver.quit();
}
catch (Exception e)
{
System.out.println("Unable to close browser after login header exception caught: " + e);
}
}
}
答案 2 :(得分:0)
只需添加
@BeforeMethod
getInstance()方法上的注释,并将其修改为:
@BeforeMethod
public static WebDriver getInstance() {
if (System.getProperty("webdriver.chrome.driver") == null) {
System.setProperty("webdriver.chrome.driver", "E:\\gita_workspace\\GitaProject\\drivers\\chromedriver.exe");
}
if (System.getProperty("test.url") != null) {
testUrl = System.getProperty("test.url");
}
System.out.println(System.getProperty("webdriver.chrome.driver"));
ChromeOptions options = new ChromeOptions();
// options.addArguments("headless");
options.addArguments("window-size=1200x600");
driver = new ChromeDriver(options);
driver.get(testUrl);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
如果需要,在@BeforeClass中做其他事情(在这种情况下,不需要) 然后在方法下面的类中添加
@AfterMethod
public void tearDown() {
driver.quit();
}
它将一次打开浏览器,然后在执行完成后关闭浏览器。 所有测试用例都会依次发生这种情况。 每次创建驱动程序时,都会在测试执行完成时将其销毁。 我不知道这是不是一种好方法,但是它将解决您的问题:)
请让我知道这是否对您有用。