use*_*od2 2 javascript node.js ecmascript-6
我的测试分为3个部分。主页对象Page,有问题的页面HomePage和测试本身。
我想HomePage扩展Page对象。但是我发现的是-如果在Page类中使用:
module.exports = new Page()
我得到错误 ERROR: Class extends value #<Page> is not a function or null
但是如果我用
module.exports = Page
它完美地工作。
有人可以解释为什么会这样吗?是因为Page对象本身仅由其父页面(例如HomePage或LoginPage其他页面)构成的每个页面构成?
class Page {
constructor() {
this.title = 'My Page';
}
open(path) {
browser.url('/' + path);
}
}
module.exports = Page;
Run Code Online (Sandbox Code Playgroud)
==
var Page = require('../page-models/Page');
class HomePage extends Page {
get username() { return browser.element('#username'); }
open() {
super.open('');
}
}
module.exports = new HomePage();
Run Code Online (Sandbox Code Playgroud)
==测试本身
var HomePage = require('../page-models/home.page');
describe('Something great', function(){
it('tests this', function(){
HomePage.open();
...
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。ps使用nodejs,webdriverio,mocha和chai。
当你写:
var Page = require('../page-models/Page');
Run Code Online (Sandbox Code Playgroud)
该变量Page是您使用'../page-models/Page'导出的任何变量module.exports。如果导出new Page()对象,则变量Page将是Page您创建的类的实例,而new不是类本身。而且您无法extend执行实例。此外,require()缓存它的结果,以便您始终获得相同的对象。
在module.exports = Page导出类和任何人时,您require可以自由创建自己认为合适的实例。
我知道您没有要求,但是要考虑的一件事是为您的类创建一个统一的接口。如果要导出Page类并要求用户实例化或扩展该类,则应考虑对进行相同的操作Homepage。也许您可能想做类似的事情:
var Homepage = require('../page-models/home.');
class MobileHomePage extends Homepage {
//...
}
Run Code Online (Sandbox Code Playgroud)
您无法使用导出实例new HomePage()。这意味着您将需要在测试中使用以下方式创建实例:
var HomePageClass = require('../page-models/home.page');
var Homepage = new HomePageClass()
Run Code Online (Sandbox Code Playgroud)
这比较冗长,但也使您的模块更加灵活。
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |