如何通过 FlutterDriver 测试BottomNavigationBarItems?
FlutterDriver 允许通过文本, byValueKey , byTooltip 和 byType 访问窗口小部件。
但是由于以下原因,这些方法都无法在我的App中解决:
文本:该应用程序已本地化,我需要以多种语言测试该应用程序。
byValueKey :BottomNavigationBarItem不具有 key 属性。
byTooltip :BottomNavigationBarItem不具有 toolTip 属性。
byType :byType仅返回该类型的第一个匹配项,并且不列出任何列表(因为我有多个标签,所以需要)。
非常感谢您!
干杯。
答案 0 :(得分:1)
如@bsr和@ user12563357所述-您可以在文本小部件上使用键:
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.shifting,
key: Key('bottom'),
items: [
BottomNavigationBarItem(
icon: Icon(Icons.ac_unit),
title: Text('First', key: Key('first'),)
),
BottomNavigationBarItem(
icon: Icon(Icons.cast),
title: Text('Second', key: Key('second'),)
)
],
),
并找到要在测试中的条形项目上单击的文本:
final firstItem = find.byValueKey('first');
await driver.tap(firstItem);
btw:您还可以使用 find.ancestor
找到BottomNavigationBarItemfind.ancestor(of: firstItem, matching: find.byType("BottomNavigationBarItem"));
但是您不能点击它。
答案 1 :(得分:0)
不知道您是否找到此问题的答案,但是我将在此处发布对我有用的解决方案。基本上,BottomNavigationBar
具有您需要使用的key
属性。 Flutter Driver识别出此键后,便可以告诉驱动程序点击其任何子项,即BottomNavigationBarItem
。
我的屏幕上有2个bottomNavigationBarItems
,如下所示,我为其父窗口小部件即BottomNavigationBar
定义了键:
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),)
)
],
),
然后我写了一个flutter驱动程序测试,以同时使用两个效果都很好的项目。
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');
});
结果:
答案 2 :(得分:-2)
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.shifting,
key: Key(`bottom`),
items: [
BottomNavigationBarItem(
icon: Icon(Icons.ac_unit, color: Colors.green,),
title: InkWell(child:Text(`First`, style: TextStyle(color: Colors.black),key:Key(`First`)),)
),
BottomNavigationBarItem(
icon: Icon(Icons.cast, color: Colors.yellow,),
title: InkWell(child:Text(`Second`, style: TextStyle(color: Colors.black),key:Key(`Second`)),)
)
],
),
test(`bottomnavigationbar test`, () async {
await driver.waitFor(find.byValueKey(`bottom`));
await driver.tap(find.byValueKey(`First`));
print('clicked on first');
await driver.tap(find.byValueKey(`Second`));
print('clicked on second too');
});