2016-04-18 13 views
0

Ich verwende Appium, um eine native iOS- und Android-App mit Java zu automatisieren. Die App verfügt über einen Login/Logout-Prozess, den ich am Anfang/Ende jedes Testfalls ausführe, und während ich in der App eingeloggt bin, gibt es neben allen Aktionen, die ich dort machen kann, viele zufällige Pop-Ups für Bewerten Sie uns "System, aktivieren Sie Benachrichtigungen, Standorte Nutzung und vieles mehr. Das Problem ist, dass einige dieser Pop-ups auch zu zufälligen Zeiten in verschiedenen Intervallen codiert sind. Was ich jetzt mache, wartet darauf, sie zu Beginn jedes einzelnen Falls nach dem Login zu schließen (Das kostet viel Zeit Zeit für alle Pop-ups zu erscheinen).Umgang mit Popups mit Appium in einer nativen App

Gibt es eine Möglichkeit, während des ganzen Falls darauf zu warten, dass die Popup (s) angezeigt und dann während der Ausführung der anderen Schritte geschlossen werden, oder die einzige Problemumgehung ist, alle Popups vor der Ausführung des restlichen Falls zu schließen ?

Antwort

1

Wir hatten ähnliche Probleme und die beste Lösung, die wir bisher gefunden haben, besteht darin, die Pop-ups und Tests so zu implementieren, dass das Verhalten der App in der Testsituation immer konsistent ist. Obwohl es keine eingebaute Unterstützung dafür gibt, haben wir erfolgreich die folgenden Variationen verwendet. Dies ist in Python/Pseudocode, aber ich denke nicht, dass es in Java viel anders sein sollte.

In diesem Fall behandeln Sie das Element, das Sie wünschen, es sei denn, es wird nicht gefunden, in diesem Fall nehmen wir an, dass es Pop-ups darüber gibt. Wir behandeln zuerst die Pop-ups und sollten schließlich das Element finden, das wir brauchen.

def handle_element_x(self, timeout): 
    """handles element x unless there are popups overlapping it. 
    """ 
    while elapsed_time < timeout: 
     if appium._is_element_present(element_x_locator): 
      // handle element x and return 
      return True 
     if appium._is_element_present(popup1_locator): 
      // handle popup1 
      continue 
     if appium._is_element_present(popup2_locator): 
      // handle popup2 
      continue 
     ... 
     time.sleep(1) 

Natürlich müssen Sie dies mit allen Elementen implementieren, die mit einem Pop-up überlappt werden können.

+0

danke für den Vorschlag. Dies wird jedoch die Warnungen verwerfen und erst dann mit der restlichen Ausführung des Falles fortfahren. Ich suche nach einer Lösung, um zu warten, bis die Warnungen angezeigt werden, und sie dann zu VERLASSEN, während der Test ausgeführt wird. – Arokh

+0

Wenn Sie den Code ein wenig ändern (Timeout und for-Schleife entfernen) und alle ähnlichen Checks implementieren, können Sie fortfahren, aber auch Popups schließen, wenn sie angezeigt werden. Ich werde meine Antwort bearbeiten, um zu zeigen, was ich meine. – diidu

+0

for Loop war nach allem nützlich;) – diidu