Использование Angular 7.x с Protractor 6 (бета) - PullRequest
0 голосов
/ 09 января 2019

Кто-нибудь еще смог выполнить Angular CLI 7.x E2E тесты, используя Protractor 6 (beta)? Из-за проблем, описанных в https://github.com/angular/protractor/issues/4294,, я с нетерпением ждал попытки selenium-webdriver@4.0.0-alpha.1, но это не было так просто и натолкнулось на проблемы, с которыми webdriver-manager не удалось найти.

A Protractor бета-версия была сокращена здесь:

https://github.com/angular/protractor/commit/205c4d88ace8851b8fa71a75c5d66249c9a63c3b

Обновление (работает сейчас)

Я верю, что понял. Шаги, чтобы заставить это работать:

Использование узла 10.15.0 LTS на Mac OS X 10.13.6:

$ node -v
v10.15.0

Использование Angular CLI 7.2.1.

$ ng version

     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/


Angular CLI: 7.2.1
Node: 10.15.0
OS: darwin x64
Angular: 7.2.0
...

Создание простого приложения:

$ ng new ng72 --routing=true --style=scss

Обновление package.json:

  • "jasmine-core": "^3.3.0",
  • "protractor": "6.0.0-beta"

Обновить тест для await/async:

    import { AppPage } from './app.po';

    describe('workspace-project App', () => {
      let page: AppPage;

      beforeEach(() => {
        page = new AppPage();
      });

      it('should display welcome message', async() => {
        await page.navigateTo();
        await expect(await page.getTitleText()).toEqual('Welcome to ng72!');
      });
    });

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

  • $ npm install
  • $ ./node_modules/protractor/bin/webdriver-manager update
  • $ npm rebuild node-sass
  • $ ng e2e --no-webdriver-update

Google (Version 72.0.3626.53) запустится и тест будет успешно выполнен.

Как примечание. Если вы не выполните await page.getTitleText(), то тест завершается с довольно неясным NoSuchSessionError: неверный идентификатор сеанса :

**************************************************
*                    Failures                    *
**************************************************

1) workspace-project App should display welcome message
  - Expected ElementFinder({ browser_: ProtractorBrowser({ execute: Function, setFileDetector: Function, getExecutor: Function, getSession: Function, getCapabilities: Function, quit: Function, actions: Function, executeScript: Function, executeAsyncScript: Function, wait: Function, sleep: Function, getWindowHandle: Function, getAllWindowHandles: Function, getPageSource: Function, close: Function, getCurrentUrl: Function, getTitle: Function, findElementInternal_: Function, findElementsInternal_: Function, takeScreenshot: Function, manage: Function, switchTo: Function, driver: Driver({ session_: [object Promise], executor_: Executor({ w3c: false, customCommands_: Map( [ 'launchApp', Object({ method: 'POST', path: '/session/:sessionId/chromium/launch_app' }) ], [ 'getNetworkConditions', Object({ method: 'GET', path: '/session/:sessionId/chromium/network_conditions' }) ], [ 'setNetworkConditions', Object({ method: 'POST', path: '/session/:sessionId/chromium/network_conditions' }) ], [ 'sendDevTools ... to equal 'Welcome to ng72!'.

Executed 1 of 1 spec (1 FAILED) in 0.484 sec.
Randomized with seed 13684.
/Users/dev/ng72/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:3190
        throw arguments[0];
        ^

NoSuchSessionError: invalid session id
  (Driver info: chromedriver=72.0.3626.7 (efcef9a3ecda02b2132af215116a03852d08b9cb),platform=Mac OS X 10.13.6 x86_64)

1 Ответ

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

Protractor 6.0.0-beta не работает с angular-cli

Спасибо за то, что вы находитесь на переднем крае (и пробуете мое освобождение)! Надеюсь, это в основном работает, кроме этой проблемы. К сожалению, angular-cli и новая версия (6.0.0-beta) Protractor не будут работать вместе. История этого улучшится, как только Protractor будет официально выпущен и его использует angular-cli.

На данный момент рекомендуется использовать путь, если вы хотите использовать 6 бета-версию, чтобы отделить ее (ваши тесты) от проекта angular-cli.

Когда page.getTitleText() не ожидается

Ваша ошибка с page.getTitleText() может иметь какое-то отношение к тому моменту, когда обещание в конечном итоге будет разрешено, сеанс браузера был закрыт Protractor (это, вероятно, не лучшее сообщение об ошибке). Также вам просто нужно сделать expect(await page.getTitleText()).toEqual('Welcome to ng72!');, вам нужно await перед expect.

...