2016-09-16 11 views
1

私のテスト用に私のPageObjectをリファクタリングしています。現在、私はモーダルで2つの異なるボタンにあるラベルをチェックしています。モーダル要素を返し、必要に応じて開きます。

/* home-spec.js */ 
it('Some test', function(){ 
     expect(homePage.getButton1Label()).toEqual(expectations.btn1); 
     expect(homePage.getButton2Label(true)).toEqual(expectations.btn2); 
}); 

これは、現在、私は、モーダルがオープンであるかどうかを表す変数を渡す必要があります動作しますが。それは私が修正しようとしているビットです。私がやりたい何

/* home-page.js */ 
var HomePage = function() { 

function getModalContent(modalName, isModalOpen){ 
    /* isModalOpen = element(by.css('.modal-content')).isPresent(); */ 
    if(!isModalOpen){ 
     var manageProductsView = getUiView('SOME_VIEW'); 
     var btn = getButton(manageProductsView); 
     btn.click(); 
     browser.waitForAngular(); 
    } 
    return element(by.css('.modal-content')); 
} 

function getButtonLabel(buttonBinding, isModalOpen){ 
    /* isModalOpen = element(by.css('.modal-content')).isPresent(); */ 
    var modalcontent = getModalContent('MODAL_NAME', isModalOpen); 
    var modalFooter = modalcontent.element(by.css('.modal-footer')); 
    var btn = modalFooter.element(by.binding(buttonBinding)); 
    return btn.getText(); 
} 


    return { 
     getButton1Label: function(isModalOpen){ 
      return getButtonLabel('btn1', isModalOpen); 
     }, 
     getButton2Label: function(isModalOpen){ 
      return getButtonLabel('btn2', isModalOpen); 
     } 
    } 
} 

はそのisModalOpen依存関係を削除しているが、私はそれを行うための正しい方法を見つけるように見えるしません。コメントは私が試したことを示し、行く方法と思われた。またブロックthenにラップしようとしました。 Vlad answerに基づいて

EDIT
それはモーダルが開いている場合

function getButtonLabel(buttonBinding){ 
    return element(by.css('.modal-content')).isPresent().then(function(isModalOpen){ 
     var modalcontent = getModalContent('MODAL_NAME', isModalOpen); 
     var modalFooter = modalcontent.element(by.css('.modal-footer')); 
     var btn = modalFooter.element(by.binding(buttonBinding)); 
     return btn.getText(); 
    }); 
} 

は手動で約束を扱う避けるためにしようとしていたが、私はいくつかのケースでは、それは

+0

私の一般的な感覚は、ロジックは、あなたは、将来のものの一部をリファクタリングする場合があります、少しも複雑に見えるということですif(element(by。mod(modal-content)))。isDisplayed()) – lauda

答えて

2
やむを得ないだと思うチェックしますので、私は私の getButtonLabel機能を編集しました

あなたのコメントされた部分は行く方法です:

function getModalContent(modalName){ 
    var modalContent = element(by.css('.modal-content')); 
    var isModalOpen = modalContent.isPresent(); 
    return isModalOpen.then(function(open) { 
     if(!open){ 
     var manageProductsView = getUiView('SOME_VIEW'); 
     var btn = getButton(manageProductsView); 
     return btn.click() 
      .then(function(){ 
       return modalContent; 
      }); 
     } 
     return modalContent; 
    }); 
} 

function getButtonLabel(buttonBinding){ 
    var modalcontent = getModalContent('MODAL_NAME'); 
    var btnText = modalcontent 
     .then(function(content) { 
      return content 
       .element(by.css('.modal-footer')) 
       .element(by.binding(buttonBinding)) 
       .getText(); 
     }); 
    return btnText; 
} 

テスト後にモーダルが開いたままになっていることに注意してください。テスト中に一貫性のある状態を維持するために開いている場合は、何かを追加して閉じることができます。

操作を行う前に開いているかどうかを知る方がはるかに優れています。そうでないと自分で開くことができます。約束の連鎖。モーダルは、もし状態で表示されている場合は、代わりに、このチェックのisModalOpenを削除したp

+0

それは助けになりました。あなたの入力に基づいて、私は 'getButtonLabel'関数を更新しました。それを編集上で見てください – taguenizy

関連する問題