2013-07-25 5 views
3

MS 코딩 된 UI를 사용하여 특정 부모에서 컨트롤 검색을 시작하도록 지정하는 방법이 있습니까?코딩 된 UI 테스트 컨트롤 검색을 제한하는 방법

컨트롤에 대한 검색을 수행하고 있으며 해당 검색의 성공 또는 실패를 기반으로 다른 작업을 수행하려고합니다. 안타깝게도 동일한 자동화 ID를 가진 다른 컨트롤 (부모가 완전히 다른)이 있기 때문에 문제의 컨트롤에 관계없이 검색이 항상 성공합니다 (응용 프로그램이 매우 크기 때문에 결과가 자주 발생 함).

검색이 지정된 부모에서 시작되어 원하는 컨트롤이 있는지를 추측합니다. 발견되지 않으면 루트에서 검색을 다시 시작하고 이번에는 동일한 이름의 컨트롤을 찾았습니다 (관심있는 것은 아니지만 다른 하위 트리의 일부 임에도 불구하고).

제 질문은 특정 하위 트리에 대한 컨트롤 검색을 제한 할 수 있는지 여부입니다. 예를 들어 기본보기 인 Main에 View1과 View2의 두 가지 하위보기가있는 경우를 생각해보십시오. 각 하위 뷰에는 자동 ID가 "coolControl"인 컨트롤이 포함되어 있습니다.

특정 부모 (예 : View1)에서 검색이 성공한 경우에만 UI 검색을 제한하는 방법이 있습니까? 실패하면 검색을 루트에서 다시 시작하지 못하게 할 수 있습니까?

답변

2

할 수있을 것이라고 확신합니다.

검색 속성 및 필터 속성에 익숙합니까?

내가 권장하는 것이 아니라면 다음을 수행하십시오.

  1. 이동 파일 UIMap.uitest

  2. 마우스 오른쪽 버튼 액션을 클릭하면이 같은 태그 이름 또는 새 속성을 추가 할 수 있습니다 검색 속성에서 속성

을 선택 TagInstance 또는 문제를 일으키는 속성이나 필터 속성을 제거하십시오.

이미 작동하지 않거나 이미 시도한 경우 수동으로 검색 코드를 작성해야하는 경우 까다 롭습니다.

1

일반적인 대답은 SearchProperties 또는 FilterProperties에 더 많은 세부 사항을 추가하는 것입니다.

더 복잡한 답변을 보려면 코드화 된 UI에서 기록한 방법을 살펴보십시오. UI지도 클래스의 메소드는 다음과 같은 라인을 가지고 (여기서이 라인은 윈도우 7 시작 버튼을 클릭 출신) :

SomeUiControl uISomeControl = this.UIParent.UIChild.UIGrandChild; 

그런 다음 코드를 그냥 사용 같은보다 일반적으로 라인이

WinButton uIStartButton = this.UIStartWindow.UIStartButton; 

을 예 : 위의 시작 버튼에 Mouse.Click(uIStartButton, new Point(29, 27));을 입력하십시오.

uimap.cs 파일에는 자신의 메서드를 추가 할 수 있지만 UI 맵이 변경 될 때마다 다시 생성되므로 uimap.designer.cs 파일에는 메서드를 추가 할 수 없습니다. UI 맵 (partial class을 사용)에 기여하기 때문에 코드가 최상위 컨트롤을 선택하고 거기에서 검색을 시작할 수 있습니다.

생성 된 코드를 신중하게 읽음으로써 코드화 된 UI 생성 코드가 UI 맵에서 클래스, 유형 및 인스턴스를 사용하는 방법을 확인하는 것이 좋습니다. 속성을 사용하면 (예 : 의 값을 this.UIParent.UIChild으로 사용) Find 메서드가 호출되고 해당 항목의 SearchProperties 및 FilterProperties를 사용합니다.

+0

을 보내 주셔서 감사합니다. 우리가하고있는 테스트는 코드화 된 UI 테스트 프레임 워크를 기반으로하고 있으며 우리는 모든 것을 손으로 코딩하고 있습니다. 언급 한 구문을 사용하여 컨트롤에 액세스하고 있는데 문제는 실제 검색보다 제어가 필요하다는 것입니다. 내가 실패 할 때 검색을 다시 시작하지 못하게하고 싶습니다. 제 생각에 당신은 검색 속성을 좀 더 엄격하게 탐색해야한다고 생각합니다. 다시 한 번 감사드립니다! –

0

UITestControl에서 상속받은 각 클래스는 다른 UITestControl을 받아들이는 생성자를 가지고 있습니다. UITestControl은 검색중인 컨트롤의 부모 (Orcestor) 이상이되어 효과적으로 원하는 방식으로 검색을 제한합니다. 기본 생성자 (매개 변수없는 생성자)는 바탕 화면을 검색의 조상으로 사용합니다. 예를 들면 다음과 같습니다.

WinButton UIButtonStartButton = new WinButton(); 

데스크톱에서 내림차순으로 표시되는 창에 검색 속성을 추가하는 버튼을 만듭니다.

WinButton UIButtonStartButton = new WinButton(MyApplicationWindow); 

검색 속성을 추가하는 버튼을 지정된 창에만 만듭니다.

WinButton UIButtonStartButton = new WinButton(View1); 

검색 속성을 추가하는 버튼을 지정된보기에만 만듭니다.

모든 UITestControl은 부모로 전달 될 수 있지만 물론 특정 UITestControl에만 하위 항목이 있습니다.

0

어쩌면 너무 늦기는하지만 정확한 제어 방법을 찾는 방법이 있습니다. true로 MatchExactHierarchy을 설정하면 다음은 당신이 언급하는 같은 부모 아래에있는 컨트롤을 찾아 있도록, 정확한 계층 구조

Playback.PlaybackSettings.MatchExactHierarchy = true; 

테스트 초기화 위의 줄을 사용하여 부모에서 컨트롤을 찾을 수 있습니다.

잘못된 제어를 다시 찾을 수있는 캐시 문제가있을 수 있습니다.

codedUI에 대해 자세히 알고 싶다면 my blog