量角器承诺解析getText()

问题描述:

我像这样调用getText()函数,然后尝试解决承诺但稍后不能获取字符串值。量角器承诺解析getText()

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

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

+1

的[我如何返回从一个异步调用的响应?(可能的复制https://*.com/questions/14220321/how-do-i-return-the-response-from-an - 异步调用) –

+1

不是这个问题是特定于量角器API – purplePanda

+1

看看[这里](https://spin.atomicobject.com/2014/12/17/asynchronous-testing-protractor-angular/)并找到从“WebDriver幕后......”开始的段落。现在请注意该段落的结尾,“...(除非我们特别需要调用返回的结果)”。除非我完全误读了你的意图,否则这个附带条件是我相信我的“可能的重复......”在这里是适当的。 –

你有什么不明白的是如何与承诺的JavaScript编译器的交易。

这是编译器如何看待你的代码;

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 - 只有工作是这个函数中完成的,直到有()被调用

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 

你的问题是,你正在给你的变量分配.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); 
}); 
+0

我的代码运行在一个函数调用的函数中,所以我不知道你的例子将如何应用。如果我尝试在外部使用splittedText,我得到了undefined – purplePanda

+0

只要您尝试从同步节中的异步代码中获取值,您将始终得到未定义的值。 Promise被解析为异步类,所以如果你想操纵值,你必须在promise回调中做。我刚刚给了你一个例子,你如何让你的测试等待异步代码。 –

+0

也许你会提供更多的细节/代码。然后我会看到你的问题的背景。 –