0

我使用 Pagefactory 设计模式进行 selenium java 测试,一切正常。我想知道是否可以只为多个操作调用一次 PageFactory 实例,而不是在同一方法中一直重复该实例。我有这样的事情:

private static BasePage basePage; //There is BasePage class somewhere that holds PageFactory elements
basePage = PageFactory.initElements(driver, BasePage.class); // PageFactory initialisation in the test class

public static void loginTest() throws InterruptedException {
     basePage.acceptButton.click();
     basePage.skipButton.click();
     basePage.loginButton.click();
}

basePage每次我执行一个动作时,我都会重复。我在想是否有一种方法可以让 java 只调用basePage一次实例。我试过这样的事情:

basePage.acceptButton.click()
        .skipButton.click();
        .loginButton.click();

代码无法编译。是否有解决方法或者这超出了java?

4

2 回答 2

1

这完全取决于您的测试是如何设计的、页面的内容以及您的体验结果。

我确实尝试设计我的测试,以便我可以在多个测试中共享一个页面对象,您只需要在类级别声明页面对象变量即可。需要注意的是,您的测试步骤需要按预期顺序运行。

一般来说,即使页面本身发生变化,它也会正常工作,因为在您引用它之前不会访问每个元素。但是,如果您发现自己遇到过时元素异常,最好强制重新初始化页面对象。

更新

我刚刚重新阅读了您的整个问题,并意识到我做了一个错误的假设。您正在寻找链接操作,而不是重新实例化页面对象。据我所知,这对于页面对象是不可能的,但我并不声称自己是 Java 专家,所以也许其他人可以确认或否认这一点。

于 2019-01-28T15:21:19.747 回答
1

如果使用“调用链”怎么办?在 BasePage 类中,每个方法都必须以这种方式完成

public BasePage acceptButtonClick(){
   acceptButton.click();
   return this;
}

public BasePage skipButtonClick(){
   skiptButton.click();
   return this;
}
public BasePage loginButtonClick(){
   loginButton.click();
   return this;
}

然后你可以像这样在测试中调用:

basepage.acceptButtonClick()
        .skipButtonClick()
        .loginButtonClick();
于 2020-02-04T12:14:46.197 回答