使用小部件测试在滑块中选择值

Selecting value in Slider with Widget Test

我有一个包含一系列滑块的屏幕,用户可以在其中 select 如果他们 agree/disagree 有东西,例如:

Slider(
  key: Key(questionId),
  min: 0,
  max: 5,
  divisions: 5,
  value: _value,
  onChanged: (value) {
     setState(() {
       _value = value;
     });
  },
),

我目前正在使用 testWidgets 实施 UI 测试,其中用户 select 在滑块中设置多个值,然后在用户单击按钮时存储,并且我希望能够 select 一个值,例如,将滑块滑动到值“2”。

我该怎么做?

我唯一的想法是将 tapAt 与值在滑块中的确切像素坐标一起使用,但看起来非常复杂。

为了澄清,我询问的是 Widget 测试,如下所述:https://flutter.dev/docs/cookbook/testing/widget/introduction

它可能不再需要,但由于这是我自己寻找答案时发现的唯一相关问题,这是我的解决方案:

WidgetTester 具有函数 'drag/dragFrom/dragUntilVisible':

await tester.drag(find.byType(Slider), Offset(100, 0));

这将拖动滑块 :)

我构建了一个可拖动到所需值的扩展程序。希望这对任何人都有帮助 ;)

extension SlideTo on WidgetTester {
  Future<void> slideToValue(Finder slider, double value,
      {double paddingOffset = 24.0}) async {
    final zeroPoint = this.getTopLeft(slider) +
        Offset(paddingOffset, this.getSize(slider).height / 2);
    final totalWidth = this.getSize(slider).width - (2 * paddingOffset);
    final calculatdOffset = value * (totalWidth / 100);
    await this.dragFrom(zeroPoint, Offset(calculatdOffset, 0));
  }
}