使用小部件测试在滑块中选择值
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));
}
}
我有一个包含一系列滑块的屏幕,用户可以在其中 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));
}
}