BaseClass初始化的WebDriver无法在PageClass中继承的原因咨询
核心矛盾:TestNG实例管控范围的差异
TestNG只会负责管理**测试类(TestClass)**的实例生命周期,而页面类(PageClass)的实例是你手动创建的,不在TestNG的管控范围内,这是导致driver为null的根本原因:
TestClass的driver初始化由TestNG触发
TestNG创建TestClass实例时,会自动执行BaseClass中带有TestNG注解(如@BeforeMethod、@BeforeTest)的初始化方法,所以TestClass实例中的driver会被正常初始化并赋值,自然能直接使用。PageClass的driver未被初始化
当你在TestClass中手动创建PageClass实例(比如new HomePage())时,这个PageClass实例的BaseClass初始化逻辑(那些带TestNG注解的方法)不会被TestNG执行——因为TestNG只认自己管理的测试类实例。哪怕你删掉PageClass里的WebDriver声明,它继承自BaseClass的driver依然是未初始化的null状态,调用时自然抛出NullPointerException。构造函数传递的本质:复用已初始化的driver引用
用构造函数传递driver时,你是把TestClass实例中已经完成初始化的driver对象引用,传递给了手动创建的PageClass实例。这时候PageClass使用的是TestNG已经初始化好的driver,所以能正常工作。
总结:TestClass和PageClass是两个完全独立的实例,TestNG只帮前者做初始化,后者必须主动获取已初始化的driver引用,构造函数传递就是最直接有效的方式。
内容的提问来源于stack exchange,提问作者Sandesh

