[英]How does a constructor work in a TestNG class inheriting from a parent java class
在testng类中,我有一个带有以下方法的构造函数super(driver)-调用父类并传递驱动程序对象setup()-此调用转到父类,在父类中创建一个新的驱动程序对象
例如代码
public class LoginTestNG extends ProjectTestBase {
WebDriver driver;
static By locator = By.name("airline");
public LoginTestNG(WebDriver driver) {
super(driver);
System.out.println("I am in constructor");
setup();
}
@Test(dataProvider = "logn")
public static void login_with_valid_user_param(String uname, String passwd){
LoginActions.submit_login(uname,passwd);
}
@DataProvider(name = "logn")
public static Object[][] loginData(){
return new Object[][]{{"test","test"}};
}
}
父类代码:
public class ProjectTestBase{
public LoginActions loginActions;
static LoginPage loginPage;
public static WebDriver driver;
public ProjectTestBase(WebDriver driver){
this.driver=driver;
}
public static void setup(){
driver = startBrowser("firefox");
createActions(driver);
createPages(driver);
launchURL("http://newtours.demoaut.com/index.php");
driver.manage().window().maximize();
}
public static void createActions(WebDriver driver){
loginActions = new com.newtours.actions.LoginActions(driver);
}
public static void createPages(WebDriver driver){
loginPage = new LoginPage(driver);
}
}
我的问题是:1.如果我在Java类中运行测试,则此代码可以正常工作。2.如果将测试添加到testNG类中,它将无法正常工作,我的意思是,我正在
空指针异常,因为驱动程序对象为空。 我认为构造函数没有被调用,我需要帮助来了解构造函数在testng类中是否有不同的工作。
谢谢sk
TestNG不会使用参数WebDriver driver
调用构造函数,因此它为null。
如果要向测试传递一些参数,可以使用:
@Parameters
http://testng.org/doc/documentation-main.html#parameters @DataProvider
http://testng.org/doc/documentation-main.html#parameters-dataproviders 或者,您可以使用@BeforeSuite
/ @BeforeClass
等方法来初始化WebDriver
。
TestNg在基于注释的基础上执行测试用例,您在父级上有两个webdriver参考变量,当您在子类上调用setup方法时会初始化该变量,另一个webdriver参考变量在子类中始终为null值。
解决方案:您需要在父类设置方法中使用TestNG beforeclass或BeforeSuite,如下所示:
public class ProjectTestBase {
public LoginActions loginActions;
static LoginPage loginPage;
public static WebDriver driver;
/*public ProjectTestBase(WebDriver driver) {
this.driver = driver;
}*/
@BeforeClass
public static void setup() {
driver = startBrowser("firefox");
createActions(driver);
createPages(driver);
launchURL("http://newtours.demoaut.com/index.php");
driver.manage().window().maximize();
}
public static void createActions(WebDriver driver) {
loginActions = new com.newtours.actions.LoginActions(driver);
}
public static void createPages(WebDriver driver) {
loginPage = new LoginPage(driver);
}
}
从两个类中删除构造函数:
运行您的testng测试,现在它将解决null指针异常。
谢谢萨迪克
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.