2016-09-06 12 views
0

Я хочу проверить, видимо ли вид, поэтому я использовал метод isShown() в представлении, но это совершенно бесполезно, потому что я создаю свои собственные представления, и это зависит от id, так что вот пример view :Robotium - Как проверить значение видимости вида

private static final String BTN_ADD_CURRENCY_ALERT = "action_add_currency_alert"; 

private View btn_AddAlert() { 
    return mainHelper.getView(BTN_ADD_CURRENCY_ALERT); 
} 

Здесь находится тело getView();

public View getView(String id) { 
    return solo.getView(id); 
} 

Затем я хочу увидеть, является ли этот элемент видимым (если нет, то должен возвращать значение false).

Я называю это, как этот

if (btn_addAlert().isShown()){...} 

И проблема в том, что, когда я называю btn_addAlert() и вид не виден я AssertionFailedError, и это даже не собирается isShown().

Я поймала исключение

private boolean catcher() { 
    try { 
     btn_addAlert().isShown(); 
     return true; 
    } catch (AssertionFailedError e) { 
     return false; 
    } 
} 

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

Итак, что я могу сделать в этой ситуации?

Спасибо заранее.

ответ

0

Вы можете проверить это, как

if(v.getVisibility() == View.VISIBLE) 
     // do you stuff here 
+0

Я думаю, что его проблема гораздо сложнее. Это не просто поиск функции «isShown». – Cocorico

+0

btn_addAlert() - вот в чем проблема.Это ничего не изменит, потому что getVisibility() не будет выбрано. –

0

Допустим, вы уже используете этот метод:

public View getView(String id) { 
    return solo.getView(id); 
} 

, чтобы проверить, если эта точка зрения видна вы можете использовать:

switch (getView("R.id.button").getVisibility()) { 
     case (View.VISIBLE): { 
      break; 
     } 
     case (View.INVISIBLE): { 
      break; 
     } 

     case (View.GONE): { 
      break; 
     } 
     default: 
      break; 
    } 
} 

В вашем точном случае попробуйте использовать btn_addAlert().getVisibility() вместо getView("R.id.button").getVisibility().

Надеется, что это поможет

EDIT: Попробуйте использовать один из этих слушателей, чтобы проверить, если видимость View изменилась:

  • использования ViewTreeObserver().addOnGlobalLayoutListener

    btn_addAlert().setTag(myView.getVisibility()); 
        btn_addAlert().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         int newVis = btn_addAlert().getVisibility(); 
         if((int)btn_addAlert().getTag() != newVis) { 
          btn_addAlert().setTag(myView.getVisibility()); 
          //visibility has changed 
          //here you can use my "switch" statement 
         } 
        } 
    }); 
    

Проверка: Handle a view visibility change without overriding the view

  • использованием OnSystemUiVisibilityChangeListener:

    View decorView = getWindow().getDecorView(); 
    decorView.setOnSystemUiVisibilityChangeListener 
        (new View.OnSystemUiVisibilityChangeListener() { 
        @Override 
        public void onSystemUiVisibilityChange(int visibility) { 
         // Note that system bars will only be "visible" if none of the 
         // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set. 
         if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { 
          // TODO: The system bars are visible. Make any desired 
          // adjustments to your UI, such as showing the action bar or 
          // other navigational controls. 
         } else { 
          // TODO: The system bars are NOT visible. Make any desired 
          // adjustments to your UI, such as hiding the action bar or 
          // other navigational controls. 
         } 
        } 
    }); 
    

Проверил: https://developer.android.com/training/system-ui/visibility.html

+0

Это просто версия для переключения ниже. Я хочу что-то сделать до тех пор, пока вид не станет видимым, поэтому используйте цикл while, но если вид не отображается, он не вернет false и skip loop. Он будет генерировать исключение и пометит мой тест как потерпевший неудачу. Он падает, когда я getView и вид не видим, потому что он ищет его, и он исчез, поэтому он выдает исключение. –

+0

Нет. Гай ниже использует туманный 'v', я использую прямой код' Robotium', так что это не равно. Не используйте циклы, где цель предназначена для слушателей – piotrek1543