量角器承诺使用getText()进行解析

时间:2017-06-02 17:33:23

标签: angular promise protractor

我像这样调用getText()函数,然后尝试解析promise但稍后无法获取字符串值。

var textFromElement = someElement.getText().then(function(text){return text})
var splittedText = textFromElement.split(" ")

如何获取该文本供以后使用?

2 个答案:

答案 0 :(得分:1)

你不明白的是javascript编译器如何处理promises。

这是编译器查看代码的方式;

var textFromElement = someElement.getText().then(function(text){return text})
var splittedText = textFromElement.split(" ")

1 - 无论您在何处分配,所有变量都在函数范围的顶部创建。

var textFromElement; (= undefined)
var splittedText; (= undefined)

2 - 每行的最小工作量是否可以消除并移至下一行。

testFromElement = {promise element object};
splittedText = {promise element object}.split(" "); (= undefined)//This what you don't want.

3 - 从顶部开始,对未解决的线路进行更少的工作。

testFromElement = {promise getText object};

4 - 从顶部开始,对未解决的线路进行更少的工作。

testFromElement = "text text";

简而言之,它会在你想要它之前将splittedText分配三步。

很好的例子:

var splittedText;
it("should get split text", function(done) {
  someElement.getText().then(function(textFromElement){
    splittedText = textFromElement.split(" ");
    done();
  })
})

1 - 无论您在何处分配,所有变量都在函数范围的顶部创建。

var splittedText; (= undefined)

2 - 只有在此函数内完成工作,直到调用done()

it("should get split text", function(done) {

3 - 每行的最小工作量是否可以消除并移至下一行。

someElement = {promise element object};

4 - 从函数的顶部开始,对未解析的行进行更少的工作。

someElement.getText() = {promise getText object};

5 - 从函数顶部开始,对未解析的行进行更少的工作。

textFromElement = "text text";
splittedText = textFromElement.split(" "); (["text","text"]);
done();  //the compiler can now to work outside this function

答案 1 :(得分:0)

您的问题是您将.then()方法的分辨率分配给您的变量,而不是您作为参数提供的回调。

总而言之,量角器/茉莉花带有异步测试机制。

这里有ES6示例。

it('some description', (done) => {
    someElement.getText().then(text => {
        var splittedText = text.split(" ");
        done();
    });
});

和ES5:

it('some description', function(done) => {
    someElement.getText().then(function(text){
        var splittedText = text.split(" ");
    }).finally(done);
});