我应该在量角器中从元素的getText()承诺中分配变量或返回变量

时间:2016-03-08 13:21:00

标签: javascript angularjs selenium promise protractor

我有一个用例,我应该使用promise获取webElement文本,然后我需要提取字符串的一些部分以便进一步执行。

是否应使用顶部或底部示例?

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); 
});

1 个答案:

答案 0 :(得分: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

如果您仍需要使用promise(.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
});

希望它有所帮助。