2016-10-17 6 views
1

TestNG와 함께 Java로 Selenium Webdriver를 배우고 있습니다. Google 로그인 페이지로 테스트 중입니다.@AftertTest가 완료된 후에 만 ​​테스트를 실행하는 방법

순차적으로 테스트 사례를 실행하는 데 문제가 있습니다. 내가하고 싶은 것입니다 :

  1. 실행 @BeforeTest
  2. 테스트 실행 횟수 1 AfterTest 방법이 될 때까지
  3. 실행 @AfterTest
  4. 기다립니다 (브라우저 및 드라이버를 닫습니다) (성공적으로 로그인)는 테스트 번호 2 (로그인 실패)

을 실행하지만 제가 경험 한 것은 완료 :

  1. 실행 @BeforeTest는 테스트 번호 1 (완료 브라우저가 종료되지 않고 상태가 이전 테스트에서 유지에게 로그인 실행 테스트 번호 1 (성공적으로 로그인)
  2. 테스트 실행 번호 2 직후
  3. AfterTest입니다 실행

나는 2 일을 보냈지 만 그럴 수 없었다. 아래 코드 :

====================== ======================= TestNG documentation에서

package TestNG; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.testng.Assert; 
import org.testng.annotations.*; 

public class GoogleAccountLogin { 

    WebDriver driver; 

    @BeforeTest 
    public void setUp() { 
     System.setProperty("webdriver.gecko.driver","F:\\path\\geckodriver.exe"); 
     driver=new FirefoxDriver(); 
    } 

    @Test(priority=0) 
    public void LoginSuccessful() throws InterruptedException { 

    // Go to google account 
     driver.manage().window().maximize(); 
     driver.get("https://accounts.google.com"); 
     Thread.sleep(3000); 

    // Check if the page is correct 
     String currentTitle = driver.getTitle(); 
     Assert.assertEquals(currentTitle, "Sign in - Google Accounts"); 

    // Enter email and submit 

     WebElement email = driver.findElement(By.id("Email")); 
     email.clear(); 
     email.sendKeys("validemail"); 
     WebElement Next = driver.findElement(By.id("next")); 
     Next.click(); 
     Thread.sleep(1000); 

    // Enter password 

     WebElement password = driver.findElement(By.id("Passwd")); 
     password.clear(); 
     password.sendKeys("validpassword"); 
     WebElement Login = driver.findElement(By.id("signIn")); 
     Login.click(); 
     Thread.sleep(5000); 

    // Check if login successful 
     currentTitle = driver.getTitle(); 
     Assert.assertEquals(currentTitle, "My Account"); 
    } 

    @Test(priority=1) 
    public void LoginFailInvalidEmail() throws InterruptedException { 

    // Go to google account 
     driver.manage().window().maximize(); 
     driver.get("https://accounts.google.com"); 
     Thread.sleep(3000); 

    // Check if the page is correct 
     String currentTitle = driver.getTitle(); 
     Assert.assertEquals(currentTitle, "Sign in - Google Accounts"); 

    // Enter email and submit  
     WebElement email = driver.findElement(By.id("Email")); 
     email.clear(); 
     email.sendKeys("falseemail"); 
     WebElement Next = driver.findElement(By.id("next")); 
     Next.click(); 
     Thread.sleep(1000); 

    // Check error message and login state  
     String errorMess = driver.findElement(By.id("errormsg_0_Email")).getText(); 
     Assert.assertEquals(errorMess, "Sorry, Google doesn't recognize that email."); 
     currentTitle = driver.getTitle(); 
     Assert.assertEquals(currentTitle, "Sign in - Google Accounts"); 
    } 

    @AfterTest 
    public void tearDown() { 
     driver.close(); 
     driver.quit(); 
    } 

} 

답변

2

:

@BeforeTest : 주석이 방법이 될 것입니다 태그 안에있는 클래스에 속하는 테스트 메소드가 실행되기 전에 실행됩니다.

@AfterTest : 주석 된 메소드는 태그 내부의 클래스에 속한 모든 테스트 메소드가 실행 된 후에 실행됩니다.

당신은 전에 뭔가를 실행하려는 경우 및/또는 당신은 @BeforeMethod@AfterMethod를 사용할 필요가 각 시험 방법 후 :

을 @BeforeMethod : 주석이 방법은 각 시험 방법 전에 실행됩니다 .

@AfterMethod : 주석이 달린 메소드는 각 테스트 메소드 후에 실행됩니다.

+1

그래, 맞아. 나는 시험을했고 효과가 있었다. OMG BeforeTest는 ** ** @Test>. <. 전에 각 튜토리얼에서 BeforeTest가 실행될 것이라고 말했습니다. 정말 고마워. –

관련 문제