Блокировка ввода мышью в Java Swing
У меня есть тестовое приложение FEST, которое использует робота AWT для имитации определенных действий через интерфейс Swing. Моя проблема заключается в том, что при перемещении указателя мыши во время выполнения робот-теста отменяются некоторые программные действия, например нажатие на заголовок столбца. Если вы ничего не трогаете во время выполнения, курсор перемещается в одиночку к цели и попадает в нее.
Есть ли способ заблокировать пользовательский ввод мыши для этого приложения до завершения теста?
Может быть, не блок, а способ игнорировать события, принудительное окончание EDT или экранирование робота, конечно, будут оценены
2 ответа
Может быть, вы могли бы отключить клавиатуру и мышь, используя собственные команды терминала. Т.е. cmd.exe для Windows и терминал для Linux (в зависимости от того, должно ли приложение быть переносимым, просто проверьте имя ОС, а затем выполните правильную команду), однако я не уверен, что это сделает Robot
бесполезный. Я думаю, что нет, хотя.
Окна:
cmd.exe /c %Homedrive%\windows\rundll32.exe мышь, отключить
cmd.exe /c %Homedrive%\windows\rundll32.exe клавиатура, отключить
а для линукса смотри тут
Приложение:
Насколько я знаю, в чистой Java это невозможно без использования JNI для отключения ввода клавиатуры и мыши от пользователя.
Вот отличная ссылка для дисбаланса мыши и клавиатуры, использующих JNI в Java: Java Global Keyboard / Mouse Hook - JNI
Если вам сложно развиваться с помощью сквозных тестов с использованием робота AWT, попробуйте разделить тесты, чтобы можно было запускать только часть, которая проверяет функциональность, к которой обращаются, в то время как все наборы сквозных тестов должны выполняться на сервере сборки.
Вот результат сквозного тестирования роботом AWT для приложения Swing, которое выполняется на сборочном сервере без головы: http://travis-ci.org/#!/plokhotnyuk/calculator/jobs/1979904/L538