0

자동화를 사용하여 "목록보기"의 내용을 읽으려고합니다. 처음으로 탐색 할 때 항목별로 항목을 이동하여 각 목록 항목에 올바른 텍스트를 가져올 수 있습니다. 그러나 다른 화면 (이 표시 객체를 재사용하고 있음)을 표시 할 때 화면의 텍스트는 다르지만 자동화는 첫 번째 세트와 동일한 텍스트를 가져옵니다. 그때부터 내가 본 첫 번째보기의 텍스트 만 가져올 수 있습니다. 그것은 텍스트가 캐시되고있는 것처럼 보이고 캐시 된 뷰만 볼 수 있습니다. 그러나 UISpy는 매번 올바른 값을 가져 오는 것으로 보이며 자동화가 일시 중지 된 상태에서 사용하면 올바른 값을 얻게됩니다.UIA - 목록보기가 변경 될 때 AutomationElement가 올바른 이름을 반환하지 않습니다.

자동화에서 필자는 찾기를 사용하여 머리글을 가져온 다음 트리를 목록보기로 이동하고 각 요소의 텍스트를 가져옵니다. Current 속성을 사용하면 라이브 데이터를 얻을 수 있다고 생각했습니다. 명백하게 나는 틀렸다. 트리를 새로 고치거나 실제 데이터를 얻으려면 어떻게합니까?

+0

다른 화면을 말할 때 두 화면이 동시에 열리나요? 동일한 페이지의 2 개의 다른 페이지 또는 2 개의 다른 인스턴스에서 동일한 객체입니까? UISpy를 사용하여 두 번째 화면의 컨트롤을 강조 표시하여 첫 번째 객체의 숨겨진 인스턴스가 아닌 표시된 객체를 찾도록 할 수 있습니까? – yonitdm

답변

0

예, 특정 AutomationElementCurrent 속성은 현재 '라이브'값을 반환합니다. UIA는 자동으로 아무 것도 캐시하지 않으므로 직접 선언하고 Cached 속성에 명시 적으로 액세스해야합니다.

다른 화면을 선택한 후에보고있는 새 트리 항목이 실제로 이 아닌으로 업데이트되고 사실상 재현됩니다 (실제로는 UI가 의미가 있습니다). 첫 번째 화면을 선택하고 트리 항목 'RuntimeId'속성 (UI 스파이에서 볼 수 있음)을 적어서 이것이 문제가되는지 쉽게 판단 할 수 있습니다. 그런 다음 두 번째 화면을 선택하고 RuntimeId이 변경되었는지 확인하십시오. 그럴 경우 동일한 객체 인스턴스가 아닙니다.

이 경우 해당 항목을 다시 가져 오면됩니다. ClassName 속성 조건이있는 AutomationElement.FindAll을 사용하면이 작업을보다 쉽게 ​​수행 할 수 있습니다.

+0

사실, 다른 화면으로 변경하면 루트에서 시작하여 동일한 결과를 가진 요소로 이동했습니다. 검색 및 탐색을 시도했지만 아무 것도 작동하지 않습니다. 나는 항상 같은 아이템을 얻는다. 재미있게도 UISpy는 같은 문제가없는 것 같습니다. FindAll 옵션을 시도해 볼 수는 있지만 희망이 없습니다. 지금은 두 번째 화면으로 이동하기 전에 프로그램을 다시 시작합니다. 그게 효과가있는 것 같습니다. –

관련 문제