Я пытаюсь автоматизировать тестирование приложения, и я застрял в проблеме, которую я пытаюсь устранить.
Приложение имеет стандартные кнопки Windows, и я пытался си AutoIT и User32 DLL, чтобы нажать на некоторые из этих кнопок.Иногда кнопки нажимаются правильно (ууу!), А иногда они терпят неудачу (бу!) - но, что еще хуже, AutoIT убежден , что он нажал кнопку (двойная бу!), Которая затем генерирует ложные срабатывания (трипл-бух!).Когда я убедился, что он убежден, я имею в виду, что он возвращает успешное нажатие, когда оно не было.
Я запускаю приложение на Win Server 2K8, в этом приложении нет ничего особенного, кроме того, что оно используетОкна MDI, а некоторые кнопки содержатся в окнах MDI.Однако некоторые из них не находятся в окнах MDI (например, в окне входа в систему до создания родительского окна).
Вот мой порядок команд:
Найти кнопку в окне (успех,всегда) Вывести окно на передний план (успех). Активировать окно (успех). Активировать кнопку (успех). Фокусировать кнопку (успех). Если кнопка находится в фокусе и кнопка включена, нажмите ее.(Успех / Неудача, непредсказуемое поведение. Я не могу понять, почему иногда это удается, а почему иногда не получается ...)
Другие детали:
Иногда в ордере есть кнопкащелкнул, который должен открыть другое окно.Это окно закрывается, затем снова нажимается кнопка - и на этот раз ничего не происходит.В других случаях он работает как положено.
Я работаю от имени администратора, а UAC полностью отключен.
Насколько я знаю, это не проблема синхронизации, потому что я действительно проверяю, что кнопкасфокусирован и активирован, прежде чем пытаться щелкнуть по нему, и я вижу, что кнопка действительно выделяет выделенный фокус вокруг нее.
И, как я уже говорил, я также пробовал это с помощью простого User32 / SendMessageвызов, и это также не удается.
И последнее, но не менее важное, это не происходит, когда я вручную взаимодействую с приложением.У меня всегда были настоящие нажатия кнопок.
Есть мысли?
ОБНОВЛЕНИЕ
Вот еще одна переменная в уравнении, которое я должен был упомянуть - этопроисходит на виртуальной машине (потому что именно там мне нужно ее запустить).Я могу провести некоторое ограниченное тестирование на своей собственной машине, но чтобы получить настоящее тестирование, оно должно быть на ВМ.Нажатие на мою собственную панель разработки кажется надежным, что делает это еще более загадочным.
Я пробовал это на другой виртуальной машине, и она также, кажется, работает там.Что касается двух виртуальных машин, они используют одну и ту же версию Windows, ту же версию моего приложения, ту же версию AutoIT и т. Д.
Я сократил ее до одной детали - которая, так какповезло бы это, я не могу настроить себя, и должен положить в билет, чтобы изменить любую конфигурацию.Разница в конфигурации заключается в следующем:
На виртуальной машине, которая не работает , диспетчер устройств показывает мышь, которая является мышью VMware.На виртуальной машине, которая работает , диспетчер устройств показывает мышь, которая является мышью PS / 2.Очевидно, что обе являются программными мышами, но мне интересно, может ли мышь VMWare работать по-разному и не всегда срабатывать при нажатии кнопок.Я не уверен, насколько вероятно, что это как решение, потому что, насколько я понимаю, использование вызова User32 SendMessage на самом деле не использует мышь, а вместо этого отправляет то же сообщение, которое отправила бы мышь, но оно того стоит...