Шаблон повторного использования функции WebdriverIO - PullRequest
1 голос
/ 06 марта 2019

Я перехожу из Selenium в WebdriverIO и сталкиваюсь с некоторыми трудностями в отношении повторного использования функций.Позвольте мне продемонстрировать на примере:

<nav>
  <div><a>Clients</a></div>
  <div><a>Accounts</a></div>
  <div><a>Packages</a></div>
</nav>

Допустим, у меня есть панель навигации с 3 ссылками выше.Когда я попадаю на эту страницу, я хочу проверить, существует ли каждая ссылка.Моя функция может выглядеть примерно так:

class LoginPage extends Page {

  get clientsLink() { return $('//a[contains(., "Clients")]'); }


  isTabDisplayed() {
    if (this.clientsLink.isDisplayed()) {
      return true;
    } else {
      false
    }
  }
}

это нормально, за исключением того, что мне нужно написать еще 2 геттера для Accounts и Packages, и поэтому мой класс будет выглядеть так:

class LoginPage extends Page {

  get clientsLink() { return $('//a[contains(., "Clients")]'); }
  get accountsLink() { return $('//a[contains(., "Accounts")]'); }
  get packagesLink() { return $('//a[contains(., "Packages")]'); }

  isClientTabDisplayed(tab) {
    if (this.clientsLink.isDisplayed()) {
      return true;
    } else {
      false
    }
  }

  isAccountsTabDisplayed(tab) {
    if (this.accountsLink.isDisplayed()) {
      return true;
    } else {
      false
    }
  }

  isPackagesTabDisplayed(tab) {
    if (this.packagesLink.isDisplayed()) {
      return true;
    } else {
      false
    }
  }
}

, в этот момент мое беспокойство вспыхивает, и я начинаю думать о том, как я могу повторно использовать функцию isTabDisplayed, где я могу передать строку получателю с именем моей вкладки или что-то в этом роде.

К сожалению, геттеры не принимают параметры, и до сих пор я не нашел в Google никаких ресурсов, которые могли бы помочь мне решить эту проблему (чаще всего это объектная модель страницы, которая, похоже, не решает эту проблему)

Является ли мой мыслительный процесс нестандартным, что я стремлюсь к многоразовому коду при тестировании пользовательского интерфейса, или я не ищу в Google правильные шаблоны?

1 Ответ

1 голос
/ 07 марта 2019

Объекты страниц в WebdriverIO - это просто классы ES6.Просмотрите документацию по классам ES6, чтобы понять, как вы можете создавать функции, в которые вы можете передавать аргументы.

Теперь, как говорится, то, что вы здесь делаете, не нужно.Вместо того, чтобы создавать функцию, которая ссылается на получатель, почему бы просто не ссылаться на этот получатель непосредственно в вашем тесте?

const login = new LoginPage();
const isAccountsTabDisplayed = login.accountsLink.isDisplayed();

Нет никакой причины создавать функцию-оболочку для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...