JS: Class extends value 不是函数或 null
JS: Class extends value is not a function or null
这就是我尝试构建我的第一个页面对象以使用 WebdriverIO 进行登录测试的方式
但是我在 login.page.js
的第 3 行收到错误 ERROR: Class extends value #<Page> is not a function or null
。
我没明白,我哪里做错了...是否有任何路径或文件名错误?
/tests/specs/login.specs.js
var expect = require('chai').expect
var LoginPage = require('../pageobjects/login.page')
describe('login form', function () {
it('should deny access with wrong creds', function () {
LoginPage.open()
LoginPage.username.setValue('foo')
LoginPage.password.setValue('bar')
LoginPage.submit()
expect(LoginPage.flash.getText()).to.contain('Your username is invalid!')
})
})
/tests/pageobjects/page
'use strict'
class Page {
constructor() {
this.title = 'My Page'
}
open(path) {
browser.url('/' + path)
}
}
module.exports = new Page()
/tests/pageobjects/login.page.js
'use strict'
var Page = require('./page')
class LoginPage extends Page {
get username () { return browser.element('#username') }
get password () { return browser.element('#password') }
get form () { return browser.element('#login') }
get flash () { return browser.element('#flash') }
open () {
super.open('login')
}
submit () {
this.form.submitForm()
}
}
module.exports = new LoginPage()
尝试
module.exports.Page = Page
然后在 login.page
var Page = require('./page.js').Page
正如 Gerardo 所指出的,您正在导出 class 的实例并注意 class 本身。试试这些改变:
/tests/pageobjects/page
module.exports = Page;
/tests/pageobjects/login.page.js
module.exports = LoginPage;
/tests/specs/login.specs.js
var LoginPage = new (require('../pageobjects/login.page'))();
或
var LoginPage = require('../pageobjects/login.page');
var instanceLoginPage = new LoginPage();
这就是我尝试构建我的第一个页面对象以使用 WebdriverIO 进行登录测试的方式
但是我在 login.page.js
的第 3 行收到错误 ERROR: Class extends value #<Page> is not a function or null
。
我没明白,我哪里做错了...是否有任何路径或文件名错误?
/tests/specs/login.specs.js
var expect = require('chai').expect
var LoginPage = require('../pageobjects/login.page')
describe('login form', function () {
it('should deny access with wrong creds', function () {
LoginPage.open()
LoginPage.username.setValue('foo')
LoginPage.password.setValue('bar')
LoginPage.submit()
expect(LoginPage.flash.getText()).to.contain('Your username is invalid!')
})
})
/tests/pageobjects/page
'use strict'
class Page {
constructor() {
this.title = 'My Page'
}
open(path) {
browser.url('/' + path)
}
}
module.exports = new Page()
/tests/pageobjects/login.page.js
'use strict'
var Page = require('./page')
class LoginPage extends Page {
get username () { return browser.element('#username') }
get password () { return browser.element('#password') }
get form () { return browser.element('#login') }
get flash () { return browser.element('#flash') }
open () {
super.open('login')
}
submit () {
this.form.submitForm()
}
}
module.exports = new LoginPage()
尝试
module.exports.Page = Page
然后在 login.page
var Page = require('./page.js').Page
正如 Gerardo 所指出的,您正在导出 class 的实例并注意 class 本身。试试这些改变:
/tests/pageobjects/page
module.exports = Page;
/tests/pageobjects/login.page.js
module.exports = LoginPage;
/tests/specs/login.specs.js
var LoginPage = new (require('../pageobjects/login.page'))();
或
var LoginPage = require('../pageobjects/login.page');
var instanceLoginPage = new LoginPage();