Angularjs getAttribute返回未解析

Angularjs getAttribute返回未解析,angularjs,protractor,Angularjs,Protractor,我只是想把输入值的属性保存到变量中 代码如下: var sliderNumber = element.all(by.model('color.red')).get(1); var firstNum = sliderNumber.getAttribute('value').then(function(value) { return value; }); //Some code that changes the sliderNumber attribute expect(s

我只是想把输入值的属性保存到变量中

代码如下:

var sliderNumber = element.all(by.model('color.red')).get(1);
var firstNum = sliderNumber.getAttribute('value').then(function(value) {
    return value;
});
  //Some code that changes the  sliderNumber attribute      
expect(sliderNumber.getAttribute('value')).toEqual(firstNum + 1);
这给了我一个类似这样的错误:

预期“184”等于允诺::433([[PromiseStatus]]:“待定”)1

我也试过:

var firstNum = function() {
    return sliderNumber.getAttribute('value').then(function(value) {
        return value;
    });
}
那根本没用。如何解析此承诺?

由于
.getAttribute()
返回一个承诺,该承诺将异步调用回调,因此需要将测试逻辑放入回调中:

var sliderNumber = element.all(by.model('color.red')).get(1);

// get the initial value
sliderNumber.getAttribute('value').then(function(value) {
    // once we've got the initial value, store it, then proceed with your test
    var initialValue = parseInt(value, 10);

    //Some code that changes the  sliderNumber attribute  

    expect(sliderNumber.getAttribute('value')).toEqual((initialValue + 1).toString());
});

您不能简单地在回调之外获取返回值,因为在代码的其余部分之后可能会调用回调,也可能不会调用回调。

。因此,任何与我得到的初始值有关的测试都必须进入
。然后
函数?我还想在代码中添加一件事。在expect语句中,
.getAttribute
只返回字符串或null,因此它应该是
。toEqual((parseInt(initialValue)+1.toString())
对,您可以将测试直接放在
.then()
部分,或者将它们分解成单独的函数,您可以在
中调用这些函数。谢谢你的编辑,我忘了确保东西是正确的类型!我做了另一个小调整,使其更易于阅读(
parseInt
更进一步)和更可靠一点()。如果我想做
browser.wait()
直到
.getAttribute('aria-expanded')
返回true,该怎么办。我是否将测试放在
浏览器中的
.then()
中。wait()
?我不认为这有什么意义,是吗?