从promises中添加多个值[Protractor]

时间:2015-09-01 16:52:35

标签: javascript selenium protractor

我的页面上有两个输入文本框和一个标签。我想从所有三个元素中获取数字,将两个文本框号一起添加,然后检查总和是否等于标签。我该怎么做呢?

这是我到目前为止所做的,但它并没有为我工作。似乎getAttribute返回一个带有数字周围的撇号的值。如果我尝试使用" parseInt"它返回" NaN"

element(by.id('textbox1')).getAttribute('value').then(function(value){
textbox1value = value;
});

element(by.id('textbox2')).getAttribute('value').then(function(value){
textbox2value = value;
});

element(by.id('label1')).getText().then(function(value){
label1value = value;
});

expect(textbox1value + textbox2value).toEqual(label1value);

1 个答案:

答案 0 :(得分:6)

您实际上可以使用promise.all()解决问题:

var first = element(by.id('textbox1')).getAttribute('value'),
    second = element(by.id('textbox2')).getAttribute('value'),
    total = element(by.id('label1')).getText();

protractor.promise.all([first, second, total]).then(function (values) {
    expect(parseInt(values[0]) + parseInt(values[1])).toEqual(parseInt(values[2]));
});

或者,您也可以使用q promise library及其spread()句法糖:

Q.all([first, second, total]).spread(function (first, second, total) {
    first = parseInt(first);
    second = parseInt(second);
    total = parseInt(total);

    expect(first + second).toEqual(total);
});

而且,您也可以将protractor.promise替换为q,请参阅: