node.js - Misslyckades med att ladda config.ts på grund av import av protractor


Jag försöker starta ett nytt Protractor-projekt för att testa en Angular-sida. Jag har installerat Node.js, TypeScript, Protractor globalt och Jasmine. Jag går till projektmappen och kör webdriver-manager update. Sedan kör jag webdriver-manager start. Jag bygger också config.ts med tsc config.ts. Allt fungerar bra tills jag försöker protractor config.ts. Här kommer jag att tillhandahålla min config.ts och min package.json.

{
"name": "protractortests",
"version": "1.0.0",
"description": "Automated tests for a game platform",
"main": "index.js",
"dependencies": {
  "@types/jasmine": "^3.3.12",
  "@types/node": "^12.0.2",
  "jasmine": "^3.4.0",
  "protractor": "^5.4.2"
},
"devDependencies": {},
"scripts": {
  "test": "protractor config.ts"
}

och min config.ts:

import { ProtractorBrowser, Config } from "protractor";
    export let config: Config = {
      seleniumAddress: 'http://localhost:4444/wd/hub',
      capabilities: {
        'browserName': 'chrome'
        },

      framework: 'jasmine',
      specs: ['./FirstSpec.ts'],
      jasmineNodeOpts: {
        defaultTimeoutInterval: 90000
      },
      onPrepare: () => {
       let globals = require('protractor/built');
       let browser = globals.browser;
       browser.manage().window().maximize();
       browser.manage().timeouts().implicitlyWait(5000);
     }
    }
E/configParser - Error code: 105
[11:40:53] E/configParser - Error message: failed loading configuration file config.ts
[11:40:53] E/configParser - C:\Users\Victor\Documents\ProtractorTests\config.ts:1
(function (exports, require, module, __filename, __dirname) { import { ProtractorBrowser, Config } from "protractor";
                                                                     ^

SyntaxError: Unexpected token {
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
npm ERR! Test failed.  See above for more details.

Svar #1

Genom att hänvisa till exemplet på länken https://github.com/angular/protractor/tree/5.4.1/exampleTypescript

Du behöver inte importera ProtractorBrowser. Du kan arbeta med browser direkt med objektet Browser.

Svar #2

Kommentatorer påpekade att du inte kan ge Protractor en konfigurationsfil i native Typescript, och behöver kompilera den till config.js och sedan skicka den. Det finns egentligen ingen poäng med att skriva filen i Typescript alls, det bara lägger till ett extra steg som inte ger något värde för dig. Om du vill ha autokomplettering i editorn kan du dekorera din JS med typkommentarer:

const { join } = require("path");
const { register } = require("ts-node");

const { SpecReporter, StacktraceOption } = require("jasmine-spec-reporter");


/** @type {import("protractor").Config} */
const config = {
    directConnect: true,
    baseUrl: "http://localhost:8080",
    framework: "jasmine",
    noGlobals: true,
    specs: [ "./src/**/*.e2e.ts" ],
    onPrepare() {
        register({
            project: join(__dirname, "./tsconfig.json")
        });
        jasmine.getEnv().addReporter(new SpecReporter({
            spec: {
                displayStacktrace: StacktraceOption.PRETTY
            }
        }));
    }
};

module.exports = { config };

Jag anpassade min konfiguration från detta utmärkta exempel.