我要做的是读取参数化值并在前一类中使用它们来为bowser设置webdriver,如参数所示,在浏览器中运行测试。然后获取下一个浏览器并在该浏览器中运行测试,依此类推所有其他指定的浏览器。但是我在前面的parmeter中得到了空值。你能在Junit中做到这一点,还是有其他方法可以做到这一点?
由于
@RunWith(value = Parameterized.class)
public class MultiBrowser {
private static WebDriver driver;
private static String browser;
//private static Dimension device;
private static String testData = "Testing";
private static String device;
@Parameters
public static Collection< Object[]> data() {
System.out.println("Inside parameter");
return Arrays.asList(new Object[][]{{"Firefox", "IPHONE4"},{"Chrome", "IPAD"},{"Ie", "SamsungGalaxy"}});
}
public MultiBrowser(String browser, String device){
System.out.println("Inside MultiBrowser = "+ browser+" " + device);
this.browser=browser;
this.device=device;
}
@BeforeClass
public static void dosetUp() throws Exception {
System.out.println("Doing setup before class..." + browser + device);
}
答案 0 :(得分:1)
您在这里使用的技术不起作用。 @Parameters
是通过构造函数注入的,但是在调用任何构造函数之前会调用静态@BeforeClass
方法,因此这些静态字段将为null
。
您的问题与Creating a JUnit testsuite with multiple instances of a Parameterized test和Parameterized suites in Junit 4?非常相似;这两个答案都表明TestNG是一个能够做到这一点的框架。
在JUnit中,您可以使用
How do I Dynamically create a Test Suite in JUnit 4?
建议的技术动态构建测试套件,并在不使用@Parameters
的情况下完成。
或者,对于更简单但效率更低的解决方案,请将您的设置代码移动到非静态@Before
方法中,并接受它将在每次测试之前运行。