我像這樣調用getText()函數,然後嘗試解決承諾但稍後不能獲取字符串值。量角器承諾解析getText()
var textFromElement = someElement.getText().then(function(text){return text})
var splittedText = textFromElement.split(" ")
如何獲取文本供以後使用?
我像這樣調用getText()函數,然後嘗試解決承諾但稍後不能獲取字符串值。量角器承諾解析getText()
var textFromElement = someElement.getText().then(function(text){return text})
var splittedText = textFromElement.split(" ")
如何獲取文本供以後使用?
你有什麼不明白的是如何與承諾的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);
});
我的代碼運行在一個函數調用的函數中,所以我不知道你的例子將如何應用。如果我嘗試在外部使用splittedText,我得到了undefined – purplePanda
只要您嘗試從同步節中的異步代碼中獲取值,您將始終得到未定義的值。 Promise被解析爲異步類,所以如果你想操縱值,你必須在promise回調中做。我剛剛給了你一個例子,你如何讓你的測試等待異步代碼。 –
也許你會提供更多的細節/代碼。然後我會看到你的問題的背景。 –
的[我如何返回從一個異步調用的響應?(可能的複製https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an - 異步調用) –
不是這個問題是特定於量角器API – purplePanda
看看[這裏](https://spin.atomicobject.com/2014/12/17/asynchronous-testing-protractor-angular/)並找到從「WebDriver幕後......」開始的段落。現在請注意該段落的結尾,「...(除非我們特別需要調用返回的結果)」。除非我完全誤讀了你的意圖,否則這個附帶條件是我相信我的「可能的重複......」在這裏是適當的。 –