2017-02-10 2 views
0

Bisher hatte ich seitenspezifische Tests geschrieben, die sich nur auf seitenspezifische Szenarien konzentrierten. Beispiel: LoginPageTest.java enthält Tests, die Szenarien nur für die Anmeldeseite testen.So führen Sie die Datei testng.xml aus, die Testklassen mit den gleichen @BeforeClass-Methoden enthält

Jetzt, wo ich ein paar mehr Seiten automatisiert haben, möchte ich all diese Seiten in meinem testng.xml

Problem integrieren ist - Nehmen wir an, ich 3 Testklassen testen wollen (LoginPageTest.java, ExercisePageTest.java & HomePageTest .java) & Ich habe diese Klassennamen in testng.xml Datei übergeben. Was passiert, wenn ich die testng.xml Datei laufen lasse, öffnen sich 3 Browser-Instanzen zusammen, weil ich in jeder meiner Test-Klassen eine @BeforeClass Methode habe, die den Browser initialisiert.

In allen meinen Testklassen ich nach dem gleichen Verfahren wie unten-

- In @BeforeClass Methode, die ich Browser initialisiert bin.

@BeforeClass 
    public void setUp() throws Exception { 

     wte = new ReadWriteExcel(); 
     extent = new ExtentReports("D://myfitnesspal.html", true); 
     extent.addSystemInfo("Environment", "Test Environment"); 
     test = extent.startTest("Login Functionality"); 
     driver = BrowserSettings.startBrowser("chrome","https://www.myfitnesspal.com"); 
     engineDriver=new EngineDriver(driver); 
     test.log(LogStatus.PASS, "Executing on Firefox browser"); 

    } 

--Im @Test Methode Ich lese das EMAILID & Passwort des Gastes aus einem Excel-Sheet & in die Anwendung anzumelden.

@Test(priority=0, groups={"regression"}) 
    //@Test(dependsOnMethods="setUp") 
    public void existingUserLoginfromLandingPage() throws Exception{ 

     new WebDriverWait(driver,10).until(ExpectedConditions.titleContains("Free Calorie Counter, Diet & Exercise Journal")); 
     test.log(LogStatus.INFO, "Title Detected : " + "Free Calorie Counter, Diet & Exercise Journal"); 
     String emailIDFromExcel = ReadWriteExcel.fecthEmailID(0); 
     String passwordFromExcel = ReadWriteExcel.fecthPassword(1); 
     engineDriver.landingPage.existingUserLogin(emailIDFromExcel, passwordFromExcel); 
     System.out.println("EmailID & Password are :" + emailIDFromExcel+passwordFromExcel); 

    } 

Und ich habe andere @Test Methoden, die Testseite Szenarien zusammen.

Was ich erreichen möchte ist dies -

Statt dem Browser 3 mal zu öffnen, mag ich den Browser einmal & laufen, sobald die LoginPageTest.java abgeschlossen hat ich die anderen Testklassen ohne die Notwendigkeit ausgeführt werden soll einer neuen Browser-Instanz eröffnet & ohne einen neuen Benutzer wird angemeldet

. Beispiel: ich meine testng.xml Datei this- wie

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite"> 
    <test name="Test"> 
     <parameter name="typeOfCardio" value="Swimming" /> 
     <parameter name="typeOfStrengthExercise" value="Bench Press" /> 
     <classes> 
      <class name="com.myfitnesspal.tests.LoginPageTest"/> 
      <class name="com.myfitnesspal.tests.ExercisePageTest"/> 
      <class name="com.myfitnesspal.tests.HomePageTest" /> 
     </classes> 
    </test> <!-- Test --> 
</suite> <!-- Suite --> 
+2

Verwendung '@ BeforeTest' den Vermerk statt' @ BeforeClass' – NarendraR

Antwort

2

erstellen aussehen wollen e eine gemeinsame Klasse, wo Sie Ihre Setup-Methode erwähnen und dies, wie unten mit @BeforeTest Anmerkungen versehen:

public class BrowserSetup 
{ 
    @BeforeTest 
    public void setUp() throws Exception { 

    wte = new ReadWriteExcel(); 
    extent = new ExtentReports("D://myfitnesspal.html", true); 
    extent.addSystemInfo("Environment", "Test Environment"); 
    test = extent.startTest("Login Functionality"); 
    driver = BrowserSettings.startBrowser("chrome","https://www.myfitnesspal.com"); 
    engineDriver=new EngineDriver(driver); 
    test.log(LogStatus.PASS, "Executing on Firefox browser"); 
    } 
} 

@BeforeTest: Die kommentierte Verfahren vor jedem Testverfahren zu den Klassen gehören, laufen wird innerhalb der <test> Tag ausgeführt wird .

Erwähnen Sie Ihre @Test Methode in der erforderlichen Dateien

Fügen Sie diese Klasse in testing.xml zu

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite"> 
    <test name="Test"> 
     <parameter name="typeOfCardio" value="Swimming" /> 
     <parameter name="typeOfStrengthExercise" value="Bench Press" /> 
     <classes> 
      <class name="com.myfitnesspal.tests.BrowserSetup"/> 
      <class name="com.myfitnesspal.tests.LoginPageTest"/> 
      <class name="com.myfitnesspal.tests.ExercisePageTest"/> 
      <class name="com.myfitnesspal.tests.HomePageTest" /> 
     </classes> 
    </test> <!-- Test --> 
</suite> <!-- Suite --> 
+0

Da ich vorbei Browser Initialisierung Code in der BeforeTest-Methode, wird es viele Browser-Instanzen öffnen, da ich viele Testmethoden habe. Korrigiere mich, wenn ich falsch liege. – AdiBoy

+0

Sie müssen Browser öffnen Code nur in dieser Setup-Methode und tun Rest-Codierung, z. für Login-Funktionalität - login.java-Klasse – NarendraR

Verwandte Themen