2017-06-02 78 views
0

我像這樣調用getText()函數,然後嘗試解決承諾但稍後不能獲取字符串值。量角器承諾解析getText()

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

如何獲取文本供以後使用?

+1

的[我如何返回從一個異步調用的響應?(可能的複製https://stackoverflow.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幕後......」開始的段落。現在請注意該段落的結尾,「...(除非我們特別需要調用返回的結果)」。除非我完全誤讀了你的意圖,否則這個附帶條件是我相信我的「可能的重複......」在這裏是適當的。 –

回答

1

你有什麼不明白的是如何與承諾的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 
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); 
}); 
+0

我的代碼運行在一個函數調用的函數中,所以我不知道你的例子將如何應用。如果我嘗試在外部使用splittedText,我得到了undefined – purplePanda

+0

只要您嘗試從同步節中的異步代碼中獲取值,您將始終得到未定義的值。 Promise被解析爲異步類,所以如果你想操縱值,你必須在promise回調中做。我剛剛給了你一個例子,你如何讓你的測試等待異步代碼。 –

+0

也許你會提供更多的細節/代碼。然後我會看到你的問題的背景。 –