将页面的多个元素存储到JSON对象

时间:2017-05-05 19:31:06

标签: javascript node.js protractor

我需要将页面的几个文本元素存储到JSON对象,但由于异步性,我无法在量角器中执行此操作。

以下是我的代码的一个示例,它位于element.all()

的循环中
var json = {};
e[i].element(by.css(".nome_projeto")).getText().then(function(text){
    json.nome = text;
});
e[i].element(by.css(".nome_cliente")).getText().then(function(text){
    json.cliente = text;
});
e[i].element(by.css('.data_fim')).getText().then(function(text){
    json.data = text;
});
console.log(json);
list.push(json);

但是,当我记录时,我的JSON对象是未定义的,我只能在then内访问它。

2 个答案:

答案 0 :(得分:4)

您可以使用protractor.promise.all()

”一次性解决多个承诺
protractor.promise.all([
    e[i].element(by.css(".nome_projeto")).getText(),
    e[i].element(by.css(".nome_cliente")).getText(),
    e[i].element(by.css('.data_fim')).getText()
]).then(function (texts) {
    var obj = {};

    obj.nome = texts[0];
    obj.cliente = texts[1];
    obj.data = texts[2];

    console.log(obj);
});

答案 1 :(得分:2)

我看到意大利名字:D我们可以说意大利语:D

顺便说一句,我建议您使用此代码更改它,以便管理所有承诺:

var json = {};
var promises = [
    e[i].element(by.css(".nome_projeto")).getText(),
    e[i].element(by.css(".nome_cliente")).getText(),
    e[i].element(by.css('.data_fim')).getText()
];
protractor.promise.all(promises).then(function(data) {
    json.nome = data[0];
    json.cliente = data[1];
    json.data = data[2];
    list.push(json);
});

应该有效