Невозможно взаимодействовать со всеми текстовыми представлениями на экране с помощью робота
Я сталкиваюсь со странной проблемой при использовании robotium, когда я использую, solo.getCurrentViews()
Я получаю взгляды на экране. Но для некоторых видов деятельности, которые считаются загруженными, я не вижу их на экране, они скрыты, и для их отображения необходимы некоторые действия пользователя. Например, на главном экране Amazon мне нужно прокрутить список продуктов, на первом экране отображаются только 3 продукта. Но solo.getCurrentViews()
загружает все виды товаров. Теперь, если, скажем, я нажимаю "TextViews", отличные от трех текстовых представлений, которые отображаются на экране, я получаю сообщение об ошибке, и приложение закрывается. Итак, я думаю, что мне нужно как-то проверить, отображается ли текстовое изображение на экране или нет. Это относится ко всем объектам просмотра.
Robotium загружает все виды, но нажатие на виды, которые в данный момент не видны, вызывает ошибку.
3 ответа
Solo.getCurrentViews()
вернет все виды. Ты можешь использовать: RobotiumUtils.removeInvisibleViews(solo.getCurrentViews())
для фильтрации видимых видов.
ИЛИ вы можете отфильтровать видимые TextViews самостоятельно, используя следующий код.
public ArrayList<TextView> getFilteredTextViews()
{
ArrayList<TextView> textViewList = solo.getCurrentViews(TextView.class);
ArrayList<TextView> filteredTextViewList = new ArrayList<TextView>();
for (TextView textview : textViewList ) {
if (textview != null && textview.isShown())
{
filteredTextViewList .add(view);
}
}
return filteredTextViewList;
}
Вы можете привести каждое представление к его классу (или к классу android.view!), А затем проверить его свойство "VISIBLE".
Для TextView:
TextView tv = (TextView) solo.getCurrentViews().get(i);
int visible = tv.VISIBLE;
0 - отображается на экране; значение по умолчанию.
1 - Не отображается, но учитывается при разметке (для него оставлено место).
2 - Полностью скрыт, как будто вид не был добавлен.
Сделайте то же самое для всех элементов управления.
Просто хотел, чтобы вы знали, я решил проблему с помощью проверки метода view.isShown().