Pagefactory init 元素函数在代码中声明一次,用于代码优化

Pagefactory init elements function to be declared once in code for code optimization

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

我试图制作参考变量,例如"manorgpom ort=PageFactory.initElements(getdriver(), manorgpom.class);" 本来是静态的,但它给出了空指针异常。我在我的测试用例之外初始化了它们并将引用变量设为静态但没有成功。

    @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);
}

如果你看到上面我每次写测试用例时都需要初始化网页元素。每次我需要提到"manorgpom ort=PageFactory.initElements(getdriver(), manorgpom.class);"。我想优化这个。

这是 manageorgpom class 片段。

    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。请帮助我。

那是因为您的 webDriver 每次都会被实例化。您需要使其成为单例并仅使用 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;

} 

** 试试这个代码它一定会帮助你

public class manorgpom 扩展了 Basetest{

private final Config config;
    

@FindBy(xpath="//*[@href='/organization']") WebElement 组织链接;

@FindBy(xpath="//*[@class='anticon anticon-filter']") Web元素过滤器;

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

@FindBy(xpath="//*[text()='Activate']") WebElement 激活链接;

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

protected manorgpom(WebDriver driver, Config config, boolean autoInitialize) {
    super(driver);

    this.config = config;

    if (autoInitialize) {
        PageFactory.initElements(getWebDriver(), this);
    }
}