2017-02-10 10 views
0

次のコード(ページオブジェクトパターン)を書きました。正しく動作します。 しかし、私は "pressHelpLink"から "then"を取り除くことができないので、これは好きではありません。代わりにgetElementByLinkにコードを追加します。どのようにセレンの約束をうまく解決しますか?分度器

私はセレンの約束を解決する方法きれい

getElementByLink(「ヘルプ」)の結果として、(代わりにManagedPromiseの)ElementFinder約束をご覧になりたいですか?

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

関連する問題