繁体   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