Идея состоит в том, чтобы сначала идентифицировать текст в 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');
});
Надеюсь, что это ответ на ваш вопрос.
person
Darshan
schedule
03.12.2019