2

Я делаю некоторое тестирование черного ящика (с помощью UiAutomator 2,0 BTW, простираясь InstrumentationTestCase) и мне нужно знать:Как узнать, появилось ли новое мероприятие?

1 - когда новая деятельность создается

2 - знать, если это первый раз эта деятельность создана

Мне нужно это, потому что есть некоторые тесты, которые я хочу применить, когда появляется новое действие, но я хочу, чтобы это обнаружение было автоматическим, а не ручным.

Перед Android L был установлен метод UiDevice.getCurrentActivityName(). Однако теперь он устарел (более того, они даже не гарантируют его работоспособность для предыдущих версий). Это также произошло с вариантами получения активности, хотя PackageManager.

Таким образом, я хотел бы знать:

  • Можно ли программно обнаружить новый вид деятельности? Если это так, можно узнать, происходит ли это в первый раз.

  • Если это невозможно, как определить действие в соответствии с его пользовательским интерфейсом? Сколько виджетов должно измениться для меня, чтобы заключить, что это другая деятельность?

Спасибо.

EDIT: Просто, чтобы быть ясным, я не хочу проверять, что происходит, когда создается действие, я хочу, чтобы иметь возможность идентифицировать, является ли это первый случай, когда это происходит в ходе выполнения.

+0

Просто чтобы прояснить, потому что вы сказали, что тестирование черного ящика, я полагаю, на самом деле у вас нет доступа к исходному коду приложения, которое вы тестируете, правильно? –

+0

это точно (только этого было недостаточно, чтобы добавить комментарий xD) –

+0

'Black-box testing' воняет' обратная инженерия'. Переименованы. –

ответ

0

Вот что я в настоящее время реализовал для этой проблемы, основываясь на предположении, что одно и то же действие не изменит динамическую иерархию интерфейса. Это нормально для меня, кажется, я только хочу различать изменения пользовательского интерфейса, не необходимые для деятельности.

1.Build подписи для идентификации между экранами

signature1:FrameLayout;ListView;LinearLayout;RelativeLayout;... 
signature2:FrameLayout;FrameLayout;FrameLayout;LinearLayout;... 

2.Then, используйте список, чтобы сохранить экраны вы уже известны.

3.Для производительности вы можете использовать фиксированную длину для обозначения экрана.

Идея обратиться к этому paper

И если ADB это нормально для вас, вы можете использовать эту команду,

adb shell dumpsys activity 

Это ссылаются на другую должность here

+0

В итоге я сделал что-то похожее на это. Я сохраняю элементы, присутствующие на экране, а затем сравниваю их с другим чтением экрана. И я игнорирую любые изменения в редактируемых полях (поля редактирования, флажки, ...) –