Java Selenium PageFactory:每个类初始化元素一次?
这可能比selenium更像是一个java问题,但因为我对java非常陌生,所以我不知道答案。我正在使用页面对象模型编写selenium测试。我在一个类中有页面,在另一个类中有测试。但是,我尝试在每个测试类中只执行一次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
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第一个,把代码放在那里!