Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何使用驱动程序以编程方式查找iOS后退按钮_Flutter_Flutter Test - Fatal编程技术网

Flutter 如何使用驱动程序以编程方式查找iOS后退按钮

Flutter 如何使用驱动程序以编程方式查找iOS后退按钮,flutter,flutter-test,Flutter,Flutter Test,我正在使用来执行包的集成测试 当平台为Android时,脚手架中使用an,当平台为iOS时,使用a 在Android上测试时,我可以找到带有以下代码的后退按钮 await driver.tap(find.byTooltip('Back')); 但是,这在iOS上失败。由于按钮是自动生成的,我无法通过编程方式添加标记。关于如何在iOS上选择它,有什么建议吗?跨平台解决方案的额外积分 还有,有没有关于模拟android设备后退按钮点击(在应用程序之外)的建议?我发现了这个 find.byType

我正在使用来执行包的集成测试

当平台为Android时,脚手架中使用an,当平台为iOS时,使用a

在Android上测试时,我可以找到带有以下代码的后退按钮

await driver.tap(find.byTooltip('Back'));
但是,这在iOS上失败。由于按钮是自动生成的,我无法通过编程方式添加标记。关于如何在iOS上选择它,有什么建议吗?跨平台解决方案的额外积分

还有,有没有关于模拟android设备后退按钮点击(在应用程序之外)的建议?

我发现了这个

 find.byType(CupertinoNavigationBarBackButton); 

我不知道这是否或多或少有性能,或者它是否依赖于其他东西工作

不幸的是,接受的解决方案
等待驱动程序。点击(find.pageBack())
对我不起作用

因此,我将
Key
添加到
AppBar
并访问
BackButton
,如下所示

  final appBar = find.byValueKey("appBarKey");
  await driver.waitFor(appBar);

  final back = find.descendant(
    of: appBar,
    matching: find.byType('BackButton'),
    firstMatchOnly: true,
  );

  await driver.tap(back);

结果表明,
find.pageBack()
仅适用于EN语言环境。对于其他语言,它只是无法找到小部件

您可以像这样获得本地化的
pageBack

SerializableFinder pageBack(String locale) {
  switch (locale) {
    case "es":
      return find.byTooltip("Atrás");
    case "fr":
      return find.byTooltip("Retour");
    case "de":
      return find.byTooltip("Zurück");
    case "it":
      return find.byTooltip("Indietro");
    default:
      return find.pageBack();
  }
}

来源:

你有没有想过在按下后退按钮或后退箭头时使用
WillpopScope
小部件进行捕获?@Arendhal这就是问题所在,我无法让驱动程序点击后退按钮,因为我找不到合适的选择器。WillpopScope在此场景中不可用。欢迎使用stackoverflow。请充分解释你的答案。虽然您可能很清楚,但一行代码并不是高质量的响应。老实说,它再简洁不过了
SerializableFinder pageBack(String locale) {
  switch (locale) {
    case "es":
      return find.byTooltip("Atrás");
    case "fr":
      return find.byTooltip("Retour");
    case "de":
      return find.byTooltip("Zurück");
    case "it":
      return find.byTooltip("Indietro");
    default:
      return find.pageBack();
  }
}