如何在@BeforeSuite中使用testNG @Parameters从testng.xml中读取值

时间:2017-07-14 14:55:40

标签: testng

我正在使用带有Selenium webdriver 3.4的testNG。我想同时为不同的浏览器执行测试。

在我的testNG.xml中,我有

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Demo">
  <test name="Demo on Chrome">
  <parameter name="browser" value="Chrome" />
    <classes>
      <class name="catalogueMemberPortal.CatalogueTest"/>
    </classes>
  </test>
  <test name="Demo on Firefox">
  <parameter name="browser" value="Firefox" />
    <classes>
      <class name="catalogueMemberPortal.CatalogueTest"/>
    </classes>
  </test>
</suite>

我的代码

public class BaseClass {
    public static WebDriver driver;

    public WebDriver getDriver() {
        return driver;
    }
     @BeforeSuite
     @Parameters({"browser"})
     public void launchBrowser(String browser) throws Exception {

         if (browser.equalsIgnoreCase("Firefox")){

             String ffDriverPath = ((System.getProperty("user.dir")+"/browser_drivers/firefox/geckodriver.exe")) ;
             System.setProperty("webdriver.gecko.driver",ffDriverPath);
             driver = new FirefoxDriver();
             logger.info("Firefox Initialized");
     }
        // same goes for other type of browsers

     @AfterSuite

     public void afterSuite() {

        driver.close();
        driver.quit();

     }
    }

我收到错误

  

org.testng.TestNGException:      参数&#39;浏览器&#39; BeforeSuite在方法launchBrowser上是必需的,但尚未标记为@Optional或已定义      在C:\ testng.xml

1 个答案:

答案 0 :(得分:0)

您的浏览器参数位于<test>节点,而不是<suite>节点。 在套件级别,参数不存在。

只需将@BeforeSuite@AfterSuite替换为@BeforeTest@AfterTest