WebdriverIO ES6 PageObject 方法不是函数错误

WebdriverIO ES6 PageObject method is not a function error

我正在尝试使用 WebdriverIO Docs:

中定义的语法定义 PageObject

父页面

//page.js

export default class Page {
  constructor() {
    this.title = 'My Page';
  }

  open(path) {
    browser.url(path);
  }
}

子页面对象

// login.page.js

import Page from './page';

class LoginPage extends Page {

  open() {
    super.open('/login');
  }
}

export default new LoginPage();

然后调用登录页面的open方法时:

const LoginPage = require('../../pages/login.page');
LoginPage.open();

我得到一个TypeError:

TypeError: LoginPage.open is not a function
  [chrome #0-0]     at World.module.exports ...
  [chrome #0-0]     at Promise (<anonymous>)
  [chrome #0-0]     at F (/.../node_modules/core-js/library/modules/_export.js:35:28)

解决方法 我可以通过使用 Object.create 而不是 class 关键字(如上述链接文档中所述)重写我的 PageObjects 来解决这个问题。

我使用 class 关键字不是必需的,但我不想不知道为什么会失败。如果很明显为什么这不起作用,请原谅我我是 JS 的新手。

我认为您在这里混合了 ES6 和 CommonJS 语法。将测试更改为使用 ES6 语法,它应该会按预期开始工作。

import LoginPage from '../../pages/login.page';

describe('login tests', () => {
    beforeAll(() => {        
        LoginPage.open();
    });

    it('should do something', () => {
        //do something
    });
})

我发现这对我有用

http://gelionprime.ml/2017/10/page-object-pattern-webdriverio/

PARENT

//page.js

class Page {
  constructor() {
    this.title = 'My Page';
  }

  open(path) {
    browser.url(path);
  }
}
module.exports = Page;

CHILD

// login.page.js

import Page from './page';

class LoginPage extends Page {

  open() {
    super.open('/login');
  }
}

module.exports = new LoginPage();

使用页面 object

测试规范文件
const LoginPage = require('./login.page.js');
describe('test', () => {
    it('can open', () => {
        LoginPage.open();
    });
});