Можно ли идентифицировать просмотр по щелчку и его индексный номер снаружи приложения? - PullRequest
2 голосов
/ 19 марта 2012

Я изучаю Android уже несколько месяцев, особенно различные способы тестирования приложений для Android.До сих пор я работал с JUnit и Robotium.Я научился использовать Robotium довольно хорошо, даже для тестирования приложений для черного ящика, и я думаю, что это действительно круто.Но при тестировании приложений «черного ящика» с Robotium единственный способ нажать кнопку - это использовать ее метку, координаты или индекс.Дело в том, что если кнопка является кнопкой изображения, то я не могу использовать ее метку, и я боюсь, что использование координат не позволит мне выполнять свои тесты на разных устройствах из-за разных размеров экрана, поэтому виды могутбыть размещены в другом положении, когда они масштабируются.Таким образом, это оставляет меня только с индексом (если ... нет другого способа, которого я еще не знаю?), Но проблема в том, что у меня нет способа узнать индекс представления, пока единственный способ, которым я могумы решили получить индекс кнопки, написав тест, в котором Robotium нажимает на кнопку с индексом 0, а затем 1, и тогда я могу самостоятельно определить шаблон и считать до тех пор, пока не получу индекс нужной кнопки.

Но, поскольку это довольно громоздко (особенно если у меня есть несколько кнопок), я пытаюсь создать инструмент, который позволяет мне определять представление и его индекс при нажатии, например, например, я тестируюмузыкальный проигрыватель и я хочу сказать Robotium, чтобы нажать на кнопку «играть», так как это кнопка изображения, я пошлю индексный номер в качестве параметра для clickOnImageButton (int index), но я не знаю его индекс,поэтому я бы щелкнул по нему, и этот инструмент напечатает что-то вроде «Вы нажали ImageButton с индексом 3», если это возможно, в качестве тоста или в консоли.

Теперь здесьприходит мой вопрос, есть ли способ сделать это? Я пытался создать службу, использующую ее для захвата событий щелчка, но затем я прочитал этот пост: Android обнаруживает состояние касания из любого приложения , поэтомукажется, что по соображениям безопасности это невозможно, так как я считаю, что мне, безусловно, нужно захватывать события кликов из других приложений и элементов их просмотра.Я попытался увидеть, предоставляет ли logcat эту информацию, но не дает, наконец, я пытаюсь использовать getevent из adb, но его вывод труден для понимания, и кажется, что выходные данные getevent тоже являются координатами, есть ли способполучить представление и его индекс на основе его координат ?.Я пытался найти объяснение тому, как обезьяна работает тоже в случае, если есть что-то, что могло бы помочь там, но вся документация, которую я нахожу, касается как использовать это, а не как это работает.Интересно, знает ли кто-нибудь из вас, как Testdroid или любому из инструментов записи / воспроизведения удается захватывать эти клики и воспроизводить их на разных устройствах.

Я очень ценю вашу помощь, и извините за мой длинный вопрос, это мой первый пост, поэтому я пытаюсь понять, что именно я хочу сделать, надеюсь, я сделал.

Ответы [ 4 ]

2 голосов
/ 21 марта 2012

Вы также можете использовать Robotium с идентификаторами ресурсов. Пример:

ImageButton imageButton = (ImageButton) solo.getView(R.id.x);

solo.clickOnView(imageButton);

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

http://code.google.com/p/robotium/downloads/list`

1 голос
/ 19 марта 2012

Но при тестировании приложений черного ящика с Robotium единственный способ нажать кнопку - это использовать ее метку, координаты или индекс

. Вы можете нажать на виджет, который содержит определенную строкутекст, см. Solo.clickOnText (String), http://www.jarvana.com/jarvana/view/com/jayway/android/robotium/robotium-solo/1.0.1/robotium-solo-1.0.1-javadoc.jar!/index.html

0 голосов
/ 21 апреля 2013

Два решения:

  1. ImageButton imageButton = (ImageButton)activity.findviewbyid(R.id.x); Touchutils.clickview(this,imageButton);, где x - это идентификатор представления, который вы можете получить из исходного кода.

  2. Если вы не можете увидеть код, используйте следующий с solo solo.clickonbutton(int index);, где index - номер вида

0 голосов
/ 11 февраля 2013

Я часто сталкиваюсь с этим при тестировании черного ящика. Следует помнить, что в Robotium есть замечательная функция clickOnView, которая позволяет вам нажимать практически на все что угодно: теперь возникает вопрос, как однозначно идентифицировать представления (как вы можете просто получить их и затем щелкнуть по ним).

Я использую довольно хакерское (но простое) решение этой проблемы, когда пишу код для Robotium: я просто добавляю метод, который позволяет вам щелкнуть по произвольному индексу, выполнив getViews(), а затем clickView(), выбрав соответствующий индекс представления в результирующем ArrayList.

Я удивлен, что этого уже нет в Robotium, и я скоро сделаю толчок к Ренасу.

...