2017-08-07 74 views
0

我想获得一个html属性的值,并使用下面的代码将其分配给url_extension变量,但我不断收到一个Promise对象。这里是我的代码(注:WD = browser.driver;量角器返回承诺,而不是属性值

ReturnNewArticleURL : function() { 
     var url_extension = this.getArticleExtension(); 
     console.log("url_extension: ", url_extension); 
     wd.get("http://any_website.com" + url_extension) 
     return url_extension; 
}, 

    getArticleExtension : function() { 
return wd.findElement(by.id ("confirm-unpublish-url")).getAttribute("value").then(function (text) { 
    return text}); 
}, 

如果我改变“回归文本”,以CONSOLE.LOG(文本)的getArticleExtension模块中,然后将打印正确的值的URL扩展在我的控制台。我的问题是基本上得到的.then()函数以外的文本值,并在其他地方使用。任何人都知道如何做到这一点或我做错了什么?

回答

1

重读和思考@ alecxe的答案,我能找出我需要做的之后。显然,我只能访问.then()函数内的属性值。对于任何人试图总结他们解决这个头,这里是我得到了我的代码工作:

ReturnNewArticleURL : function() { 
    var url_extension = this.getArticleExtension(); 
    console.log("url_extension: ", url_extension); //prints promise as expected 
    url_extension.then(function (text) {wd.get("http://any_website.com"+ text); 
}), //this is how you use the url extension from the url_extension promise. 

getArticleExtension : function() { 
     return wd.findElement(by.id ("confirm-unpublish- 
     url")).getAttribute("value") 
}, 

的关键是使用内部的。那么()函数的承诺值,而不是将其分配给外面可变。

url_extension.then(function (text) { 
wd.get("http://any_website.com"+ text); 
}), 

由于量角器使用Node.js的读取代码以异步方式,所以当我赋值到没有在他们被分配一个承诺开始计算的变量。

+0

这正是我的意思,不要以更清晰的方式表达这个想法,并感谢总结帮助你解决问题的原因! – alecxe

1

.getAttribute()作为其他的Protractor/WebDriverJS方法返回一个promise

这个想法是让你的函数返回一个承诺,并解决你什么时候需要一个N根实际值:

ReturnNewArticleURL : function() { 
    this.getArticleExtension().then(function (url_extension) { 
     console.log("url_extension: ", url_extension); 
    } 
}, 

getArticleExtension : function() { 
    return wd.findElement(by.id("confirm-unpublish-url")).getAttribute("value"); 
}, 
+0

这只会返回控制台日志中正确的扩展名,这是我自己得到的。我最终试图做的是 wd.get(www.any_url.com + url_extension)但是这只是给我“:ManagedPromise ...”而不是扩展名。我试图使用扩展值,而不是ManagedPromise,但似乎无法做到这一点。我修改了我的问题以更好地反映这一点。 – dredbound