Tôi có một điều khiển TreeView trên biểu mẫu của mình và tôi đệ quy đi qua các phần tử của cửa sổ khác bắt đầu bằng chính cửa sổ. Tôi đang sử dụng tính năng này để tìm các yếu tố:Windows UI Automation không hiển thị tất cả các phần tử con?
getRecursiveElements(AutomationElement parent)
{
children = parent.FindAll(TreeScope.Children, Condition.TrueCondition);
foreach (AutomationElement child in children)
{
addToTreeView(child);
getRecursiveElements(child);
}
}
Nói chung, mã hoạt động khá tốt trong hầu hết các trường hợp. Cây có dân cư và tôi có một chút mã hỗ trợ khác cho phép tôi nhấp đúp chuột, ví dụ, một phần tử trong chế độ xem dạng cây và nó sẽ làm nổi bật phần tử đó trên biểu mẫu đích.
Vấn đề tôi gặp phải là, trong khi nó tạo ra một cây tuyệt vời, vẫn còn một số yếu tố bị thiếu đối với một số chương trình mục tiêu nhất định.
Lý do có thể có cho điều này là gì và có cách nào để vượt qua nó không? Nếu tôi gọi EnumChildWindows()
từ user32.dll sẽ có cùng một vấn đề?
Bạn có thể đưa ra một số ví dụ về các loại yếu tố mà nó bỏ qua không? Và bạn đã so sánh cây của mình với cây được sản xuất bởi công cụ UISpy hoặc Inspect từ SDK chưa? UIA không có khái niệm 'lượt xem', là bộ lọc được áp dụng ngoài điều kiện bạn cung cấp cho Tìm. Theo mặc định, UIA lọc ra những thứ không phải là phần tử nội dung, vì vậy nếu bạn liệt kê một hộp danh sách hoặc listview, bạn sẽ chỉ nhận được hộp danh sách, chứ không phải thanh cuộn hoặc tiêu đề. Đây có phải là thứ mà bạn đang thiếu, hay cái gì khác? – BrendanMcK