Невозможно взаимодействовать со всеми текстовыми представлениями на экране с помощью робота

Я сталкиваюсь со странной проблемой при использовании 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().

Другие вопросы по тегам