Каков наилучший способ обработки объектов Page для разных сред? - PullRequest
0 голосов
/ 15 февраля 2019

У нас есть две поддержки, например, США и Канада.Некоторые страницы абсолютно одинаковы, а некоторые имеют разные параметры.Как я могу использовать шаблон объекта страницы, чтобы определить страницы для этой ситуации и уменьшить дубликаты?

Давайте возьмем страницу входа в систему, для США:

import { by, element, ElementFinder } from 'protractor';

export class Homepage {

  public startNowButton: ElementFinder;
  public signinLink: ElementFinder;

  constructor() {
    this.startNowButton = element(by.css('button[sso-modal="SignUp"]'));
    this.signinLink = element(by.linkText('Sign in'));
  }
}

Для Канады есть дополнительный флажок,

export class Homepage {

  public startNowButton: ElementFinder;
  public signinLink: ElementFinder;
  public loanPurposeRadio: string;

  constructor() {
    this.startNowButton = element(by.css('button[sso-modal="SignUp"]'));
    this.signinLink = element(by.linkText('Sign in'));
    this.loanPurposeRadio = '[ng-form="loanPurposeField"] label';
  }
}

Если я хочу поддержать обасайты, то каков наилучший способ моделировать объекты страниц в таких ситуациях, а не создавать два класса?Спасибо

1 Ответ

0 голосов
/ 15 февраля 2019

Я не эксперт JS.Я не проверял приведенный ниже код.Я объясняю, основываясь на том, как я достиг бы этого в Java.Вы можете изменить соответственно.

Я бы создал абстрактный класс HomePage, который определяет все общие функциональные возможности для всех локалей.USHomePage, CAHomePage классы должны расширять HomePage.Или, Вы также можете использовать USHomePage в качестве Базового класса HomePage, и CAHomePage расширит это.

Теперь в приведенном ниже примере у вас есть все функции домашней страницы США, и вы также добавили специальныеособенности CA.

Например:

 export class CAHomepage extends HomePage {

  public loanPurposeRadio: string;

  constructor() {
    super();
    this.loanPurposeRadio = '[ng-form="loanPurposeField"] label';
  }

}

Теперь вы можете поддерживать некоторый класс фабрики для возврата конкретного экземпляра HomePage в зависимости от сайта, который вы тестируете.

var homePageFactory = {
   "US": () => { return new HomePage() },
   "CA": () => { return new CAHomePage() },
   "UK": () => { return new UKHomePage() }
}

В зависимости от региона / страны, вы можете получить доступ к определенной домашней странице.Ваши тесты не привязаны к конкретному сайту, а являются очень общими.Зависит от сайта, который вы тестируете, они ведут себя по-разному.

var lang = "US"
var homePage = homepageFactory[lang]();
homePage.login();
homePage.register();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...