2015-08-14 46 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