问题:运行小部件测试 (flutter_test) 时,什么控制“渲染树”的边界?
我问是因为我在非常基本的按钮上遇到错误,它无法找到小部件,因为它的垂直偏移超出了“渲染树”的边界,似乎固定在 800x600。
我收到消息:
警告:使用 finder 调用 tap()“恰好是一个带有文本“更多信息”的小部件(忽略后台小部件):Text(“更多信息”,依赖项:[MediaQuery,DefaultTextStyle])”派生了一个偏移量(偏移(400.0, 641.8) ) 不会在指定的小部件上进行测试。也许小部件实际上不在屏幕上,或者另一个小部件正在遮挡它,或者小部件无法接收指针事件。事实上,Offset(400.0, 641.8) 超出了渲染树根的边界,Size(800.0, 600.0)。 finder对应这个RenderBox:RenderParagraph#1b6b1relayoutBoundary=up27那个offset的hit test结果是:HitTestResult(HitTestEntry#b18dd(RenderView#408c3), HitTestEntry#a2393()) #0 WidgetController._getElementPoint (package:flutter_test/ /controller.dart:953:25) #1 WidgetController.getCenter (package:flutter_test/src/controller.dart:836:12) #2 WidgetController.tap (package:flutter_test/src/controller.dart:271:18) # 3 主要。(file:///Users/tommy/Repos/surveyapp/survey/test/widget_test.dart:99:18)
该错误消息中渲染树的大小为 800 x 600。(不确定如何设置或为什么。我很好奇它正好是 800x600?所以,它被设置在某个地方。是因为我有一个web 项目,并且在运行测试时出于某种原因默认为该大小?)。在测试中找不到偏移高度超过 600 的任何小部件。该屏幕在 iOS 模拟器和 Flutter web 下的 Chrome 上运行良好。当您使用 devtools、widget Inspector 时,没有任何布局问题。它只是一个带有祖先列、填充、中心、安全区域和脚手架的按钮,作为简单的有状态小部件页面的一部分。
(我在 Flutter 2.12 或更高版本上发生过这种情况。)
Tah*_*iel 21
在测试过程中点击按钮时我遇到了同样的问题。
我不知道如何更改 800x600 大小,但我设法找到一种滚动到按钮的方法,感谢这个答案/sf/answers/4759352811/
这是最终的代码:
final Finder buttonToTap = find.byKey(const Key('keyOfTheButton'));
await tester.dragUntilVisible(
buttonToTap, // what you want to find
find.byType(SingleChildScrollView), // widget you want to scroll
const Offset(0, 50), // delta to move
);
await tester.tap(buttonToTap);
await tester.pump();
Run Code Online (Sandbox Code Playgroud)
小智 11
通过使用以下代码片段为我解决了这个问题
await tester.ensureVisible(find.byKey(Key(key)));
await tester.pumpAndSettle();
Run Code Online (Sandbox Code Playgroud)
注意:这个答案并没有回答有关 800x600 原因的问题,而是解决其他 googlers 的问题。
我不知道为什么会发生这种情况(我最好的猜测是在测试中也模拟了一些启动动画),但是添加await tester.pumpAndSettle()似乎可以解决问题(强化了这是由某些动画引起的假设)。
不幸的是,我在 Flutter GitHub 存储库中找不到有关该主题的任何问题。
总而言之,我认为问题不是由 800x600 限制引起的,而是由其他原因引起的。
| 归档时间: |
|
| 查看次数: |
755 次 |
| 最近记录: |