Selenium - 每个页面都有一个' next'按钮但相同的按钮并不总是指向同一页面

时间:2015-09-29 02:36:22

标签: java selenium abstract-class extends pageobjects

我在办公室做了一些硒工作,最近对我自动化的页面进行了一些更改,我试图找出最好的方法。我不确定如何解释一切,但我会尝试一下。

我有一个付款表格,其中包含不同的步骤'。每一步都要求您填写一些信息,并且他们都会继续'继续'按钮转到下一步。由于每个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(),它将点击“继续”按钮并初始化下一页上的所有webElements。

现在,这很有效,我实际上很满意它,但它只有在当前页面可以确切地确定下一个页面出现时才有效。在这种情况下,&#39; PersonalInfoPage&#39;知道下一个是&#39; PaymentCountryPage&#39;。但是,在这些新的变化的情况下,流程将是PageA-&gt; PageB-&gt; PageD,其他可以是PageA-&gt; PageD和其他可以是PageA-&gt; PageC-&gt; PageD 。

你们认为最好处理这样的事情而没有大量的代码重复?想到也许我可以使用通用变量而不是实际的目标类来获得&#39; getNextStepClass&#39;但我不确定这是怎么回事。

Dunno如果它足够清楚以获得一些帮助,但随时可以问你们认为需要更多解释的所有内容。

1 个答案:

答案 0 :(得分:1)

可以通过在PageObjectModel中引入一些自加载逻辑来处理这种复杂场景。更多IoC LoadableComponentSlowLoadableComponent可以在这里提供很大的帮助。简而言之 - 让最后一页知道如何通过调用上一页(如果适用于您的域)加载自身。

而不是

  

PageA-&GT; PageB-&GT; PageC-&GT;寻呼

你会得到像

这样的东西
PageD-load->PageC-load->PageB-load->PageA

这里明显的优势将是可避免的接收控制流程,以避免

  

以大量代码重复结束