t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

В приложении есть 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 есть не у всех устройств, поэтому она присутствует на тулбаре для случаев, когда по клику на нее предоставляются какие-то операции. Как можно проверить ее наличие?

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

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

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

toolbar.getMenu().

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

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

Для

toolbar.getMenu().

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

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

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.

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