Selenium PageFactory:每 class 初始化一次元素?
Selenium PageFactory: initelements once per class?
这可能更像是一个 java 问题,而不是 selenium,但由于我是 Java 的新手,所以我不知道答案。我正在使用页面对象模型编写 selenium 测试。我将页面放在一个 class 中,将测试放在另一个中。但是,我试图在每个测试 class 中只执行一次 PageFactory.initelements
,所以我不必在每个测试中添加该行(在那个 class 中,无论如何,我想做一些事情像这样:
import com.company.pages.LoginPage
public class LoginTests {
LoginPage login = PageFactory.initElements(driver, LoginPage.class );
@Test
public void test1() {
login.method();
}
@Test
public void test2() {
login.methodTwo();
}
}
但是我一直在 LoginPage
class 中定义的对象上得到 NullPointerException
。这告诉我该页面从未初始化过。但是由于我对 Java 比较陌生,所以我不知道如何初始化它。感谢您的帮助!
无论你声明的哪个变量需要初始化为一个值。
int a; // This is a declaration
a = 0; // This is an initialization
int b = 0; // This is a declaration and initialization
在 pageObejcts 方面,将 Homepage 视为 class,您可以按如下方式初始化 webelement
private static WebElement element = null;
试试这个:
LoginPage login;
@Before
public void beforeTest() {
login = PageFactory.initElements(driver, LoginPage.class );
}
根据this:
Annotating a public void method with @Before causes that method to be
run before the Test method.
这将有助于减少测试的冗长程度。
这可能更像是一个 java 问题,而不是 selenium,但由于我是 Java 的新手,所以我不知道答案。我正在使用页面对象模型编写 selenium 测试。我将页面放在一个 class 中,将测试放在另一个中。但是,我试图在每个测试 class 中只执行一次 PageFactory.initelements
,所以我不必在每个测试中添加该行(在那个 class 中,无论如何,我想做一些事情像这样:
import com.company.pages.LoginPage
public class LoginTests {
LoginPage login = PageFactory.initElements(driver, LoginPage.class );
@Test
public void test1() {
login.method();
}
@Test
public void test2() {
login.methodTwo();
}
}
但是我一直在 LoginPage
class 中定义的对象上得到 NullPointerException
。这告诉我该页面从未初始化过。但是由于我对 Java 比较陌生,所以我不知道如何初始化它。感谢您的帮助!
无论你声明的哪个变量需要初始化为一个值。
int a; // This is a declaration
a = 0; // This is an initialization
int b = 0; // This is a declaration and initialization
在 pageObejcts 方面,将 Homepage 视为 class,您可以按如下方式初始化 webelement
private static WebElement element = null;
试试这个:
LoginPage login;
@Before
public void beforeTest() {
login = PageFactory.initElements(driver, LoginPage.class );
}
根据this:
Annotating a public void method with @Before causes that method to be run before the Test method.
这将有助于减少测试的冗长程度。