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.

这将有助于减少测试的冗长程度。