如何在不使用junit关闭浏览器的情况下运行所有​​selenium测试

时间:2015-12-11 11:28:13

标签: java selenium junit

我有两个测试用例 - “Signup.java”,“Login.java”。

Login.java

    public class Login extends BaseTest{

 @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "www.xyz.com";
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

  @Test
  public void testLogin() throws Exception {
    driver.get(baseUrl);
    WebElement username=driver.findElement(By.id("username"));
    username.sendKeys(user);
    driver.findElement(By.id("password")).sendKeys(pwd);
    driver.findElement(By.xpath("//div[4]/div/button")).click();
  }

 @After
  public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);

SignUp.java

public class SignUp extends BaseTest{
      private WebDriver driver;
      private String baseUrl;
      private StringBuffer verificationErrors = new StringBuffer();


 @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "www.xyz.com";
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
 }


 @Test
 public void testSignUp() throws Exception {
     driver.get(baseUrl+"/");
     driver.findElement(By.id("firstname")).sendKeys("test");
     driver.findElement(By.id("lastname")).sendKeys("test");
     driver.findElement(By.id("password")).sendKeys("test");
     driver.findElement(By.id("confirmPassword")).sendKeys("test");
     driver.findElement(By.id("email")).sendKeys("test@gmail.com");
     driver.findElement(By.name("accepted_tandc")).click(); 
     driver.findElement(By.xpath("//button[contains(.,'Submit')]")).click();      
    }


 @After
 public void tearDown() throws Exception {
   driver.quit();
   String verificationErrorString = verificationErrors.toString();
   if (!"".equals(verificationErrorString)) {
     fail(verificationErrorString);
   }
 }
}

BaseTest.java

public abstract class BaseTest {
    protected String user="xyz@gmail.com";
    protected String pwd="123";
    public static String  baseUrl;
    protected static WebDriver driver;
    private static StringBuffer verificationErrors = new StringBuffer();

    @BeforeClass
        public static void setUp() throws Exception {
            driver = new FirefoxDriver();
            baseUrl = "www.xyz.com";
            driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            }

    @AfterClass
        public static void  tearDown() throws Exception {
            driver.quit();
            String verificationErrorString = verificationErrors.toString();
            if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
            }
    }
}

拥有一个名为AllTests.java的测试套件

@RunWith(Suite.class)
@SuiteClasses({SignUp.class,Login.class,})
public class AllTests {

}

现在当我运行AllTests.java时首先它将打开浏览器并运行第一个测试用例然后关闭浏览器。然后打开浏览器执行第二个测试用例。

我的问题是当我运行测试套件时,浏览器需要在执行所有测试后关闭。无需打开/关闭所有测试用例的浏览器。首先打开浏览器并执行注册,然后执行登录然后关闭。这是我需要的程序。

感谢。

2 个答案:

答案 0 :(得分:1)

使用BeforeSuiteAfterSuite分别打开驱动程序和关闭驱动程序。并在BeforeClass中检查驱动程序实例是否已初始化,如果在套件中运行,则会在BeforeClass中初始化。添加一些变量,您可以使用它来了解您是否在套件中运行并使用它来决定是否在Afterclass中关闭浏览器。如果它在套件中运行不要关闭它,否则关闭它。

答案 1 :(得分:0)

我使用Selenide作为Selenium的包装器,你永远不必使用driver.quit()并且浏览器保持打开状态,只有在我的所有测试用例都完成后它才会关闭。

我建议从你的拆解中删除driver.quit()。