如何浏览分页列表,直到使用Serenity-JS找到文本?

时间:2019-03-10 07:52:06

标签: protractor serenity-bdd cucumber-serenity serenity-js

我需要断言,我创建的元素已添加到列表中,但添加到它的末尾并已分页。

我正在考虑通过这种方式调用另一个任务来浏览每个页面:

export class CheckItem implements Task {
  static afterCreated(): CheckItem {
    return new CheckItem();
  }

  performAs(actor: PerformsTasks & UsesAbilities): PromiseLike<void> {
    return TakeNotes.as(actor).read('item-name')
      .then((itemName: string) => actor
        .attemptsTo(
          NavigateThroughItemList.untilFinds(itemName),
        ));
  }
}

我需要实现NavigateThrougItemList

1 个答案:

答案 0 :(得分:0)

好的,我通过使用递归调用找到了解决方案。也许有一个更好的解决方案,但是这个对我有用。

export class NavigateThroughItemList implements Task {
  static untilFinds(itemName: string): NavigateThroughItemList {
    return new NavigateThroughItemList(itemName);
  }

  constructor(private itemName: string) {
  }

  @step('{0} navigates through the list until #itemName is found')
  performAs(actor: PerformsTasks): PromiseLike<void> {
    return actor.attemptsTo(
      See.if(Text.ofAll(ItemList.items), include(this.itemName)),
    ).catch(() => actor
      .attemptsTo(
        See.if(
          WebElement.of(ItemList.nextButton),
          isEnabled(),
        ),
      )
      .then(() => actor
        .attemptsTo(
          Click.on(ItemList.nextButton),
        ))
      // Looping until it finds the item
      .then(() => this.performAs(actor)));
  }
}