2011-03-28 3 views
5

임의의 Windows 응용 프로그램에서 자동화 기능을 수행하는 응용 프로그램이 있습니다. 나는 그것을 테스트하기 위해 메모장을 사용 해왔다.UIAutomation 및 원격 데스크톱 연결

이 자동화 중에 코드에서 이벤트를 호출해야합니다. 현재 두 가지 유형의 이벤트 (가장 일반적인 것인데, InvokePatternExpandCollapsePattern)를 지원합니다.

나는 원격 데스크톱을 통해 테스트를 수행 할 수있는 컴퓨터를 사용합니다. 그러나 그것은 이상합니다. 원격 데스크톱을 통해 컴퓨터에 연결하면 응용 프로그램이 정상적으로 작동합니다. 컴퓨터에서 연결을 끊으면 내 코드가 ExpandCollapsePattern (InvokePattern은 정상적으로 작동 함)에서 작동하지 않습니다. InvalidOperationException이 발생합니다.

설명서에 노드가 LeafNode로 표시되어있는 경우에만이를 throw해야한다고 나와 있습니다. 무엇이 원격 데스크톱을 내가 InvalidOperationException을 얻는 것과 다른 것으로 만드는가?

다음은 현재 이벤트를 수행해야하는 코드입니다.

ExpandCollapseState state = 
    patternMenu.Current.ExpandCollapseState; 
if (state == ExpandCollapseState.Expanded) 
    patternMenu.Collapse(); 
else if (state == ExpandCollapseState.PartiallyExpanded || 
     state == ExpandCollapseState.Collapsed) 
    patternMenu.Expand(); 

patternMenu는 GetCurrentPattern을 사용하여 AutomationElement에서 가져온 ExpandCollapsePattern입니다.

ExpandCollapseState의 현재 값은 값을 인쇄 할 때 "축소됨"입니다.

EDIT : 내가 왜 downvote를 얻었는지, 그리고 이것이 나쁜 질문이라는 것을 알 수있는 기회. 필자는 원격 데스크톱이 닫힐 때만 실패하는 것처럼 보이는 상황을 진정으로 혼란스럽게 생각합니다. 이것이 내가 그 해답을 알아야한다는 정말로 바보 같은 질문이라면, 나는 설명과 downvote를 좋아할 것입니다.

데스크톱과 상호 작용하는 프로세스는 Windows 서비스가 아닙니다. 원격 데스크톱을 컴퓨터에 설치 한 후 시작하는 응용 프로그램입니다. 내가 데스크톱을 잠그고 있기 때문입니까?

우분투에서 "터미널 서버 클라이언트"를 사용하여 Windows 컴퓨터에 로그인하고 있습니다. 이 애플리케이션의 닫기 버튼을 누르면 데스크톱이 잠길 수 있습니까?

답변

2

일반적으로 대화 형이 아닌 데스크톱에서 UI 자동화 또는 유사한 기능을 실행할 수 없습니다. 비대화 형 데스크탑은 입력과 관련하여 여러 가지 제한 사항이 있습니다. 집중된 요소가없고 입력을 보낼 수 없으므로 이것들에 의존하는 것은 실패 할 것입니다.

Windows 메시지를 보내는 것과 같은 일부 기능은 정상적으로 작동합니다. 여기서 일어날 수있는 일은 InvokePattern 기능이 메시지로 커버 아래에 구현되므로 여전히 작동합니다. Expand/Collapse는 입력 관점에서 구현 될 수 있지만 실패 할 수 있습니다.

명확하지 왜, 귀하의 경우, 그것은 당신이 클라이언트를 (그 부분이 예상되는) 닫을 때 실패하지만, 원격 바탕 화면 잠금 자체가 때 작동하는 나타납니다 -이 두 경우 모두에서 동일하게 동작 기대 .

로컬 우분투 바탕 화면이 잠겨 있으면 클라이언트가 계속 실행중인 한 모든 것이 정상적으로 작동해야합니다. 원격 클라이언트는 라이브 클라이언트를 가지고 있기 때문에 여전히 '대화 형'입니다. 클라이언트 자체가 대화 형 또는 비대화 형 데스크톱에서 실행되는지 여부에 관계없이 클라이언트가 다른 OS에서 실행되는 클라이언트에도 적용되지 않을 수 있습니다.)

+0

데스크톱이 잠겨있을 때 ,하지만 나는 틀렸다.최신 테스트 결과는 데스크톱이 잠겨 자마자 실패하기 시작했습니다. 원격 데스크톱을 사용하는 대신 테스트를 실행하는 VM을 설정하기 시작합니다. 감사. –

관련 문제