Угловой 7, транспортир, случайная ошибка "и угловая тестируемость, и угловая тестируемость не определены" - PullRequest
0 голосов
/ 17 января 2019

Я случайно получаю ошибку:

Ошибка: ошибка при ожидании синхронизации транспортира со страницей: «и angularJS тестируемость, и угловая тестируемость не определены. Это может быть либо потому, что это неугловая страница, либо потому что Ваш тест включает в себя навигацию на стороне клиента, которая может помешать Самозагрузка транспортира. Подробнее см. https://github.com/angular/protractor/issues/2643

работает

$ ng e2e --webdriverUpdate=false --devServerTarget=

В моем файле spec.ts у меня есть следующие 2 теста, первый всегда работает, второй случайный сбой с вышеуказанной ошибкой.

  beforeEach(async () => {
    myPage = new MyPage();
    browser.get('my-page');
  });

  it('should work', async () => {
    console.log('should work');
    expect(true).toBeTruthy();
  });

  it('should display the title', async () => {
    const title = await $('my-title-selector').getText();
    expect(title).toEqual('My-Title');
  });

Вот объект MyPage PageOb:

import { $, $$ } from 'protractor';

export class MyPage {
  title = $('my-title-selector');
}

Вот мой транспортир.conf.js

  // Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts

const { SpecReporter } = require('jasmine-spec-reporter');

exports.config = {
  allScriptsTimeout: 11000,
  specs: [
    './src/**/*.e2e-spec.ts'
  ],
  capabilities: {
    'browserName': 'chrome'
  },
  SELENIUM_PROMISE_MANAGER: false,
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  framework: 'jasmine',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function () { }
  },
  onPrepare() {
    require('ts-node').register({
      project: require('path').join(__dirname, './tsconfig.e2e.json')
    });
    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
  },
};

У вас есть идеи?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Ваш первый тест будет проходить всегда, потому что он не взаимодействует с приложением и, следовательно, не проверяет тестируемость углового сайта. Ваш второй тест, однако, пытается взаимодействовать с приложением, но, по-видимому, истекает время ожидания, поскольку страница не стала тестируемой на этом этапе. По этой же причине ваши тесты проходят, когда waitForAngularEnabled (false), поскольку они больше не проверяют тестируемость.

Может возникнуть проблема с разрешением вашей страницы, если ваш угловой код использует $ интервал или $ тайм-ауты определенным образом. Ознакомьтесь с обновлениями основного вопроса по ссылке ниже и посмотрите, могут ли они применяться к вашему проекту.

Как отлаживать тайм-аут ожидания асинхронных угловых задач? Не удается найти элементы на угловой странице, встречающиеся

0 голосов
/ 17 января 2019

Если вы используете async / await (которым вы являетесь!), Вам нужно будет дождаться всех обещаний. Поэтому я предполагаю, что ваше beforeEach обещание загрузить страницу не выполнено, и вы ищете веб-элемент, который, возможно, не был должным образом загружен Protractor.

beforeEach(async () => {
  myPage = new MyPage();
  await browser.get('my-page');   // browser.get returns a webdriver.promise.Promise
});

it('should work', async () => {
  console.log('should work');
  expect(true).toBeTruthy();
});

it('should display the title', async () => {
  const title = await $('my-title-selector').getText();  // <-- this is right, getText returns a webdriver.promise.Promise<string>
  expect(title).toEqual('My-Title');
});

Если вы используете Protractor 5.4, он все еще использует библиотеку управления потоком / обещанием selenium-webdriver, а не собственные Promises. Таким образом, webdriver.promise.Promise - это набор команд селен-веб-драйвера, пространство имен обещания, объект обещания. В Protractor 6 (когда он не в бета-версии) он переключится на собственные обещания.

Надеюсь, это поможет.

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