2015-08-14 41 views
2

我有3级继承类: 第一类继承ElementArrayFinder,第二类继承第一类。这是我的代码:量角器:类继承

1-ST类:

var util = require('util'); 
var ElementArrayFinder = require('C:/Users/Lilia.Sapurina/AppData/Roaming/npm/node_modules/protractor/lib/element').ElementArrayFinder; 

var psComponent = function() {}; 

util.inherits(psComponent, ElementArrayFinder); 

module.exports = psComponent; 

2挡类:

var util = require('util'); 
var psComponent = require('../lib/psComponent'); 

var psDateTimePicker = function() {}; 

util.inherits(psDateTimePicker, psComponent); 

psDateTimePicker.prototype.getField = function() { 
    return element(by.xpath('//div[1]/table/tbody/tr[2]/td[1]/div/input')); 
}; 

psDateTimePicker.prototype.getButton = function() { 
    return element(by.css('td > a.b-button.b-button_only_icon')); 
}; 

exports.psDateTimePicker = new psDateTimePicker(); 

我能以这种方式使用它在我的代码:

fdescribe('lala', function() { 

    var psDateTimePicker = require('../lib/psDateTimePicker').psDateTimePicker; 

    beforeEach(function(){ 
     browser.get('ng-components/examples/ps-date-time-picker.html'); 
    }); 

    it('test', function() { 
      expect(psDateTimePicker.getField().getAttribute("value")).toEqual(6); 

    }); 
}); 

但我想制作全球界面,并使代码构建如下所示:

fdescribe('lala', function() { 

    var psComponents = require('../lib/psComponent'); 

    beforeEach(function(){ 
    browser.get('ng-components/examples/ps-date-time-picker.html'); 
    }); 

    it('test', function() { 
     expect(psComponents.psDateTimePicker.getField().getAttribute("value")).toEqual(6); 
    }); 
}); 

有人知道我怎么组织它吗?我试图使用getInstanceOf(),但它不工作。它也不是很方便。

回答

2

如果您想为您的所有组件的命名空间,你可以创建负责一个额外的模块:

// psComponents.js 
module.exports = { 
    psDateTimePicker: require('../lib/psDateTimePicker').psDateTimePicker, 
    psAnotherComponent: require('../lib/psAnotherComponent').psAnything 
}; 

并使用它非常像你想的一样:

var psComponents = require('../lib/psComponents'); 
expect(psComponents.psDateTimePicker.getField().getAttribute("value")).toEqual(6); 

这比你试图做的要简单得多 - 试图从父母那里获得孩子 - 没有一种简单的方法来实现它,通常没有理由。原型仅仅是创建新的独立实例的样板,它们不应该彼此连接。与原型继承非常相似:您只需扩展该样板,但子代和父代实例将保持独立。

+0

尼斯,迈克尔!我喜欢这个比我的回答更好:) – Brine

2

不完全确定你在找什么,但也许沿着这些线...?

var util = require('util'); 
var ElementArrayFinder = require('C:/Users/Lilia.Sapurina/AppData/Roaming/npm/node_modules/protractor/lib/element').ElementArrayFinder; 
var psDateTimePicker = require('../lib/psDateTimePicker').psDateTimePicker; 

var PsComponent = function() {}; 

util.inherits(PsComponent, ElementArrayFinder); 

PsComponent.prototype = util; 
PsComponent.prototype = psDateTimePicker; 
module.exports = new PsComponent(); 

则...

describe('lala', function() { 
    var psComponents = require('../lib/psComponents'); 

    beforeEach(function(){ 
    browser.get('ng-components/examples/ps-date-time-picker.html'); 
    }); 

    it('test', function() { 
    expect(psComponents.getField().getAttribute("value")).toEqual(6); 
    }); 
}); 
+0

是的,我认为这并不是我期待的。但是,谢谢你有趣的想法。我可以问你这两行:'PsComponent.prototype = util; PsComponent.prototype = psDateTimePicker;'我们真的可以这样做吗?它不覆盖PsComponent.prototype吗? –

+1

是的,女士。这就是你可以如何将各种模块继承到另一个模块。例如,我使用这种模式将我的basePage扩展到我的页面对象的其余部分(您可以在我的GitHub的protractor_example项目中看到它:http://bit.ly/1ICQDdi。 – Brine