2011-05-16 2 views
2

작은 배경 ...UI 자동화 클라이언트에 잡히면 UI에 자동으로 나타나는 예외가 나타나는 이유는 무엇입니까?

UI의 컨트롤과 무작위로 상호 작용하는 UI 자동화 앱을 개발 중입니다. 앱과 자동화 된 UI는 모두 WPF 응용 프로그램입니다. UI Automation 접근성 프레임 워크를 사용하고 있습니다. 때때로 나는 catch하고 처리하는 애플 리케이션에서 ElementNotAvailableException을 얻는다. ANTS 7을 사용하여 UI를 프로파일 링 할 때 이러한 예외가 Gen 2 쓰레기 더미에 표시된다는 것을 알았습니다. 예외의 새 인스턴스는 앱에서 예외를 발견 한 횟수와 일치합니다.

WinDBG, UIAutomation 페이지를 사용하여 GCRoot를 보았습니다. 자동화 된 응용 프로그램에 catch 된 예외가 나타나는 이유에 대한 명확한 설명을 찾지 못했습니다. UI가 자동화 될 때 개체가 해제되지 않고 자동화 응용 프로그램을 닫을 때도 남아 있습니다.

아이디어가 있으십니까? 정확히 알고 그것을 구현 방법, 우리가 알 수없는

답변

1

이 그것을 할 필요가 무엇을 할 수있는 UI 자동화를위한 순서 : 을

  • 계측을하고,
  • 간 통신

    계측 부분은 문자 그대로 UI 프레임 워크의 모든 클래스에 컴파일되거나 프레임 워크에 추가 된 인프라로 구성되어 있습니다. 그것은 호스트 응용 프로그램을 "감염"시키고 내부에 미니 응용 프로그램을 실행합니다.

    텍스트 상자의 실제 내용과 같이 클라이언트와 호스트간에 비 그래픽 정보를 전달하려면 프로세스 간 통신 부분이 필요합니다. 이것은 간단하게 들리지만 문자 그대로 두 프로세스간에 유형과 값을 주입하고 교환합니다.

    이제 두 가지를 결합하면 프로세스 간 통신의 일부로 예외가 교환 될 수 있으며 해당 예외는 자동화 프레임 워크 인 미니 응용 프로그램에 의해 참조로 유지 될 수 있습니다. 그것 일어날 수 있습니다.

    당신이 충분히 호기심이 있거나 (아마도 버그에 의한) 많은 동기가 있다면, 다양한 도구를 사용하여이 문제를 계속 파악할 수 있습니다. 디버거, ILSpy, 블랙 박스 실험, 힙 도구 등이 있습니다. 얼마나 멀리 갈 필요가 있습니다.

+0

응답 해 주셔서 감사합니다. 내 의혹은 자동화 응용 프로그램과 UI 사이의 통신을 통해 무언가가되어 예외가 자동으로 UI에 표시되지 않게했습니다. 좀 더 디버깅 도구를 살펴볼 것입니다. – Raffledoocious

관련 문제