构造函数如何在继承自父类java

时间:2015-04-24 08:55:19

标签: java selenium webdriver testng

在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类,它不起作用,我的意思是,我得到了 null指针异常,因为驱动程序对象为null。我认为构造函数没有被调用,我需要帮助来理解构造函数在testng类中的工作方式是否不同。

由于 SK

2 个答案:

答案 0 :(得分:1)

TestNG不会使用参数WebDriver driver调用构造函数,因此它为null。

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

或者您可以使用WebDriver / @BeforeSuite等方法初始化@BeforeClass

答案 1 :(得分:0)

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测试,现在它将解决空指针异常。

由于 萨迪克