Драйвер флаттера: тестирование BottomNavigationBarItem - PullRequest
0 голосов
/ 01 апреля 2019

как мне проверить BottomNavigationBarItems через FlutterDriver ?

FlutterDriver позволяет получить доступ к виджетам через text , byValueKey , byTooltip и byType .

Но ни один из этих методов не работает для моего приложения по следующим причинам:

  • текст : приложение локализовано, и мне нужно протестировать приложение на нескольких языках.

  • byValueKey : BottomNavigationBarItems не имеют ключа properties.

  • byTooltip : BottomNavigationBarItems не имеют toolTip свойств.

  • byType : byType возвращает только первое совпадение типа и никакого списка (необходимо, потому что у меня несколько вкладок).

Большое спасибо!

Приветствие.

1 Ответ

0 голосов
/ 22 мая 2019

Не уверен, что вы нашли ответ на этот вопрос, но я собираюсь опубликовать здесь решение, которое работает для меня.По сути, BottomNavigationBar имеет свойство key, которое вам нужно использовать.Как только Flutter Driver идентифицирует этот ключ, вы можете указать драйверу нажать на любой из его дочерних элементов, например BottomNavigationBarItem.

. На моем экране 2 bottomNavigationBarItems, как показано ниже, и я определил ключ для их родительского виджета, т.е.BottomNavigationBar as:

bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.shifting,
        key: Key('bottom'),
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.ac_unit, color: Colors.green,),
            title: Text('First', style: TextStyle(color: Colors.black),)
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.cast, color: Colors.yellow,),
            title: Text('Second', style: TextStyle(color: Colors.black),)
          )
        ],
      ),

enter image description here

И я написал тест драйвера флаттера, чтобы задействовать оба элемента, которые отлично работали.

test('bottomnavigationbar test', () async {
      await driver.waitFor(find.byValueKey('bottom'));
      await driver.tap(find.text('First'));
      print('clicked on first');
      await driver.tap(find.text('Second'));
      print('clicked on second too');
    });

Результат:

enter image description here

...