簡體   English   中英

量角器用getText()進行諾言解析

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM