我已经在全局和本地安装了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"
}
答案 0 :(得分:0)
如果您没有tsconfig.json
,请创建一个。要获得基本配置,您可以执行以下操作:
npm run tsc -- --init
修改module
和target
属性,确保它们分别为commonjs
和es5
。您遇到的错误是由于节点尚不支持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
};