Найти окно рабочего стола по классу в белом

Я строю автоматизированный набор тестов с использованием White. Одна из вещей, которые мне нужно сделать, это щелкнуть значок в области уведомлений о повышении системы (правый нижний бит панели "Пуск"). У меня проблемы с опознаванием белого. Используя Spy++, я обнаружил, что в окна вложены три слоя, которые не имеют заголовка для поиска, что является обычным способом, которым белые идентифицируют окна. Поэтому я пытаюсь найти правильное окно по классу.

Согласно Spy++, мне сначала нужно получить окно 10042, которое имеет класс "Shell_TrayWnd". Затем его дочернее окно 10048 с классом TrayNotifyWnd, затем, наконец, область повышенных уведомлений системы, окно 1005E, с классом ToolbarWindow32. Взяв несколько подсказок из этого ответа, я попробовал следующий код:

win=Desktop.Instance.Get<Window>(SearchCriteria.ByNativeProperty(AutomationElement.ClassNameProperty, "Shell_TrayWnd"));

но когда я пытаюсь запустить его, я записываю эту ошибку (sic):

Exception: Error occured while geting (),AutomationElementIdentifiers.ClassNameProperty=Shell_TrayWnd

Есть идеи?

РЕДАКТИРОВАТЬ: я изменил журнал ошибок, поэтому я получил полный трассировку, а не просто сообщение об исключении, и нашел System.ArgumentException: Must specify at least two conditions.

Итак, я изменил код

win = Desktop.Instance.Get<Window>(SearchCriteria.ByClassName("Shell_TrayWnd").AndIndex(0));

но все равно выдает точно такое же сообщение об ошибке, несмотря на то, что я указал два условия.

Exception: TestStack.White.WhiteException: Error occured while geting (),ClassName=Shell_TrayWnd,Index=0 ---> System.ArgumentException: Must specify at least two conditions.

1 ответ

В White UI Automation существует различие между SearchCriteria а также SearchConditions, SearchConditions используется внутренне платформой, тогда как критерии добавляются извне в качестве параметров, а затем внутренне преобразуются в условия (а затем еще более преобразуются в платформу Microsoft UIAutomation).

Если вы измените критерии поиска на

SearchCriteria.ByClassName("Shell_TrayWn").NotIdentifiedByText(String.Empty)

это перестанет выбрасывать ошибки.

Это связано с тем, что по умолчанию используется все, что ищется по именам / тексту в качестве условия поиска, и выдает не относящееся к делу сообщение об ошибке (это должно быть ArgumentException с сообщением "Необходимо указать имя / текстовое условие")

Другие вопросы по тегам