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

How to find iOS back button programatically with FlutterDriver

我正在使用 FlutterDriver to perform integration testing for a Flutter 包。

当平台为Android时,使用AppBar is used in the scaffold, and when the platform is iOS, a CupertinoNavigationBar

在 Android 上测试时,我可以使用以下代码找到后退按钮

await driver.tap(find.byTooltip('Back'));

然而这在 iOS 上失败了。由于按钮是自动生成的,因此我无法以编程方式添加标签。关于如何在 iOS 上 select 有什么建议吗?跨平台解决方案的奖励积分。

此外,对于模拟 android 设备后退按钮点击(在应用程序外部)有什么建议吗?

await driver.tap(find.pageBack());

我找到了这个

 find.byType(CupertinoNavigationBarBackButton); 

我不知道这是或多或少的性能,还是它依赖于其他东西来工作

不幸的是,公认的解决方案 await driver.tap(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();
  }
}

来源:https://medium.com/@eduard.carreras/flutter-driver-find-pageback-not-localized-56ca092fb026