在Flutter测试中关闭对话框的正确方法

时间:2019-11-18 04:49:25

标签: testing flutter

Flutter的WidgetTester具有pageBack()方法,用于弹出路由堆栈。当我使用MaterialPageRoute的fullscreenDialog属性以全屏对话框形式打开页面时,pageBack()方法不起作用(“屏幕上应有一个后退按钮”)。我找不到其他替代方法。

在Flutter测试中取消/关闭对话框的标准方法是什么?

我能够如下关闭对话框:

await tester.tap(find.byIcon(Icons.close));

但是我本来可以做一个pageBack(),如下所示:

await tester.tap(find.byIcon(Icons.arrow_back));

为什么有pageBack()方法却没有等效的对话框关闭方法?

我尚未编写我的Cupertino用户界面。该测试是否需要寻找其他图标?

另请参阅类似的problem I had with selecting the overflow menu

更新:也许pageBack()模拟了按系统后退按钮,而不是后退箭头?在这种情况下,就无需在iOS上模拟行为,无论如何,我必须通过图标找到后退按钮以模拟按下它。

3 个答案:

答案 0 :(得分:0)

我早些时候也遇到过类似的问题,我发现以下适用于我的情况的解决方案。

Navigator.of(context, rootNavigator: true).pop('dialog')

或者您可以这样写,

Navigator.of(context).pop();
Navigator.pop(context);  

您可以在此处查看Flutter Navigation and Routing上的简要文档。

希望如此。祝你有美好的一天。

答案 1 :(得分:0)

您可以有一个对话框,其中包含一个带有文本“X”的按钮,用于弹出对话框。 这个按钮,你可以用

找到
await tester.tap(find.text('X'));

不要忘记用水龙头抽水

await tester.pumpAndSettle();

查看 Flutter 团队用来测试对话框的完整代码示例:source code

答案 2 :(得分:-1)

我认为通过Icons.close查找是合理的。我在我的应用中也做了类似的事情。另一个选择是假设导航栏中按钮的x,y,然后点击屏幕上的该位置。