2016-09-06 38 views
0

我要檢查,如果視圖是可見的,所以我用了被示()上查看的方法,但因爲我創造我自己的看法和這些取決於ID它很沒用,所以這裏的例子圖: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異常,它甚至不打算被示()。

我逮住例外

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()

希望這將有助於

編輯:嘗試使用這些聽衆之一,以檢查是否視圖的知名度已經改變:使用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並跳過循環。它會拋出異常並將我的測試標記爲失敗。當我得到View並且視圖不可見時它崩潰,因爲它正在搜索它,並且它消失了,所以它引發異常。 –

+0

沒有。下面的人是使用mistical'v',我使用直接的'Robotium'代碼,所以這是不相等的。不要針對聽衆的目的使用循環 – piotrek1543

相關問題