当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法来声明一个参数在类级与testng

公西飞鸾
2023-03-14

我正在努力用testNG在类级别声明一个参数。我有一个browser参数,在方法级别声明时可以正常工作。

因为我正在将测试映射到cucumber步骤定义,并将在方法级别声明一个url参数,所以我想将browser参数从方法级别转移到类(全局)级别。因此,在xml文件中,我将浏览器参数从测试级别移动到套件级别,如下所示:

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


<suite name="Suite" parallel="tests" thread-count="5">

    <!-- Parametter moved to suite level -->
    <parameter name="Browser" value="CHROME"/>
    <parameter name="Browser" value="FF"/>

    <test name="Chrome Test">
        <classes>
            <class name="tests.web.WebTest"/>
        </classes>
    </test>

    
    <test name="Firefox Test">
        <classes>
            <class name="tests.web.WebTest"/>
        </classes>
    </test>
</suite>

然后在测试类中,我从方法和类中删除了浏览器参数,并将浏览器声明为公共静态。不幸的是,浏览器在运行时找不到,导致一个NullPointerExc0019

@Parameters("Browser") //parameter declared at class level
public class WebTest {


  WebDriver driver = null;
  BasePageWeb basePage;
  public static String browser; //class variable


  @BeforeClass
  public void navigateToUrl() {
    switch (browser) { //NullpointerException thrown here

      case "CHROME":
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
        break;

      case "FF":
        WebDriverManager.firefoxdriver().setup();
        driver = new FirefoxDriver();
        break;

      default:
        driver = null;
        break;
    }
    driver.get("www.google.com");

  }

如何在类级别成功声明浏览器参数?

共有1个答案

高兴贤
2023-03-14

为参数注释METHODCONSTRUCTORTYPE定义了目标ElementTypes。

@Retention(RUNTIME)
@Target({METHOD, CONSTRUCTOR, TYPE})
public @interface Parameters {|
...

TYPE意味着它可以在类级别上定义。

我试着找到任何使用这种用法的例子,也试着让它自己工作(也试着分配给一个静态变量)。

但是运气不好。。

所以我可以建议这个替代方案(为构造函数定义@Parameter):

public class WebTest {

   public String browser;

   @Parameters({ "Browser" })
   public WebTest(String browser) {
       this.browser = browser;
   }

...
}

xml似乎是:

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


<suite name="Suite" parallel="tests" thread-count="5">

    <test name="Chrome Test">
        <parameter name="Browser" value="CHROME"/>
        <classes>
            <class name="tests.web.WebTest"/>
        </classes>
    </test>

    
    <test name="Firefox Test">
        <parameter name="Browser" value="FF"/>
        <classes>
            <class name="tests.web.WebTest"/>
        </classes>
    </test>
</suite>
 类似资料: