2016-08-18 5 views
1

는 그 코드가 작동각도기()가

각도기의 페이지 개체의 troncated 코드가있어 작동하고 (0)되지 않습니다 얻을 :

var HomePage = function() { 
    this.publishedShows = element.all(by.repeater('show in showsHomePage')); 
    this.getFirstShow = function(){ 
     return this.publishedShows.first(); 
    } 
}; 

이 한 것은 아니다 :

var HomePage = function() { 
    this.publishedShows = element.all(by.repeater('show in showsHomePage')); 
    this.getFirstShow = function(){ 
     return this.publishedShows.get(0); 
    } 
}; 

이 오류가 발생합니다 : 인덱스가 바운드입니다. 색인에있는 요소에 액세스하려고합니다 : 0, 그러나 위치 지정자 by.repeater ("showHomePage"에서 표시)와 일치하는 요소는 0 개뿐입니다.

누구나 할 수 있습니까?

답변

0

get(0)first()이 아니며 구현 측면에서 절대적으로 동일합니다. 그것은 어떤 행동을하기 전에 아마도 타이밍, wait for the presence of the element 약 :

var elm = myPageObject.getFirstShow(); 
var EC = protractor.ExpectedConditions; 

browser.wait(EC.presenceOf(elm), 5000); 

// do smth with elm 
+0

많은 감사. 그러나 시험을 계속하기 전에 각도기가 어떤 각도 요소를 기다리지 않아야합니까? – mabehec

+0

@MathieuBergeron 이론에서는 그렇습니다. 그러나 실제로는 테스트에서 이러한 대기 시간을 가져야하는 경우가 있습니다. 감사. – alecxe

+0

이 솔루션을 시도했지만 여전히 작동하지 않습니다. 같은 오류. 다른 생각? – mabehec

0

alecxe가 존재하는 요소를 기다리고 그래서 당신이 언급 한 바와 같이 대기 또는 브라우저로 할 수 있습니다에 대한 점을 가지고있다. waitForAngular();

내가 본 것은 파인더를 변수로 해결하면 내부 쿼리가 해결되었지만 완료되지 않은 약속 상태로 남을 수 있다는 것입니다. 어떤 일을해야하는 것은 약속을 해결하는 것입니다 그리고 당신은 당신이 필요로하는 요소를 얻을 수 있어야합니다 : 코드에서 그래서

:

`this.publishedShows = element.all(by.repeater('show in showsHomePage'));` 

여전히 약속하지 publishedShows됩니다.

코드를 시도 할 때 항목을 반환합니다 (약간 다른 리피터가 있음).

var HomePage = function() { 
    this.publishedShows = element.all(by.repeater('show in showsHomePage')); 
    this.getFirstShow = function() { 
      return this.publishedShows.then(function(items){ 
       =>return items[0].getText(); 
      }); 
    } 
}; 

var hp = new HomePage(); 
=>expect(hp.getFirstShow()).toEqual('hello'); 

분명히 당신이 무엇을 확인하고 싶은지에 대한 기대치도 변경하십시오. =>

표시가있는 트랙을 사용하는 경우 .exactRepeater 명령으로 명령을 사용하여 리피터 부분에만 정확하게 일치하는지 확인해야합니다. 이것은 나를 위해 일했습니다. 해결 된 약속은 파인더 배열을 반환합니다.

관련 문제