2016-10-07 5 views
0

グリッドに指定されたすべてのヘッダーが含まれているかどうかを確認する必要がありますが、同時にヘッダーがすべてDOM内に表示されないため、 javascriptの非同期性のために実際に動作させる方法を知っています。DOMにレンダリングされていないグリッドヘッダーを繰り返します。

私はこれを試しましたが、これは良いアプローチだとは思いません。

var self = this; 

    this.checkGridHeaders = function(gridName, expectedHeaders) { 

    var previous; 
    var headers = this.poGridUtil.getGrid(gridName).element(by.css('.ui-grid-render-container-body')) 
     .element(by.css('.ui-grid-header')).all(by.repeater('col in colContainer.renderedColumns track by col.uid')); 

    headers.each(function(header, headerIndex) { 
      if(expectedHeaders.length != 0 && header != 'undefined') { 
      header.getText().then(function(headerText){ 
       if(headerText == '') { 
       browser.executeScript("arguments[0].scrollIntoView();", previous).then(function() { 
        self.checkGridHeaders(expectedHeaders); 
       }); 
       } 

       previous = header; 
       console.log('***Element: ' + headerText); 
       expect(expectedHeaders.indexOf(headerText)).not.toEqual(-1); 
       header = 'undefined'; 
      }); 
      } 
    }); 
    }; 

と呼び、次のようになりますcheckGridHeaders('grid-className', ['header1', 'header2', 'header3', 'header4']);

基本的に私はexpectedHeaderは、既知のヘッダーを最後し、再度チェックするためにスクロール見えそうでない場合であるかどうかを確認したいです。私はちょうどそれを正しく書く方法を知らない。

答えて

0

、以下のコードを試してみてください。それは最善のアプローチではありませんが、機能します。誰もがこのコードを整理する方法を知っている場合は、コメントを投稿すること自由に感じ

this.checkGridHeaders = function(gridName, expectedHeaders, iterationNumber) { 
    if(isNaN(iterationNumber)) 
     iterationNumber = 5; 

    var headers = []; 

    var findHeaders = function() { 
     return self.poGridUtil.getGrid(gridName).element(by.css('.ui-grid-render-container-body .ui-grid-header')) 
     .all(by.repeater('col in colContainer.renderedColumns track by col.uid')).then(function (foundHeaders) { 
      var next = foundHeaders[foundHeaders.length - 1]; 
      return self.getResolvedText(foundHeaders).then(function(result) { 
       browser.executeScript("arguments[0].scrollIntoView();", next.getWebElement()); 

       for(var i = 0; i < result.length; i++) { 
        var cut = result[i].toString().replace("\n", ""); 
        var shorten = cut.trim(); 
        if(shorten !== "" && shorten !== " ") 
        headers.push(shorten); 
       } 

       browser.sleep(500); 
       return result; 
      }); 
     }); 
    }; 

    var headerFinders = []; 
    for (var iterIndex = 0; iterIndex < iterationNumber; iterIndex++) 
     headerFinders.push(findHeaders()); 

    var allPromises = headerFinders.map(function(item) { 
     return item; 
    }); 

    var finderResult = protractor.promise.all(allPromises).then(function(presentValues) { 
     return presentValues; 
    }); 

    finderResult.then(function(resultItems) { 
     var newHeaders = headers.filter(function(item, index, inputArray) { 
     return inputArray.indexOf(item) == index; 
     }); 
     for(var index = 0; index < expectedHeaders.length; index++) { 
     expect(newHeaders).toContain(expectedHeaders[index], 'Nie znaleziono naglowka: ' + expectedHeaders[index]); 
     } 
    }); 
    }; 

:)

0

は、私はそれを考え出した

var self = this; 

this.checkGridHeaders = function(gridName, expectedHeaders) { 
    var defer = protractor.promise.defer(); 
    this.poGridUtil.getGrid(gridName).element(by.css('.ui-grid-render-container-body .ui-grid-header')) 
    .all(by.repeater('col in colContainer.renderedColumns track by col.uid')).then(function (headers) { 
     var headerText =[]; 
     for(var i=0;i<headers.length;i++){ 
      browser.executeScript("arguments[0].scrollIntoView();", headers[i].getWebElement()) 
      headerText.push(headers[i].getText()) 
     } 
     defer.fulfill(headerText); 
    }) 
    expect(defer.promise()).toContain(expectedHeaders) 
    }); 
}; 
+0

それはスロー: 'defer.promiseは'期待(defer.promise())でfunction'ではありません.toContain(expectedHeaders); '。また、 'expect(defer.promise())。toContain(expectedHeaders)'の間に大量の括弧を使用しました。 – FCin

+0

私は以前のエラーを修正しましたが、今度は各列を非常に高速にスクロールし、 'A Jasmine spec timed out。 WebDriverコントロールフローのリセット。 – FCin

+0

これは、最初に発見された列の数で反復を開始します。これはまさに私の問題です。最初は列の数がわからないからですDOMでは表示されません。たとえば、実際の数値が13であっても、例えば 'headers.length'は10です...私はそれがスクロールするたびに新しい列があるかどうかを調べる何かが必要です。 – FCin

関連する問題