如何使用FlutterDriver以编程方式找到iOS后退按钮

时间:2018-07-10 04:17:01

标签: flutter flutter-test

我正在使用FlutterDriverFlutter软件包执行集成测试。

当平台为Android时,支架中使用AppBar,而当平台为iOS时,使用CupertinoNavigationBar

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

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

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

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

不幸的是,接受的解决方案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);

答案 2 :(得分:1)

结果证明,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

答案 3 :(得分:0)

我找到了

 find.byType(CupertinoNavigationBarBackButton); 

我不知道这是或多或少的性能,还是要依靠其他方式来工作