Webdriver.io - Node.js 意外的令牌导入 - 页面对象

Webdriver.io - Node.js Unexpected token import - Page Object

你好,我有问题 运行 我使用 Node.JS 和 Webdriver.io 的测试脚本一切正常,直到我尝试实现页面对象模式。在控制台输出上我收到错误:

ERROR: Unexpected token import

user/Desktop/webdriverio-test/test/specs/first.js:2

import GooglePage from '../pom/GooglePage';

节点版本:v8.9.1

GooglePage.js:

class GooglePage{

get submitButton(){ return browser.element(`[name="btnK"]`);}

get searchField(){return browser.element('#lst-ib');}

open(){
    browser.open("http://google.com");
}

submit(){
    this.submitButton.click();
}

setValue(text){
    this.searchField.setValue(text);
}
}
export default new GooglePage();

和测试脚本:

var assert = require('assert');
import GooglePage from '../pom/GooglePage';
 
describe('Visiting Google by PageObjectPattern',()=>{
 it('Open Google',()=>{
     GooglePage.open();
     GooglePage.setValue("asdasd")
     })
  })   

一切都和上的几乎一样:http://webdriver.io/guide/testrunner/pageobjects.html

为什么无法使用导入语法导入我的 class 来测试脚本?

有几点需要注意:

1) 确保您传递的标志是 enables ESM support in Node 8.5+

Enabling#

The --experimental-modules flag can be used to enable features for loading ESM modules.

Once this has been set, files ending with .mjs will be able to be loaded as ES Modules.

node --experimental-modules my-app.mjs

2) 您的 ESM 文件的扩展名似乎是“.js”,应该是“.mjs”,例如 "GooglePage.mjs".

3) 您似乎也无法从 CJS 文件和 vs 中导入 ESM。因此,您要么必须将测试规范更改为“.mjs”文件,然后像这样导入依赖项:

import assert from 'assert';
import GooglePage from '../pom/GooglePage';

或者将其保留为“.js”并要求依赖项为 CJS:

var assert = require('assert');
var GooglePage = require('../pom/GooglePage');

// Your module's content would be in GooglePage.default

希望对您有所帮助!