CODEDUI Тесты действительно выполняются в отдельном процессе. Он использует очень специфическую форму «отражения» для поиска элементов управления в «других» процессах. Базовым классом контрольных элементов codedUI является UITestControl
Система ОС Windows по дизайну предотвращает прерывание или отслеживание других процессов в процессе происходящего. Таким образом, MSFT пришлось придумать абстракцию тестируемого процесса, чтобы вы могли «видеть» эти другие элементы управления. Полученная вами адресата - это не фактический контроль, а представление этого элемента управления в другом процессе. Вы можете управлять им, потому что MSTest имеет возможность «отправлять сообщения этому элементу управления». Вы ограничены тем фактом, что вы можете только «Получить» информацию о другом процессе через то, что вы находите в классах в этом пространстве имен: Microsoft.VisualStudio.TestTools.UITesting
Хорошим примером этого является тестирование WebBrowsers, CODEDUI использует класс с именем BrowserWindow, который совсем не похож на классы WebBrowser, найденные в другом месте. Единственный способ, которым я могу попасть в DOM в CODEDUI, - это свойство BrowserWindow.Document. Затем мне нужно сделать какое-то причудливое кастинг, чтобы получить то, что я хочу. Я подозреваю, что это то, что вам нужно делать.
- Определите, какой класс CodedUI будет представлять Окно, которое вы автоматизируете.
- Ищите методы или свойства этого класса, которые позволят вам указать, что вам нужно.
- Если вы не можете найти то, что вам нужно, у вас останется только один вариант, который должен опуститься на уровень обмена сообщениями ОС и посмотреть, не можете ли вы (из процесса) отправлять и получать сообщения. Это сложная и сложная тема, которой я никогда не был успешным. Примечание: Большая часть материала сделано на этом уровне делается в C++, так что действительно помогает знать C++ и как Windows, использует это (API), ...
Может что-нибудь еще делать?
Да, команда QA должна быть в состоянии установить несколько требований/крючков для них с командой разработчиков. Первое, что нужно спросить: «Должен ли Ед. Тест сделать это?» CODEDUI НЕ является истинным Функциональный тест, независимо от того, что кто-то учит, он просто нигде не близок к Unit Testing при проверке функции.
Во-вторых, вы можете попросить команду разработчиков поместить крючки в свой код, чтобы вы могли «добраться до этих вещей». Другими словами, код теперь должен содержать материал для QA Team для проверки. В вашем случае вы можете попросить разработчиков ввести метод для вас, который вызывает GetForCurrentView и передает результаты обратно.Но поскольку CodedUI является визуальным и не работает, вам придется работать с ними, чтобы выяснить, как показывать результаты на уровне графического интерфейса пользователя.
Что-нибудь еще?
Да, последнее, что вы можете использовать подделки для перехвата вызовов методов. Если они подведут ваш крючок, вы можете вызвать его и перехватить результаты вызова метода ... Но эй, разве это не похоже на модульное тестирование?
делает CoreApplication.GetCurrentView(). CoreWindow.Bounds работает (напрямую или CoreApplication.GetCurrentView(). Dispatcher.RunAsync)? – fex
CoreApplication.GetCurrentView() throws «Элемент не найден» HResult is 0x80070490 – Soonts