【发布时间】:2015-09-29 02:36:21
【问题描述】:
我正在办公室做一些硒工作,最近对我正在自动化的页面进行了一些更改,我试图找出最好的方法。我不确定如何解释一切,但我会试一试。
我有一张包含不同“步骤”的付款表格。每个步骤都要求您填写一些信息,它们都有一个“继续”按钮可以进入下一步。由于每个 pageObject 共享同一个按钮,我使用该逻辑创建了一个抽象类,并让页面从该逻辑扩展。
类似这样(删除所有与问题无关的代码):
public abstract class AbstractPaymentPage<T extends AbstractPaymentPage> extends AbstractPageObject {
@FindBy(id = "continueBtn")
private WebElement continueButton;
public AbstractPaymentPage(WebDriver driver) {
super(driver);
}
public T nextStep() {
continueButton.click();
return this.initPageObject(getNextStepClass());
}
protected abstract Class<T> getNextStepClass();
}
子类是这样定义的:
public class PersonalInfoPage extends AbstractPaymentPage<PaymentCountryPage> {
public PersonalInfoPage(WebDriver driver) {
super(driver);
}
@Override
protected Class<PaymentCountryPage> getNextStepClass() {
return PaymentCountryPage.class;
}
}
典型的用法是调用PersonalInfoPage.nextStep(),它将单击继续按钮并初始化下一页上的所有webElement。
现在,这可行,我实际上对它非常满意,但它只有在当前页面能够准确判断下一个页面出现的情况下才有效。在这种情况下,“PersonalInfoPage”知道下一个是“PaymentCountryPage”。但是随着这些新的变化,在某些情况下,流程将是 PageA->PageB->PageC->PageD,其他可能是 PageA->PageD,其他可能是 PageA->PageC->PageD。
你们认为在不以大量代码重复结束的情况下处理此类事情的最佳方法是什么?正在考虑也许我可以使用通用变量而不是“getNextStepClass”的实际目标类,但我不确定它是如何工作的。
不知道是否足够清楚以获得一些帮助,但请随时询问你们认为需要更多解释的任何内容。
【问题讨论】:
标签: java selenium abstract-class extends pageobjects