【问题标题】:Protrcator - Returns empty array after the function callProtrcator - 函数调用后返回空数组
【发布时间】:2018-10-20 19:13:27
【问题描述】:

我只需要在以下量角器函数中出现什么错误。我将数组设为空。代码如下

function(){
        var arrVal=[];
        elem = element.all(by.xpath('//div[contains(@class,"header-col")]/div'));
        elem.each(function(elementVar) {
          elementVar.getAttribute('title').then(function(val){
            arrVal.push(val.toString());
          });
        });
        console.log(arrVal.len);
    }

【问题讨论】:

  • 在将值推送到数组之前,您是否检查过 elementVar.getAttribute('title') 是否返回任何内容?
  • 是的@Gunderson 打印值

标签: selenium protractor


【解决方案1】:

element.all() 返回一个ElementArrayFinder。根据描述,这可以被视为 webElements 数组,您可以对该数组中的每个元素执行操作。

因此,对于您的情况,您不需要创建自己的数组。您可以只返回一个调用了getAttribute 的元素数组,这将返回一个检索到的值的数组:

function(){
    // this could be all one line, but wanted it to fit:
    let list = element.all(by.xpath('//div[contains(@class,"header-col")]/div'))
    return list.getAttribute('title');
}
// example return value: ['Welcome', 'Homepage', 'About']

注意:这是返回一个承诺,所以在使用这个函数时你必须调用.then,除非放在expect中(自己解决承诺)

【讨论】:

  • @RufusLawrence 这对你有用吗?如果答案正确,请考虑接受以帮助他人
【解决方案2】:

你需要使用 .then 来解析 promise 并推送数组中的每个属性

 function(callback){
            var arrVal=[];
            elem = element.all(by.xpath('//div[contains(@class,"header-col")]/div'));

            elem.then(function(arrayElements){
               for(i=0; i<arrayElements.length ;i++){
                  arrVal[i] = arrayElements[i].getAttribute('title');
               }
               callback(arrVal);
             });

        };

【讨论】:

    【解决方案3】:

    在这种情况下你需要返回承诺:

    function(){
        var arrVal=[];
        elem = element.all(by.xpath('//div[contains(@class,"header-col")]/div'));
        elem.each((elementVar) => {
            return elementVar.getAttribute('title').then(val => arrVal.push(val.toString()));
        });
        console.log(arrVal.len);
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 2021-08-17
      • 1970-01-01
      • 2022-01-06
      • 2021-06-27
      • 1970-01-01
      相关资源
      最近更新 更多