Как перемещаться по нумерованному списку, пока не найдете текст с Serenity-JS? - PullRequest
0 голосов
/ 10 марта 2019

Мне нужно подтвердить, что созданный мною элемент был добавлен в список, но он добавляется в конце и разбивается на страницы.

Я думаю о переходе по каждой странице, вызывая другую задачу следующим образом:

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 голосов
/ 10 марта 2019

Хорошо, я нашел решение с помощью рекурсивного вызова.Может быть, есть лучшее решение для этого, но это сработало для меня.

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)));
  }
}
...