Java Selenium PageFactory:每个类初始化元素一次?

Java Selenium PageFactory:每个类初始化元素一次?,java,selenium,pageobjects,Java,Selenium,Pageobjects,这可能比selenium更像是一个java问题,但因为我对java非常陌生,所以我不知道答案。我正在使用页面对象模型编写selenium测试。我在一个类中有页面,在另一个类中有测试。但是,我尝试在每个测试类中只执行一次PageFactory.initelements,这样我就不必在每个测试中添加行(在该类中,无论如何,我希望执行以下操作: import com.company.pages.LoginPage public class LoginTests { LoginPage lo

这可能比selenium更像是一个java问题,但因为我对java非常陌生,所以我不知道答案。我正在使用页面对象模型编写selenium测试。我在一个类中有页面,在另一个类中有测试。但是,我尝试在每个测试类中只执行一次
PageFactory.initelements
,这样我就不必在每个测试中添加行(在该类中,无论如何,我希望执行以下操作:

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
类中定义的对象上不断得到
NullPointerException
。这告诉我该页面从未初始化过。但由于我对Java相对较新,我不知道如何初始化它。感谢您的帮助!

无论您声明的变量需要初始化为哪个值

int a;//这是一个声明
a=0;//这是一个初始化
int b=0;//这是一个声明和初始化

就PageObeJCT而言,将Homepage视为一个类,您可以如下初始化webelement

private static WebElement element = null;

您声明的变量需要初始化为一个值

int a;//这是一个声明
a=0;//这是一个初始化
int b=0;//这是一个声明和初始化

就PageObeJCT而言,将Homepage视为一个类,您可以如下初始化webelement

private static WebElement element = null;
试试这个:

LoginPage login;

@Before
public void beforeTest() {
    login = PageFactory.initElements(driver, LoginPage.class );
}
根据:

用@Before注释公共void方法会导致该方法无效 在测试方法之前运行

这将有助于减少测试的繁琐程度。

尝试以下方法:

LoginPage login;

@Before
public void beforeTest() {
    login = PageFactory.initElements(driver, LoginPage.class );
}
根据:

用@Before注释公共void方法会导致该方法无效 在测试方法之前运行


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

谢谢。我理解。我是说我以为我在类的顶部初始化了
LoginPage
类,但我仍然得到了错误。
PageFactory.initElements
的要点是我不需要初始化单个元素,而是初始化ini优化页面并获取页面中的元素。如果我包含
LoginPage login=PageFactory.initElements(driver,LoginPage.class)
在每个
@Test
中,代码都可以正常工作。我只是希望每个类只初始化一次页面,并减少测试的繁琐程度。谢谢。我理解。我是说我以为我在类的顶部初始化了
登录页面
,但我仍然得到了错误。
PageFactory.initElements
是指我不需要初始化单个元素,而是初始化页面并使用页面获取元素。如果我包括
LoginPage login=PageFactory.initElements(驱动程序,LoginPage.class)
在每个
@Test
中,代码都可以正常工作。我只是希望每个类只初始化一次页面,并减少测试的繁琐程度。这实际上不起作用,但它让我找到了答案。我在另一个类中使用了TestNG的
@before方法
,所以我添加了另一个
@Befo请记住在第一个测试类之后执行的实际测试类中的方法
,并将代码放在那里!这实际上不起作用,但它让我找到了答案。我在另一个类中使用TestNG的
@BeforeMethod
,在第二个测试类之后执行的实际测试类中添加了另一个
@BeforeMethod
e第一个,把代码放在那里!