Как в Android проверить наличие на экране кнопки вызова меню?


(Игорь Кожин) #1

В приложении есть Toolbar из Android SDK, который может содержать кнопку вызова меню.

public Toolbar mToolbar;

@Override
public void setContentView(int layoutResID) {
      <...>
      mToolbar = (Toolbar) findViewById(R.id.my_toolbar);
      <...>
};

Наличие тулбара я проверяю так:

Toolbar toolbar = (Toolbar) solo.getView(R.id.my_toolbar);
assertTrue(toolbar.getVisibility() == View.VISIBLE);

Однако, кнопка MENU есть не у всех устройств, поэтому она присутствует на тулбаре для случаев, когда по клику на нее предоставляются какие-то операции. Как можно проверить ее наличие?

Тут ответа не нашел


(Ray Romanov) #2

есть такое свойство enabled() его и проверяй, но в случае отсутствия элемента вызывается исключение то заверни в блок try except


(Игорь Кожин) #3

Мне надо проверять не видимость тулбара, а кнопки вызова меню, я так понимаю что к ней стоит обращаться через

toolbar.getMenu().

а для нее свойства "isEnabled()" увы нет.


(Ray Romanov) #4

Для проверки видимости есть .displayed(), а .enabled() для проверки наличия элемента в DOM дереве


(Игорь Кожин) #5

Для

toolbar.getMenu().

также нет и свойства ".displayed()".


(Dmitry Cheremushkin) #6

По идее нужно через

toolbar.getMenu().getItem(index)

Оба возвращают MenuItem. У MenuItem есть метод isEnabled().


А чтобы находить конкретно кнопку меню — нужно проверить на разных экранах:

  1. Одинаков ли Id у MenuItem, соответствующего кнопке Menu. Если да, то достаточно проверять через toolbar.getMenu().findItem(id).isEnabled(). Если нет, см следующий пункт.
  2. Есть ли Title у MenuItem, соответствующего кнопке "Menu". Если да, то можно в цикле перебирать MenuItem'ы и сравнивать их Title с Title кнопки "Menu". А затем у совпадающего проверить isEnabled(), ежели нет совпадения — возвращать false.

(Ray Romanov) #7

В нашем приложении toolbar является android.view.View классом с id :id/toolbar и в UI Automator Viewer прекрасно виден, все нажимается и проверяется. Проверь через UI Automator Viewer инспектируется или нет?