Как программно найти кнопку возврата iOS с помощью FlutterDriver

Я использую FlutterDriver для выполнения интеграционного тестирования для пакет Flutter.

Если платформой является Android, в каркасе используется AppBar, а когда используется платформа iOS, используется CupertinoNavigationBar.

При тестировании на Android я могу найти кнопку возврата со следующим кодом

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

Однако это не работает на iOS. Поскольку кнопка создается автоматически, я не могу добавить тег программно. Есть предложения, как выбрать его на iOS? Бонусные баллы за кроссплатформенные решения.

Кроме того, есть ли предложения по имитации нажатия кнопки возврата на устройстве Android (вне приложения)?


person hunter    schedule 10.07.2018    source источник
comment
Вы когда-нибудь задумывались об использовании виджета WillpopScope для захвата при нажатии кнопки «Назад» или стрелки назад?   -  person Arendhal    schedule 12.07.2018
comment
@Arendhal, вот в чем проблема, я не могу заставить FlutterDriver нажать кнопку «Назад», потому что я не могу найти для него подходящий селектор. WillpopScope бесполезен в этом сценарии.   -  person hunter    schedule 12.07.2018


Ответы (4)


К сожалению, принятое решение 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);
person tomrozb    schedule 08.09.2020

я нашел это

 find.byType(CupertinoNavigationBarBackButton); 

я не знаю, работает ли это более или менее эффективно, или он полагается на что-то еще, чтобы работать

person martinseal1987    schedule 01.03.2019

Оказывается, 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

person tomrozb    schedule 25.09.2020

person    schedule
comment
Добро пожаловать в stackoverflow. Пожалуйста, полностью объясните свой ответ. Вам может быть ясно, что одна строка кода не является ответом высокого качества. - person Simon.S.A.; 28.11.2018
comment
Честно говоря, лаконичнее и быть не могло - person hunter; 28.11.2018