2017-04-08 63 views
0

我想通過testNG.xml文件將參數傳遞給@BeforeClass方法,但是當我運行我的腳本時,腳本既沒有執行也沒有任何錯誤顯示在控制檯中,只是腳本被終止。不知道我哪裏錯了。請幫助我。如何通過testNG.xml文件將參數傳遞給@BeforeClass&@AfterClass方法

PS:當我用@BeforeSuite註釋,而不是@BeforeClass

預先感謝

以下腳本工作好是我的代碼片段:

BaseSetup.java

public class BaseSetup { 

private WebDriver driver; 
private String userdir = System.getProperty("user.dir"); 
private void SelectBrowser(String browsername){ 

    switch(browsername){ 

    case "GoogleChrome": 

     //initChromeBrowser(); 

     break; 

    case "FireFox": 

     initFireFoxBrowser(); 

     break; 

    default: 
     System.out.println("Wrong input");  
    } 

} 

private void initChromeBrowser(){ 

    System.setProperty("webdriver.chrome.driver", userdir +"\\chromedriver.exe"); 

    driver = new ChromeDriver(); 

    launchApp(); 

} 
private void initFireFoxBrowser(){ 

    System.setProperty("webdriver.gecko.driver", userdir +"\\geckodriver.exe"); 

    driver = new FirefoxDriver(); 

    launchApp(); 

} 

private void launchApp(){ 

    driver.manage().window().maximize(); 

    driver.get("https://www.google.co.in"); 
} 

@Parameters({"browsername"}) 

@BeforeClass 

public void LaunchBrowser(String browsername){ 

     SelectBrowser(browsername);  
} 
} 

以下是我的testNG.xml代碼

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="SampleTestSuite"> 
<test name="SampleTest"> 

<classes> 

    <class name="com.pac.base.BaseSetup"> 
    <parameter name="browsername" value="FireFox"> </parameter>  
    </class> 

    </classes> 

    </test> <!-- Test --> 
    </suite> <!-- Suite --> 
+0

試試這個示例:HTTP://www.seleniumeasy.com/ testng-tutorials/parameterization-in-testng – kushal

+0

它看起來是一個TestNG問題,我剛剛報告過它:https: //github.com/cbeust/testng/issues/1417 – juherr

+0

謝謝Juherr&Kushal,同時還有什麼可以解決的呢? – user7836878

回答

0

我不認爲這裏有任何問題。 TestNG實際上不執行BeforeClass方法,因爲該類不包含任何@Test方法。 BeforeSuite大小寫不同,因爲我猜想在這種情況下,它是一個套件級別的執行,並且可能有一些其他類是執行的一部分,它可能在其中有一個Test方法。所以TestNG執行它。

下面是這表明參數是否正確傳遞

import org.testng.annotations.BeforeClass; 
import org.testng.annotations.Parameters; 
import org.testng.annotations.Test; 

public class ParameterizedClass { 
    @Parameters({"browsername"}) 
    @BeforeClass 
    public void setup(String browsername) { 
     System.err.println("Browser name in @BeforeClass is " + browsername); 
    } 

    @Parameters({"browsername"}) 
    @Test 
    public void testMethod(String browsername) { 
     System.err.println("Browser name in @Test is " + browsername); 
    } 

} 

套件文件

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="1265_Suite" parallel="false" verbose="2"> 
    <test name="92" parallel="false" preserve-order="true"> 
     <classes> 
      <class name="com.rationaleemotions.stackoverflow.ParameterizedClass"/> 
      <parameter name="browsername" value="firefox"/> 
     </classes> 
    </test> 
</suite> 

輸出

... 
... TestNG 6.11 by Cédric Beust ([email protected]) 
... 
Browser name in @BeforeClass is firefox 
Browser name in @Test is firefox 

=============================================== 
1265_Suite 
Total tests run: 1, Failures: 0, Skips: 0 
===============================================