Android MonkeyRunner не может ввести текст

Недавно я начал использовать MonkeyRunner для тестирования пользовательского интерфейса своего приложения для Android (я также использую Espresso, но хотел поиграть с MonkeyRunner). Проблема, с которой я сталкиваюсь, заключается в том, что я не могу ввести текст в поля EditText с помощью скрипта автоматизации.

Скрипт отлично перемещается по моему приложению, но, похоже, он не вводит никакого текста при вызове команды MonkeyRunner.type().

Пожалуйста, найдите мой сценарий ниже.

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
from com.android.monkeyrunner.easy import EasyMonkeyDevice, By
import commands
import sys
import os

# starting the application and test
print "Starting the monkeyrunner script"

# connection to the current device, and return a MonkeyDevice object
device = MonkeyRunner.waitForConnection()
easy_device = EasyMonkeyDevice(device)

apk_path = device.shell('pm path com.mysample
if apk_path.startswith('package:'):
    print "application installed."
else:
    print "not installed, install APK"
    device.installPackage('/MySample/MySample.apk')')

package ="com.mysample"
activity = ".SampleActivity"

print "Package: " + package + "Activity: " + activity

print "starting application...."
device.startActivity(component=package + '/' + activity)
print "...component started"

device.touch(205,361, "DOWN_AND_UP")
device.type("This is sample text")
MonkeyRunner.sleep(1)

result = device.takeSnapshot()

result.writeToFile("images/testimage.png",'png')

Как видно из скрипта выше, текст This is sample text должен быть помещен в поле EditText. И эмулятор, и снятый снимок экрана не отображают текст в текстовом поле.

Я пропустил шаг или просто делаю что-то неправильно?

Любая помощь будет принята с благодарностью!


person chuckliddell0    schedule 14.03.2014    source источник


Ответы (2)


Я бы предпочел использовать AndroidViewClient/culebra, чтобы упростить задачу. По сути, вы можете подключить свое устройство к adb, а затем запустить

culebra -VC -d on -t on -o myscript.py

Сценарий получает ссылки на все видимые представления. Отредактируйте скрипт и добавьте в конце

no_id10.type('This is sample text')
no_id10.writeImageToFile('/tmp/image.png')

Не нужно беспокоиться о просмотре координат, не нужно нажимать и печатать, не нужно добавлять сны и т. д.

ПРИМЕЧАНИЕ: в качестве примера используется no_id10, идентификатор вашего EditText может быть другим

person Diego Torres Milano    schedule 15.03.2014
comment
Спасибо за ответ. Я пересмотрел свой сценарий и теперь тестирую его с помощью вашего инструмента AndroidViewClient (отличная работа!). Однако у меня есть один вопрос: я не могу начать свою деятельность с помощью «команды startActivity». Следующее выдает ошибку device.startActivity(component=component) --------- RuntimeError: Starting: Intent { cmp=com.mysample/.activities.SampleActivity } Тип ошибки 3 Ошибка: Activity class {com.mysample /com.mysample.activities.SampleActivity} не существует. - person chuckliddell0; 18.03.2014

Прежде всего, я бы не использовал команду MonkeyRunner.sleep, а предпочел бы использовать пакет time и команду time.sleep. Просто импортируйте пакет

import time

и вы должны быть готовы идти.

Кроме того, я предлагаю вам подождать некоторое время между device.touch и device.type. Попробуйте с

device.touch(205,361, "DOWN_AND_UP")
time.sleep(1)
device.type("This is sample text")
person Sebastiano    schedule 14.03.2014
comment
Эй, спасибо за быстрый ответ на мой вопрос. Я внес изменения, которые вы предложили, но все еще та же проблема. Я увеличил таймер до 10 секунд, но снова та же проблема. - person chuckliddell0; 14.03.2014
comment
Вы уверены, что команды touch нацелены на правильные координаты? Если вы touch используете EditText, должна появиться программная клавиатура. - person Sebastiano; 14.03.2014
comment
Да, координаты правильные - я проверил с помощью монитора отладки и использую только один эмулятор. Я думал, что он должен появиться, но его нет. Само приложение работает нормально - без проблем проходит тесты на эспрессо, поэтому не знаю, в чем может быть проблема. - person chuckliddell0; 14.03.2014