2016-03-08 49 views
1

我有一個用例,我應該使用承諾獲得webElement文本,然後我需要提取字符串的一部分進一步執行。我應該分配一個變量或返回變量從量角器中的元素的getText()承諾

應該使用頂部還是底部示例?

var id = element(by.binding('smsDetails.message')).getText().then(function(message){ 
 
    var messageArray = msg.split("\n"); 
 
    var indexPosition = messageArray[0].indexOf("ID"); 
 
    id = messageArray[0].substr(indexPosition + 5, 10); 
 
    return id; 
 
});
var id; 
 
element(by.binding('smsDetails.message')).getText().then(function(message){ 
 
    var messageArray = msg.split("\n"); 
 
    var indexPosition = messageArray[0].indexOf("ID"); 
 
    id = messageArray[0].substr(indexPosition + 5, 10); 
 
});

回答

3

你必須採取的值(字符串)是getText()函數返回。所以你的第二種方法適合做到這一點。

但警告這種方法是,因爲ü不知道什麼時候量角器 返回字符串值作爲它的一個承諾,所以一定要等到你第一次得到的文本 值,然後在其上執行操作必要。

下面是如何 -

var id; 
element(by.binding('smsDetails.message')).getText().then(function(message){ 
    var messageArray = msg.split("\n"); 
    var indexPosition = messageArray[0].indexOf("ID"); 
    id = messageArray[0].substr(indexPosition + 5, 10); 

    //Ideal place to perform operation on text value - id 

}).then(function(){ 

    //Perform operation on text value - id 

}); 
//DONT perform operation on text value - id 

如果您仍然需要使用承諾(.then())以外的值,然後等到返回的文本,然後繼續你的操作 -

var id = ''; 
browser.wait(function(){ 
    return element(by.binding('smsDetails.message')).getText().then(function(message){ 
     //Other operations 
     id = messageArray[0].substr(indexPosition + 5, 10); 
     return !!message; 
    }); 
}).then(function(){ 
    //Perform operation on text value - id 
}); 

希望它有幫助。

+0

爲什麼你正在使用brwoser.wait來保存進一步的值 – Vivek

+0

@Vivek我在那裏提到了一條評論,如果你想使用getText()返回的承諾之外的id值,那麼你應該等待爲了它。有很多方法可以等待,我已經展示了其中的一種。如果您不等到承諾退回,那麼您不能在承諾之外的'id'上執行操作。謝謝 –

+0

好的謝謝,任何其他的等待方法 – Vivek