2017-02-10 43 views
0

我寫了下面的代碼(頁面對象模式)。正常工作。 但是,我不喜歡這樣,因爲我無法從「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() 
      }); 
     } 
    }, 
}); 

回答

1

爲什麼不使用cssContainingText?也許像...

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

// method: 

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

用這種方法,我可以縮短代碼。但是在網站上可能會出現幾個這樣的元素。 – flig