Есть способ сделать то, что вы хотите, используя оболочку adb от monkeyrunner, и для этого не требуется отдельная сторонняя библиотека.
if ('mInputShown=true' in device.shell('dumpsys input_method')):
<conditional code for when soft keyboard is showing goes here>
or
if ('mInputShown=false' in device.shell('dumpsys input_method')):
<conditional code for when soft keyboard is not showning goes here>
где device
— экземпляр MonkeyDevice для подключенного устройства.
Я обнаружил, что приложения, которые обычно отображают программную клавиатуру для ввода при ручном запуске, не всегда надежно отображают ее при запуске с помощью monkeyrunner. Если логика сценария зависит от того, отображается ли программная клавиатура или нет, я использую приведенные выше тесты в сценарии, чтобы проверить, отображается ли программная клавиатура или нет.
Следующее объяснение включает в себя некоторые размышления о том, как решать проблемы этого типа.
adb shell dumpsys
возвращает очень большой и подробный дамп всех служб, работающих на устройстве. Дамп dumpsys
может быть запрошен для одной службы, в нашем случае для службы ввода. Это использование
adb shell dumpsys input_method
который вернет гораздо меньший дамп, который является просто текущим состоянием диспетчера методов ввода. Этот дамп будет включать все текущие экземпляры InputMethod, клиенты диспетчера методов ввода с общими параметрами для клиентов диспетчера методов ввода, состояние клиента метода ввода и состояние сервера метода ввода. Один набор общих параметров для клиентов диспетчера методов ввода относится к тому, отображается ли метод ввода (например, программная клавиатура), и некоторые параметры указывают, было ли запрошено, явно запрошено или принудительно показано отображение метода ввода, и отображается ли оно.
Представляет интерес то, показан ли метод ввода, поскольку он истинен, когда отображается программная клавиатура, и ложен, когда программная клавиатура не отображается. Имя этого параметра
mInputShow
и будет выглядеть
мИнпутШоун=истина
or
мИнпутШоун=ложь
в зависимости от того, отображается программная клавиатура или нет.
Следующим шагом будет использование этой информации в скрипте monkeyrunner. Класс MonkeyDevice включает в себя метод для запуска команды оболочки ADB из-под моста, используемого monkeyrunner, и который возвращает объект, который является возвращаемым значением для оболочки ADB при выполнении команды оболочки ADB. В скрипте monkeyrunner это выглядит так:
shell_cmd_return_stuff = device.shell('dumpsys input_method')
где device
— экземпляр класса MonkeyDevice для подключенного устройства, а shell_cmd_return_stuff
— переменная, содержащая весь вывод команды оболочки — в данном случае вывод дампа. Наконец, поскольку мы ищем определенную пару параметр/значение в тексте и знаем, как она выглядит, мы можем использовать стандартный Jython для поиска этой строки в возвращаемом выводе, не сохраняя ее в переменной и используя строку Jython in
boolean. оператор
if ('mInputShown=true' in device.shell('dumpsys input_method')):
<conditional code for when soft keyboard is showing goes here>
or
if ('mInputShown=false' in device.shell('dumpsys input_method')):
<conditional code for when soft keyboard is not showning goes here>
в зависимости от того, хотим ли мы знать, отображается ли в данный момент программная клавиатура или нет.
Наслаждаться!
person
Jim
schedule
30.10.2013