2016-09-20 3 views
1

나는 각도기를 사용하여 일부 e2e 테스트를 작성하고 있습니다. 페이지 링크는 이름과 링크 수를 모두 변경할 수 있습니다. 내가하고 싶은 것은 페이지가 링크 이름과 링크 수를 말해주고 각 링크를 반복하고 클릭하는 것입니다.페이지에서 링크를 반환하고 클릭하는 방법

<div class="ng-scope" ng-repeat="Transition in DirectTransitions"> 
<p class="ng-binding" ng-click="selectTransition(Transition)">Draft</p> 
</div> 
<div class="ng-scope" ng-repeat="Transition in DirectTransitions"> 
<p class="ng-binding" ng-click="selectTransition(Transition)">Approved</p> 
</div> 
<div class="ng-scope" ng-repeat="Transition in DirectTransitions"> 
<p class="ng-binding" ng-click="selectTransition(Transition)">Posted</p> 
</div> 

I는 다음과 같이 개별적으로 각각의 링크를 클릭 할 수 있습니다 :

HTML은 다음과 같습니다 나는 현재하고있는 중이 야

it('should select Draft', function() { 
    element.all(by.repeater('Transition in DirectTransitions'));.filter(function(elem) { 
    return elem.getText().then(function(text) { 
     return text === 'Draft'; 
    }); 
    }).click(); 
    }); 

을하지만, 텍스트가 변경 또는 다른 링크를 추가하면/페이지에서 제거되었습니다. 링크를 추가/제거하거나 피하려고하는 텍스트를 변경하려면 다시 돌아가서 리팩토링해야합니다.

이런 식으로 링크 이름을 얻을 수있었습니다.

it('should get link names', function() { 
    element.all(by.repeater('<locator>')).map(function(item) { 
    return item.getText(); 
    }).then(function(labels) { 
    expect(labels).toEqual(['one', 'two', 'three']); 
    }); 
}); 

그러나 각 링크를 반복하는 방법을 알아 내고 각각을 클릭 할 수 없었습니다.

답변

0

당신은 each()와 모든 링크를 통해 반복 할 수

var links = element.all(by.repeater('Transition in DirectTransitions')); 
links.each(function (link) { 
    link.click(); 
}); 
expect(links.getText()).toEqual(['one', 'two', 'three']); 

이 클릭에 어떻게되는지에 따라, 당신은 "오래된 요소 참조"오류 (즉, 접근하는 여러 가지 방법과 후속 스레드에 대한 설명을 볼 수 있습니다).

+0

감사합니다. 시도해 보겠습니다. :) –

+0

첫 번째 요소를 클릭하면 예상대로 다음 페이지로 이동했습니다. 그 다음에 처음 링크가있는 페이지로 되돌아 가야했지만 다음 링크를 선택하는 대신 "실패 : 부실 요소 참조 : 요소가 페이지 문서에 첨부되지 않았습니다." –

+0

@DennisFerguson 아 첫 번째 클릭 후 페이지가 변경된다는 의미입니다. 관련 스레드는 다음과 같습니다. http://stackoverflow.com/q/29823757/771848. 또한 링크 (js/protractor가 아닌)의 현재 색인을 추적 할 수 있습니다. http://stackoverflow.com/questions/13448091/how-to-fetch-all-links-and-click-those -links-one-by-one-using-selenium-webdriver를 사용합니다. 희망이 도움이됩니다. – alecxe

관련 문제