Selenium webdriver Pagefactory init elements函数在代码中声明一次以进行代码优化

Selenium webdriver Pagefactory init elements函数在代码中声明一次以进行代码优化,selenium-webdriver,testng-eclipse,page-factory,Selenium Webdriver,Testng Eclipse,Page Factory,我正在使用页面对象模型自动化我的项目。但我注意到,每当我为同一个页面对象编写两个不同的自动化场景时,每次使用Pagefactory.initElements方法编写测试用例时,我都需要初始化该测试用例的元素。是否有任何方法可以使它只初始化一次,并且可以在所有测试用例中重用 我试图为例如manorgpom ort=PageFactory.initElementsgetdriver、manorgpom.class创建引用变量;ort是静态的,但它给出了空指针异常。我在测试用例之外初始化了它们,并使引

我正在使用页面对象模型自动化我的项目。但我注意到,每当我为同一个页面对象编写两个不同的自动化场景时,每次使用Pagefactory.initElements方法编写测试用例时,我都需要初始化该测试用例的元素。是否有任何方法可以使它只初始化一次,并且可以在所有测试用例中重用

我试图为例如manorgpom ort=PageFactory.initElementsgetdriver、manorgpom.class创建引用变量;ort是静态的,但它给出了空指针异常。我在测试用例之外初始化了它们,并使引用变量保持静态,但没有成功

    @Test(priority=3)
public void orgact() throws Exception {
    manorgpom ort=PageFactory.initElements(getdriver(), manorgpom.class);
    getdriver().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    ort.actorg();
    Thread.sleep(5000);
}

@Test(priority=4)
public void orgadd() throws Exception{
    manorgpom ort=PageFactory.initElements(getdriver(), manorgpom.class);
    getdriver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    ort.addorg();
    Thread.sleep(10000);
}
如果您看到上面的内容,我需要在每次编写测试用例时初始化web元素。每次我需要提到manorgpom ort=PageFactory.initElementsgetdriver,manorgpom.class;。我想优化这个

这是manageorgpom类的代码段

    public class manorgpom extends Basetest{
@FindBy(xpath="//*[@href='/organization']")
WebElement orglink;

@FindBy(xpath="//*[@class='anticon anticon-filter']")
WebElement filter;

@FindBy(xpath="//*[@placeholder='e.g. High School USA']")
WebElement filternametxt;

@FindBy(xpath="//*[text()='Activate']")
WebElement activatelink;

@FindBy(xpath="//*[@placeholder='e.g. Johnny']")
WebElement contactfirstname;

当我将ort引用变量设置为静态时,每次运行套件时都会得到java.lang.nullPointerException。请帮帮我。

这是因为您的Web驱动程序每次都被实例化。您需要将其设置为单例,并且只使用webDriver的一个实例

public class driverSingleton { 
private static final webDriver instance = new ChromeDriver();   //just for example 
//private constructor to avoid client applications to use constructor private EagerInitializedSingleton(){} 
public static driverSingleton getInstance(){ return instance;

} 

在页面类构造函数中添加PageFactory.initElements可能会有所帮助。你能提供更多的细节吗?你到底需要什么?您能详细说明一下吗?您是否尝试过初始化元素和页面对象级别?你能分享你的页面对象类详细信息吗?我已经添加了我声明所有web元素的代码段。你的getdriver是否每次都创建新的驱动程序对象?你能添加一些代码来更好地说明你的意思吗?公共类驱动程序Singleton{private static final webDriver instance=new ChromeDriver;//举个例子//private构造函数避免客户端应用程序使用构造函数private initializedSingleton{}公共静态驱动器Singleton getInstance{return instance;}}现在使用getInstance获取驱动程序实例并使用它。这应该可以解决您的问题。请不要在注释中添加代码,而是编辑您的答案以增强它。