从'量角器'错误导入{browser,element,by,By,$,$$,ExpectedConditions}

时间:2017-06-09 09:50:25

标签: typescript jasmine protractor

我已经在全局和本地安装了Protractor,typescript,jasmine。 通过npm install运行测试时出现以下错误,请指导设置是否有任何问题。

import {browser, element, by, By, $, $$, ExpectedConditions} from 'protractor';
^^^^^^
SyntaxError: Unexpected token import
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:542:28)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at C:\MyFiles\NewTechonologies\Protractor\TypeScript\Test\node_modules\jasmine\lib\jasmine.js:93:5
[13:14:56] E/launcher - Process exited with error code 100
npm ERR! Test failed.  See above for more details. 

以下是我在visual studio代码中使用的文件的详细信息

Conf.ts

import {Config} from 'protractor';

export let config: Config = {

  framework: 'jasmine',
  capabilities: {
    browserName: 'chrome'
  },
  specs: [ '../spec.ts' ],
   onPrepare: () => {
     let globals = require('protractor');
   let browser = globals.browser;
   browser.manage().window().maximize();
   browser.manage().timeouts().implicitlyWait(5000);
    // doing a browser.get will lead to a transpile error. 
    // undefined does not have a get method
  },
  seleniumAddress: 'http://localhost:4444/wd/hub',

  // You could set no globals to true to avoid jQuery '$' and protractor '$'
  // collisions on the global namespace.
  noGlobals: true
};

spec.ts

import {browser, element, by, By, $, $$, ExpectedConditions} from 'protractor';
//import { ElementFinder, browser, by, element } from 'protractor';
import protractor = require('protractor');

describe('protractor with typescript typings', () => {
  beforeEach(() => {
    browser.get('http://www.angularjs.org');
  });

  it('should greet the named user', async() => {
    setTimeout(function() {
    // Whatever you want to do after the wait
}, 4000);
    element(by.model('yourName')).sendKeys('Julie');
    let greeting = element(by.binding('yourName'));
   // expect(greeting.getText()).toEqual('Hello Julie!');
   expect<any>(greeting.getText()).toEqual('Hello Julie!');
  });

  it('should list todos', function() {
    let todoList = element.all(by.repeater('todo in todoList.todos'));
    expect<any>(todoList.count()).toEqual(2);
    expect<any>(todoList.get(1).getText()).toEqual('build an angular app');
  });
});

的package.json

{
  "name": "example-typescript",
  "version": "1.0.0",
  "description": "a typescript example",
  "author": "",
  "license": "MIT",
  "scripts": {
    "tsc": "tsc",
    "pretest": "npm run tsc",
    "test": "protractor tmp/conf.js"
  },
  "dependencies": {
    "@types/jasmine": "^2.5.47",
    "@types/jasminewd2": "^2.0.0",
    "jasmine": "^2.4.1",
     "protractor": "file:../",
    "typescript": "~2.1.6"
  },
  "devDependencies": {
    "@types/jasmine": "^2.5.51",
    "@types/jasminewd2": "^2.0.2",
    "ts-node": "^3.0.2"
  }

2 个答案:

答案 0 :(得分:0)

如果您没有tsconfig.json,请创建一个。要获得基本配置,您可以执行以下操作:

npm run tsc -- --init

修改moduletarget属性,确保它们分别为commonjses5。您遇到的错误是由于节点尚不支持ES6模块。因此,在解析import令牌时节点失败。

以下是适合您的tsconfig.json示例:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "moduleResolution": "node",
        "sourceMap": true,
        "lib": [
            "dom",
            "es2015",
        ]
    },
    "exclude": [
        "node_modules"
    ]
}

答案 1 :(得分:0)

As per the comment discussions, i have changed the conf.ts content from ../spec.ts to spec.js and worked fine

conf.ts

import {Config, browser} from 'protractor';
export let config: Config = {

  framework: 'jasmine',
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
            'args': ['disable-infobars']
        }
  },

  specs: [ 'spec.js' ],
   onPrepare: () => {
     let globals = require('protractor');
   let browser = globals.browser;
   browser.ignoreSynchronization = true;
   browser.manage().window().maximize();
   browser.manage().timeouts().implicitlyWait(5000);
  },
  seleniumAddress: 'http://localhost:4444/wd/hub',
  noGlobals: true
};