Драйвер флаттера выбирает дату из списка выбора даты - PullRequest
0 голосов
/ 08 октября 2019

Я хотел бы выбрать средство выбора даты через дату как часть теста на флаттер. тем не менее, я не могу понять, как именно я это сделаю?

Я пытался использовать find.text и find.bySemanticsLabel, и пытался, но пока не повезло.

мой код:

Future<void> executeStep() async {
  await FlutterDriverUtils.waitForFlutter(world.driver);
  NewOrderForm newOrderForm = NewOrderForm(world.driver);
  await newOrderForm.setFieldKontrak();
  //Open Date Picker
  await newOrderForm.setDateKontrak();
  //Select date 24
  await driver.waitFor(find.bySemanticsLabel('24'));
  await driver.tap(find.text('24'),timeout: Duration(seconds: 15));
  await driver.waitFor(find.text('OK'));
  await driver.tap(find.text('OK'));
  await newOrderForm.setProyekField();

}

Снимок экрана:

enter image description here

1 Ответ

1 голос
/ 11 октября 2019

Я провел пробный тест, который выбирает дату из DatePicker, и он работал хорошо. Ниже я сделал следующее:

main.dart имеет простой RaisedButton, при нажатии которого открывается DatePicker:

return Scaffold(
      body: Center(
        child: RaisedButton(
          onPressed: () {
            _showDatePicker();
          },
          child: Text('Click')
        )
      )
    );

void _showDatePicker() async {
    DateTime picked = await showDatePicker(
        context: context,
        initialDate: new DateTime.now(),
        firstDate: new DateTime(2019),
        lastDate: new DateTime(2021)
    );
    if(picked != null) setState(() => _value = picked.toString());
  }

Ниже приведен тест драйвера флаттера, который сначала идентифицирует RaisedButton -> нажмите на нее -> находит дату, которую нужно выбрать -> нажмите на нее -> нажмите OK

test('datepicker test', () async {
        final dateButton = find.text('Click');
        await driver.waitFor(dateButton);
        await driver.tap(dateButton);
        await driver.tap(find.text('15'));
        await driver.tap(find.text('OK'));
        print('October 15 selected and tapped OK');
      });

Результат теста:

enter image description here

В коде, который вы указали, вы можете попробовать ниже фрагмент, то есть, нажмите на 24 и непосредственно нажмите на OK вместо того, чтобы сказать водителю ждать, пока кнопка OK не найдет.

await driver.tap(find.text('24'));
  await driver.tap(find.text('OK'));

Надеюсь, это поможет вам решить проблему.

...