这个想法是首先AlertDialog
通过唯一键识别文本,告诉驱动程序,然后对其执行tap
操作。在您的主代码中,将key
属性添加到Text
您想要点击的父小部件,例如:我正在展示一个AlertDialog
显示 2 个选项的简单内容,如下所示:
代码是:
showDialog(context: context,
builder: (BuildContext context) {
return AlertDialog(
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
GestureDetector(
key: Key('firstOptionKey'),
child: Text('Take a picture'),
onTap: () {},
),
Padding(
padding: EdgeInsets.all(8.0),
),
GestureDetector(
key: Key('secondOptionKey'),
child: Text('Select from gallery'),
onTap: () {},
),
],
),
),
);
});
正如你所看到的,我已经将两个文本都包裹起来了GestureDetector
,这样我们就可以点击它们了。此外,我使用key
每个属性GestureDetector
来唯一标识两个文本。
在您的驱动程序测试中,您只需识别每个文本使用byValueKey
并告诉驱动程序点击它,如下所示:
test('test dialog', () async {
final firstText = find.byValueKey('firstOptionKey');
await driver.waitFor(find.text('Tap'));
await driver.tap(find.text('Tap')); // tap on this button to open alertDialog
await driver.waitFor(firstText); // wait for flutter driver to locate and identify the element on screen
await driver.tap(firstText);
print('tapped on it');
});
希望这能回答你的问题。