WebdriverIO ES6 PageObject方法不是函数错误

时间:2017-12-14 15:31:58

标签: javascript pageobjects webdriver-io

我正在尝试使用WebdriverIO Docs

中定义的语法定义PageObject

父页面

TestXXXActiveProfilesResolver

子页面对象

//page.js

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

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

然后当我调用Login Page的打开方法时:

// login.page.js

import Page from './page';

class LoginPage extends Page {

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

export default new LoginPage();

我得到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) 而不是class关键字(如上面链接的文档中所述)重写我的PageObjects来解决此问题。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

我发现这对我有用

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;

儿童

// login.page.js

import Page from './page';

class LoginPage extends Page {

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

module.exports = new LoginPage();

使用页面对象测试规范文件

const LoginPage = require('./login.page.js');
describe('test', () => {
    it('can open', () => {
        LoginPage.open();
    });
});