2016-10-17 7 views
1

beendet Ich lerne Selenium WebDriver in Java zusammen mit TestNG. Ich teste mit der Google-Anmeldeseite.Wie laufen Test erst nach dem @AftertTest

Ich habe Probleme mit der Reihe von Testfällen ausgeführt wird. Was ich tun möchte, ist:

  1. Run @BeforeTest
  2. Run Test Nummer 1 (Anmeldung erfolgreich)
  3. Run @AfterTest (Schließen Sie den Browser und Fahrer)
  4. Warten Sie, bis das AfterTest Methode ist fertig dann

Prüfnummer 2 (Anmeldung Fail) laufen Aber was ich erlebt habe ist:

  1. Run @BeforeTest
  2. Run Test Nummer 1 (Anmeldung erfolgreich)
  3. Run Test Nummer 2 direkt nach dem Test Nummer 1 beendet ist (Browser nicht geschlossen ist und Login-Zustand wird von vorherigem Test gehalten
  4. AfterTest ist laufen

I 2 Tage damit verbracht, konnte aber nicht verstehen, wie. Mein Code unten:

========================================== =======================

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(); 
    } 

} 

Antwort

2

Vom TestNG documentation:

@BeforeTest: die kommentierte Methode wird ausführen, bevor eine Testmethode ausgeführt wird, die zu den Klassen innerhalb des Tags gehört.

@AfterTest: Die annotierte Methode wird ausgeführt, nachdem alle Testmethoden ausgeführt wurden, die zu den Klassen innerhalb des Tags gehören.

Wenn Sie wollen, bevor etwas laufen und/oder nach jeder Test-Methode müssen Sie @BeforeMethod und @AfterMethod verwenden:

@BeforeMethod: Die kommentierte Methode wird vor jedem Testverfahren durchgeführt werden .

@AfterMethod: Die kommentierte Methode wird nach jedem Testverfahren ausgeführt werden.

+1

Ja, das ist richtig. Ich habe getestet und es hat funktioniert. OMG, wie zur Hölle das Tutorial gesagt hat, dass der BeforeTest vor jedem ** @Test>.

Verwandte Themen