如何很好地解决硒的承诺?量角器

问题描述:

我写了下面的代码(页面对象模式)。正常工作。 但是,我不喜欢这样,因为我无法从“pressHelpLink”中删除“then”。请将代码添加到getElementByLink中。如何很好地解决硒的承诺?量角器

我想看看ElementFinder承诺(而不是ManagedPromise)为getElementByLink(“帮助”)

如何很好地解决硒承诺的结果呢?

var self = Page.create({ 
    url: {value: ''}, 

    // function: 
    getElementByLink: { 
     value: function (link) { 
      return element.all(by.repeater('items')).then(function (el) { 
       var my_array = el.map(function (el) { 
        return el.element(self.by.xpath('a')); 
       }); 
       var element_array_finder = protractor.ElementArrayFinder.fromArray(my_array); 

       var element = element_array_finder.filter(function (el) { 
        return el.getText().then(function (text) { 
         return text === link; 
        }) 
       }); 
       return element; 
      }).then(function (element) { 
       world.expect(element.length).equal(1); 
       return element[0]; 
      }); 
     } 

    }, 

    // elements: 
    HelpLink: { 
     get: function() { 
      return self.getElementByLink('Help'); 
     } 
    }, 

    // method: 

    pressHelpLink: { 
     value: function() { 
      return self.HelpLink.then(function (el) { 
       return el.click() 
      }); 
     } 
    }, 
}); 

为什么不使用cssContainingText?也许像...

// elements: 
HelpLink: { 
    get: function() { 
     return element(by.cssContainingText('a', 'Help'); 
    } 
}, 

// method: 

pressHelpLink: { 
    value: function() { 
     return self.HelpLink.click() 
    } 
}, 
+0

用这种方法,我可以缩短代码。但是在网站上可能会出现几个这样的元素。 – flig