[英]Protractor promise resolution with getText()
我這樣調用getText()函數,然后嘗試解析Promise,但以后無法獲取字符串值。
var textFromElement = someElement.getText().then(function(text){return text})
var splittedText = textFromElement.split(" ")
如何獲取文本以備后用?
您不了解的是javascript編譯器如何處理promise。
這就是編譯器查看代碼的方式。
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
您的問題是,您正在為變量分配.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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.