簡體   English   中英

量角器返回承諾而不是屬性值

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

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