Специфичный для платформы код в интеграционных тестах Flutter - PullRequest
1 голос
/ 06 ноября 2019

У меня есть интеграционный тест, который должен открыть средство выбора времени, но каждая платформа имеет свою реализацию средства выбора времени. Поэтому процесс тестирования интеграции должен быть разным для 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"));
      }

Любая помощь будет высоко ценится, заранее спасибо

1 Ответ

0 голосов
/ 06 ноября 2019

Не знаю, как вы реализовали TimePicker, но обычно CupertinoTimePicker - это виджет, который отображает время на экране. Кроме того, в зависимости от того, где вы хотите показать его на экране, используя CupertinoTimePicker, он одинаково визуализируется с точки зрения пользовательского интерфейса на обеих платформах. Например, вы можете показать time picker внутри Container или внутри 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;
        });
      },
    );

  }

Выше кода показывает время выбора одинаково на обеих платформах, как показано ниже:

enter image description here

enter image description here

Таким образом, вам может не потребоваться использовать класс Platform, как вы упомянули, и непосредственно в тесте flutter driver вы можете сначалаопределите элементы, отображаемые в bottomsheet, и, соответственно, нажмите или выполните необходимые действия.

Надеюсь, что это ответ на ваш вопрос.

...