[英]Protractor Returning Promise Instead of Attribute Value
我正在嘗試使用以下代碼獲取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});
},
如果我在getArticleExtension模塊中將“ return text”更改為console.log(text),則它將在控制台中為url擴展名輸出正確的值。 我的問題基本上是從.then()函數之外獲取文本值並在其他地方使用它。 有人知道該怎么做或我做錯了嗎?
.getAttribute()
和其他Protractor / WebDriverJS方法一樣,返回一個promise 。
這個想法是讓您的函數返回一個承諾並在您需要實際值時解決:
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");
},
重新閱讀並思考@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")
},
關鍵是在.then()函數內部使用了Promise值,而不是將其分配給外部的變量。
url_extension.then(function (text) {
wd.get("http://any_website.com"+ text );
}),
由於量角器使用node.js,因此它會異步讀取代碼,因此,當我為變量賦值時,這些變量在開始時並未進行評估,因此它們被分配了promise。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.