【发布时间】:2015-09-05 06:01:07
【问题描述】:
我有一个特定的用例,我想在测试代码中获取表头(异步),然后在 javascript 对象上动态创建 getter。我想在测试中使用的语法是antenneTable.row(0).getAzimut();。我遇到的问题是 antenneTable.row(0); 返回一个承诺,因此尚未在该对象上定义 getAzimut。
如果我使用 antennetable.row(0).then() 但我想保留语法,我知道如何解决它。
提前致谢
这是我的代码:
Row.js
'use strict';
var Row = function (row, classes) {
var outer = this;
function camelCase(input) {
return input.toLowerCase().replace(/-(.)/g, function(match, group1) {
return group1.toUpperCase();
})}
for(var i =0 ; i< classes.length; i ++){
var methodName = camelCase("get-"+classes[i]);
(function(index) {
outer[methodName] = function () {
return row.all(by.tagName('td')).get(index).getText();
}
})(i);
}
};
module.exports = Row;
Table.js
'use strict';
var Row = require('./row.js');
var Table = function (tableElement) {
var headElement = tableElement.element(by.css('thead'));
var bodyElement = tableElement.element(by.css('tbody'));
this.row = function (index) {
return headElement.all(by.css('th')).map(function (th) {
return th.getAttribute('class');
}).then(function (clazzes) {
var rows = bodyElement.all(by.css('tr'));
return new Row(rows.get(index), clazzes);
})
};
};
module.exports = Table;
MyTestClass.js
'use strict';
describe('dossier map', function(){
var mainPage = require('../../pages/mainpage.js');
var DossierDetailPage = require('../../pages/dossier/dossier-detail.js');
var Table = require('../../pages/table.js');
var dossierDetailPage = new DossierDetailPage();
afterEach(function() {
resetData();
mainPage.logout();
});
it('antenne details popup verschijnt', function() {
// TODO Activate test in Firefox and IE
if (!browser.isFirefox && !browser.isIE) {
mainPage.goTo('admin', 'admin');
mainPage.dossiers().byIndex(7).openDetail();
dossierDetailPage.zoomOut(5);
var popoverElement = element(by.css('#popover .popover'));
browser.driver.wait(function() {
return popoverElement.isPresent().then(function(isDisplayed){
if (isDisplayed) {
return true;
}
else {
dossierDetailPage.klikOpAntenneCluster(11);
return false;
}
});
});
var antenneTable = new Table(popoverElement.element(by.css('table')));
expect(antenneTable.row(0).getAzimut()).toBe('115');
}
}, 120000);
});
【问题讨论】:
-
如果你得到一个承诺,你可以设置代码在它完成时发生。参见例如this link。在看到您已经知道的编辑之后;你不能在你描述的场景中保留你当前的语法。
-
是的,如果我使用 then(),我知道如何解决它,但我希望保留当前语法并让量角器以某种方式等到 antenneTable.row(0) 在不添加语法糖的情况下解决跨度>
-
@Arno_Geismar。是 nodejs 托管的脚本吗?
-
本质上是等到promise返回一个值
-
@JossefHarush 是的,它是一个节点托管脚本。我们正在使用 grunt 来运行我们的端到端测试
标签: javascript angularjs node.js jasmine protractor