selenium webdriver - Protractor med Typescript 2.0.0 problem med duplicerad identifierare


Jag uppgraderar till att använda Typescript 2.0 med Protractor 4.0.5. Jag uppgraderar ett projekt från Typescript 1.8 och Protractor 3.8. Jag har stött på en massa problem, som jag delar här:

Mitt package.json är:

{
"dependencies": {
"core-js": "2.2.2",
"rxjs": "5.0.0-beta.6",
"web-request": "^1.0.3",
"zone.js": "0.6.12"
},
"devDependencies": {
"@types/jasmine": "^2.5.35",
"@types/node": "^6.0.45",
"@types/protractor": "^1.5.20",
"@types/selenium-webdriver": "^2.53.33",
"es6-promise": "3.1.2",
"es6-promise-loader": "1.0.1",
"es6-shim": "0.35.0",
"es7-reflect-metadata": "1.6.0",
"exports-loader": "0.6.3",
"imports-loader": "0.6.5",
"jasmine-reporters": "^2.2.0",
"json-loader": "0.5.4",
"mkdirp": "^0.5.1",
"phantomjs-polyfill": "0.0.2",
"phantomjs-prebuilt": "2.1.7",
"pix-diff": "^1.0.14",
"protractor": "4.0.5",
"protractor-jasmine2-html-reporter": "0.0.6",
"protractor-jasmine2-screenshot-reporter": "^0.3.2",
"raw-loader": "0.5.1",
"rimraf": "2.5.2",
"ts-helpers": "1.1.1",
"ts-node": "0.7.1",
"tslint": "3.7.4",
"tslint-loader": "2.1.3",
"typedoc": "0.4.3",
"typescript": "^2.0.0-beta",
"underscore": "^1.8.3"
 }

Då är min package json:

 "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "sourceMap": true,
    "noEmitHelpers": true,
    "lib": ["es6", "dom"],
    "types":[
    ]
  },
  "exclude": [
    "node_modules",
    "typings"
  ],
  "filesGlob": [
    "./src/**/*.ts",
    "!./node_modules/**/*.ts"
  ],
  "awesomeTypescriptLoaderOptions": {
    "resolveGlobs": true,
    "forkChecker": true,
    "compiler": "node_modules/typescript"
  },
  "compileOnSave": false,
  "buildOnSave": false,
  "atom": { "rewriteTsconfig": false }
}

När jag försöker köra protractortester med den inställningen får jag en massa fel som detta:

node_modules\@types\selenium-webdriver\index.d.ts (12,11): Duplicate identifier 'Driver'. (2300)
node_modules\@types\selenium-webdriver\index.d.ts (46,11): Duplicate identifier 'Options'. (2300)
node_modules\@types\selenium-webdriver\index.d.ts (310,11): Duplicate identifier 'ServiceBuilder'. (2300)
node_modules\protractor\typings\globals\selenium-webdriver\index.d.ts (12,11): Duplicate identifier 'Driver'. (2300)
node_modules\protractor\typings\globals\selenium-webdriver\index.d.ts (46,11): Duplicate identifier 'Options'. (2300)
node_modules\protractor\typings\globals\selenium-webdriver\index.d.ts (310,11): Duplicate identifier 'ServiceBuilder'. (2300)

Hur löser man det problemet, eftersom jag tror att allt är korrekt inställt. Jag använder Protractor 4.0.5 som borde fungera med TypeScript 2.0.

Svar #1

Protractor tog bort typdeklarationerna i version 5.x, så du kan helt enkelt uppgradera versionen av Protractor som du använder och problemet bör försvinna.

Om du har/vill stanna på version 4.0.5 kan du alltid avinstallera webdriver-typerna genom att köra:

npm uninstall --save-dev @types/selenium-webdriver

Svar #2

Vänligen öppna ett ärende på protractor. Det bör inte distribuera typerna för selenium-webdriver i sitt paket.

För nu, prova detta fula hack för att se om det åtgärdar problemet:

// tsconfig.json
{
  "exclude": [
    "node_modules/protractor/typings/global/selenium-webdriver"
  ]
}