Protractor e2e test не распознает изменения в navbar после входа в систему - PullRequest
0 голосов
/ 10 июля 2019

При запуске теста e2e тест включает в себя вход в систему компьютера с указанным адресом электронной почты и паролем с использованием API входа Google.После входа в систему навигационная панель изменится, сказав «Войти в систему».Я пытаюсь подождать в моем тестовом примере, пока не появится Logout, но транспортир никогда не распознает его, даже если я вижу его при запуске теста.

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

Я также добавил код, чтобы посмотреть, может ли он нажать кнопку выхода из системы, и это работает.Так что теперь я очень смущен, почему browser.wait никогда не разрешает выход из системы.

navbar.component.html (частичный)

  <ul fxLayout fxLayoutGap="20px" class="navigation-items">
        <li>
          <a routerLink='/'>
            <mat-icon id="home-icon" class="icon">home</mat-icon>
            <span class="label">Home</span>
          </a>
        </li>
        <li>
          <a>
            <mat-icon id="input-icon" class="icon">account_circle</mat-icon>
            <div *ngIf="auth.user$ | async; then user else guest"></div>
            <ng-template #user>
              <span class="label" id="logout" (click)="auth.signOut()">Logout</span>
            </ng-template>
            <ng-template #guest>
              <span class="label" id="login" (click)="auth.googleSignin()">Login</span>
            </ng-template>
          </a>
        </li>

   </ul>

контрольный пример

describe('Student Component e2e tests', () => {
  const ec = protractor.ExpectedConditions;
  const BROWSER_WAIT = 5000;

  beforeAll(() => {
    this.signInButton.click();
    this.loginToGoogle();
    // browser.sleep(5000);
    // element(by.id('logout')).click(); // able to click logout button
    // browser.sleep(5000);
    browser.wait(ec.visibilityOf(element(by.id('logout'))), 
  BROWSER_WAIT);
  });

  it('should find Logout button', () => {
    expect(element(by.id('logout')).isPresent()).toBe(true);
  });
});

Я ожидаю, что вывод вернется без ошибок, но фактический вывод вернетошибка истечения времени ожидания.

Чтобы воссоздать клон репозитория https://github.com/ChadwickSchool/Weight-Lifting-App/tree/logout-test-error

Затем выполните команды

git checkout logout-test-error
npm install
ng e2e

1 Ответ

0 голосов
/ 16 июля 2019

Эта проблема может возникнуть из-за того, что Protractor не разрешает обещание в browser.wait (ec.visibilityOf (element (by.id ('logout')))). Зачем? Скорее всего, потому что форма входа не является угловой, поэтому Protractor пытается синхронизироваться с ней, но никогда не происходит. Тесты работают, когда вы удаляете browser.wait (ec.visibilityOf ..., потому что нет никаких обещаний. Попробуйте использовать browser.ignoreSynchronization = true перед открытием формы входа и browser.ignoreSynchronization = false после вашего последнего ожидания (browser.sleep (5000))

...