量角器-SyntaxError:意外的标识符

时间:2019-02-03 16:39:32

标签: javascript node.js protractor automated-tests

我在量角器中编写了一些测试,但是可悲的是,导入/导出文件没有什么问题。

HomePage.js

export default class HomePage {
  constructor() {
    this.path = 'http://automationpractice.com/index.php';
    this.searchQuery = element(by.css('.search_query'));
    this.searchButton = element(by.name('submit_search'));
    this.signInButtonHeader = element(by.css('.header_user_info'));
    this.emailInput = element(by.id('email'));
    this.passwordInput = element(by.id('passwd'));
    this.logInButton = element(by.id('SubmitLogin'));
  }
}

homepage-spec.js

import HomePage from '../page_objects/HomePage';
browser.waitForAngularEnabled(false);
const homePage = new HomePage();
beforeEach(async () => {
  browser.get(homePage.path);
});
describe('Homepage', () => {
  it('should have a title', () => {
    expect(browser.getTitle()).toEqual('My Store');
  });
  it('Log into your account', () => {
    homePage.signInButtonHeader.click();
    homePage.emailInput.sendKeys('testprotractor@gmail.com');
    homePage.passwordInput.sendKeys('xxxx');
    homePage.logInButton.click();
  });
  it('Check categories', () => {
    element(by.linkText('Women')).click();
  });
});`

conf.js

const SpecReporter = require('jasmine-spec-reporter').SpecReporter;
require('@babel/register');

exports.config = {
  framework: 'jasmine',
 capabilities: {
    browserName: 'chrome',
 },
 suites: {
    homePage: 'specs/homepage-spec.js',
    searchResults: 'specs/search-results-spec.js',
  },
  onPrepare: () => {
    jasmine.getEnv().addReporter(new SpecReporter({
      spec: {
        displayStacktrace: true,
      },
    }));
  },
};

package.json

{
  "name": "protractorautomation",
  "version": "1.0.0",
  "description": "This is my test",
  "main": "conf.js",
  "dependencies": {
    "babel-eslint": "^10.0.1",
    "@babel/register": "^7.0.0",
    "eslint": "^5.3.0",
    "eslint-config-airbnb-base": "^13.1.0",
    "eslint-plugin-import": "^2.14.0",
    "jasmine-spec-reporter": "^4.2.1"
  },
   "devDependencies": {
    "@babel/core": "^7.2.2",
    "babel-preset-env": "^1.7.0",
    "babel-register": "^6.26.0"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "Protractor"
  ],
  "author": "Xxxx",
  "license": "ISC"
}

每当我运行测试时,都会收到此错误:

  

(函数(导出,需求,模块,__ filename,__ dirname){导入
  来自“ ../page_objects/HomePage”的主页; ^^^^^^^^^

SyntaxError: Unexpected identifier
at new Script (vm.js:84:7)
at createScript (vm.js:264:10)
at Object.runInThisContext (vm.js:312:10)
at Module._compile (internal/modules/cjs/loader.js:694:28)
at Module._compile   (C:\Users\X\Documents\protractorAutomation\node_modules\pirates\lib\index.js:83:24)
at Module._extensions..js (internal/modules/cjs/loader.js:745:10)
at Object.newLoader [as .js] (C:\Users\Mati\Documents\protractorAutomation\node_modules\pirates\lib\index.js:88:7)
at Module.load (internal/modules/cjs/loader.js:626:32)
at tryModuleLoad (internal/modules/cjs/loader.js:566:12)
at Function.Module._load (internal/modules/cjs/loader.js:558:3) [16:53:29] E/launcher - Process exited with error code 100

任何人都可以帮助我解决此问题吗?

1 个答案:

答案 0 :(得分:0)

NodeJS本身不支持您尝试使用的es6样式的导入。

根据this answer,您有两个选择。我创建了第一个示例供您尝试。

module.exports = class HomePage {
  constructor() {
    this.path = 'http://automationpractice.com/index.php';
    this.searchQuery = element(by.css('.search_query'));
    this.searchButton = element(by.name('submit_search'));
    this.signInButtonHeader = element(by.css('.header_user_info'));
    this.emailInput = element(by.id('email'));
    this.passwordInput = element(by.id('passwd'));
    this.logInButton = element(by.id('SubmitLogin'));
  }
}

将导入更改为要求

//Change import statement to standard require
let HomePage = require('../page_objects/HomePage');
browser.waitForAngularEnabled(false);
const homePage = new HomePage();
beforeEach(async () => {
  browser.get(homePage.path);
});
describe('Homepage', () => {
  it('should have a title', () => {
    expect(browser.getTitle()).toEqual('My Store');
  });
  it('Log into your account', () => {
    homePage.signInButtonHeader.click();
    homePage.emailInput.sendKeys('testprotractor@gmail.com');
    homePage.passwordInput.sendKeys('xxxx');
    homePage.logInButton.click();
  });
  it('Check categories', () => {
    element(by.linkText('Women')).click();
  });
});