首页 > 解决方案 > Flutter 集成测试中的平台特定代码

问题描述

我有一个必须打开时间选择器的集成测试,但是每个平台都有不同的时间选择器实现。因此,集成测试的流程必须在 Android 和 iOS 之间有所不同。我该如何实现呢?

我尝试在测试文件中使用这样的 Platform 类,但它不起作用:

//* 5) Choose time
      await driver.tap(find.byValueKey('addRideTimePicker'));
      if (Platform.isAndroid) {
        await driver.tap(find.text("V REDU"));
      }

      if (Platform.isIOS) {
        await driver.tap(find.text("OK"));
      }

任何帮助将不胜感激,在此先感谢

标签: testingflutterintegrationplatform

解决方案


不确定您是如何实现的TimePicker,但通常CupertinoTimePicker是在屏幕上呈现时间选择器的小部件。此外,根据您想在屏幕上的哪个位置显示,使用CupertinoTimePicker,它在两个平台上从 UI 角度呈现均等。例如,您可以显示time pickerinsideContainer或 inside bottomsheet。显示内部时间选择器的示例代码bottomsheet如下:

body: Center(
        child: RaisedButton(
          child: Text('Click'),
          onPressed: () {
            showModalBottomSheet(context: context, builder: (BuildContext builder) {
              return Container(
                child: time()
              );
            });
          },
        )
      ),

Widget time() {
    return CupertinoTimerPicker(
      mode: CupertinoTimerPickerMode.hms,
      minuteInterval: 1,
      secondInterval: 1,
      initialTimerDuration: initialtimer,
      onTimerDurationChanged: (Duration changedtimer) {
        setState(() {
          initialtimer = changedtimer;
        });
      },
    );

  }

上面的代码在两个平台上同样显示了时间选择器,如下所示:

在此处输入图像描述

在此处输入图像描述

这样,您可能不需要Platform像您提到的那样直接在flutter driver测试中使用类,您可以首先识别显示在中的元素,bottomsheet然后相应地点击或执行您需要的操作。

希望这能回答你的问题。


推荐阅读