繁体   English   中英

构造函数如何在从父Java类继承的TestNG类中工作

[英]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。

如果要向测试传递一些参数,可以使用:

或者,您可以使用@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM