2017-02-10 2 views
0

J'ai écrit le code suivant (modèle d'objet page). Fonctionne correctement. Cependant, je n'aime pas ça, parce que je ne peux pas supprimer "then" de "pressHelpLink". Au lieu de cela, ajoutez le code dans getElementByLink.comment bien résoudre le sélénium promesse? protractor

Je voudrais voir ElementFinder Promise (au lieu de ManagedPromise) à la suite de getElementByLink ("Aide")

Comment résoudre bien la promesse de sélénium?

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() 
      }); 
     } 
    }, 
}); 

Répondre

1

Pourquoi ne pas utiliser cssContainingText? Peut-être quelque chose comme ...

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

// method: 

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

Avec cette méthode, je peux raccourcir le code. Mais sur le site peut se produire plusieurs de ces éléments. – flig