Flutter Driver 选择日期选择器中的日期

6

作为Flutter Driver测试的一部分,我希望通过日期选择器来选择一个日期。然而,我似乎无法确定如何实现这一点?

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

}

屏幕截图:

这里输入图片描述

1个回答

10
我进行了一项样本测试,选择了一个日期选择器中的日期,并且结果很好。以下是我的步骤:
在 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驱动程序测试,首先识别RaisedButton -> 点击它 -> 找到要选择的日期 -> 点击它 -> 点击确定。
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'));

希望这可以帮助您解决问题。

1
请注意,这在时间选择器上效果不佳。点击文本将导致选择另一个时间。Flutter需要在使用这些类型的flutter小部件时使集成测试更加开发人员友好。这很遗憾,因为Flutter上80%的测试速度很快,但最后20%真的很烦人。 - Ced
1
我又来了,显然。由于同一页上可能显示具有相同文本的多个日期,因此DateRangePicker也无法正常工作。 - Ced

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接