Flutter Driver select 来自日期选择器的日期

Flutter Driver select date from date picker

我想 select 日期选择器作为 flutter 驱动程序测试的一部分。但是,我似乎无法弄清楚我将如何做到这一点?

我尝试过使用 find.textfind.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();

}

屏幕截图:

我 运行 从日期选择器中选择日期的示例测试,效果很好。以下是我所做的:

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());
  }

下面是 flutter driver 测试,首先识别 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');
      });

测试结果:

在您提供的代码中,您可以尝试以下代码片段,即点击 24 并直接点击 OK 而不是告诉驱动程序等待 OK 按钮找到.

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

希望这能帮助您解决问题。