我使用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的范围?
如果使用"调用链"怎么办?在 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();
这完全取决于您的测试设计方式、页面内容以及您体验的结果。
我确实尝试设计我的测试,以便我可以在多个测试之间共享页面对象,您只需要在类级别声明页面对象变量即可执行此操作。 需要注意的是,测试步骤需要按预期顺序运行。
一般来说,即使页面本身发生变化,它也可以正常工作,因为在您引用每个元素之前都不会访问它。 但是,如果您发现自己遇到过时的元素异常,最好强制重新初始化页面对象。
更新
我刚刚重新阅读了您的整个问题,并意识到我做出了错误的假设。 您希望链接操作,而不是重新实例化页面对象。 据我所知,这在页面对象中是不可能的,但我并不声称自己是 Java 专家,所以也许其他人可以确认或否认这一点。