2017-10-12 1 views
2

Ich kenne die Grundlagen der Optimierung von Robot Framework für Geschwindigkeit bei normalen Anwendungen, aber dies ist keine normale Anwendung. Es geht nicht darum, so schnell wie möglich zu verfahren, denn wenn der Code in einer Angular-Anwendung zu schnell ausgeführt wird, versucht er, auf ein Element zu klicken, das nicht aktiviert oder sichtbar ist, oder auf ein Element, das noch nicht existiert. Zeitprobleme gibt es reichlich, und das Ergebnis ist, dass ich ein Schlüsselwort (unten) verwende, um mein Programm allgemein zu verlangsamen. Das Problem ist, dass es hart codiert ist, und ich suche nach einer "programmatischen" (programmatischen? Ich weiß nicht den genauen Begriff) Lösung, die darauf wartet, dass ein Element anklickbar ist und dann so schnell wie möglich darauf klickt ist.Wie kann ich Robot Framework optimieren, um das Testen einer Angular-Anwendung zu beschleunigen?

Dies ist das Schlüsselwort ich nach jedem Klick verwenden (${SLOW_TIME} eine globale Variable 0.5s gesetzt ist):

Slow Down 
    # EXAMPLE USAGE 
    # Slow Down ${SLOW_TIME} 
    [Arguments]  ${SLOW_TIME} 
    Sleep   ${SLOW_TIME} 

Dies ist meine aktuelle Lösung, die, dass ein Element bereit, um zu überprüfen, geschrieben wurde, ist zu sein für Testüberprüfungszwecke angeklickt, nicht Geschwindigkeit. Es ist nicht vollständig (needs „Ist Clickable“) und verursacht gelegentlich das Programm länger warten, als es muss:

Verify Element Is Ready 
    # EXAMPLE USAGE 
    # Verify Element Is Ready  id=myElementId 
    # Click Element    id=myElementId 
    [Arguments]      ${element} 
    Variable should exist   ${element} 
    Wait until element is visible ${element} 
    Wait until element is enabled ${element} 

Ich bin mir bewusst, dass Robot Framework nicht auf Geschwindigkeit ausgelegt ist, aber für lange Tests I‘ Ich bin es leid, 10 Minuten lang nichts zu tun, bis es fertig ist, nur um zu sehen, dass ich eine falsche [Fail] habe. Wenn die Lösung Python, Javascript oder Java enthält, kann ich das in.

BEARBEITEN: Ich verwende derzeit ExtendedSelenium2Library, aber seine impliziten Wartezeiten funktionieren nicht immer, also wollte ich eine zweite Schicht warten, aber nur so lange wie nötig.

+0

Dies ist nicht wirklich eine Antwort - aber Sie sagten, Sie 10 Minuten warten, wenn zu sehen es schlägt fehl oder passiert. Warum nicht eine kleine "Sandbox" erstellen, die diesen neuen Test erstellt hat, und sehen, ob das funktioniert. Wenn es fehlschlägt, wissen Sie innerhalb weniger Sekunden, und wenn es passiert, können Sie es am Ende der Hauptdatei hinzufügen. Wenn das Sinn macht? Wenn es dann zur Hauptdatei hinzugefügt wird, sollte es korrekt funktionieren, wenn das Setup und die Teardowns korrekt ausgeführt werden. – Goralight

+0

Es macht Sinn und ich mache das normalerweise, aber manchmal verursacht die Integration mit der Hauptdatei selbst Fehler, obwohl es nicht sollte, und das Ausführen des gesamten Tests, um zu sehen, ob es zusammenarbeitet, benötigt so viel Zeit. –

+0

Warum rufen Sie sofort nach dem Warten darauf, dass das Element sichtbar sein sollte? Das scheint überflüssig. –

Antwort

2

Die erste zu erforschende Lösung wäre die Verwendung von Bibliotheken, die speziell für Webanwendungen auf Eckbasis entwickelt wurden, wie AngularJsLibrary oder ExtendedSelenium2Library. Soweit ich weiß, ExtendedSelenium2Library ist derjenige, der am besten (aber vielleicht nicht ohne Probleme, ich denke, es ist ein paar Probleme hat) arbeitet

Das nächste, was zu wissen ist, vorausgesetzt, dass Ihr Element in der Tat sichtbar ist, es bedeutet nicht unbedingt, dass es zum Klicken bereit ist. Es gibt einige Möglichkeiten, um diese Art von Problemen zu umgehen.

Eine Möglichkeit besteht darin, einen Schlaf in Ihr Test-Setup zu setzen, um der Seite einige Zeit zu geben, sich vollständig zu initialisieren. Ich persönlich bin kein Fan dieser Lösung. Diese Lösung funktioniert auch nicht gut für Seiten, die neuen Inhalt dynamisch laden, nachdem das ursprüngliche Dokument initialisiert wurde.

Ein anderer Weg ist Ihr Klick-Element in einem Warte zu wickeln, entweder durch eigene in Python zu schreiben oder, mit so etwas wie Wait Until Keyword Succeeds

+0

Ich + 1'd diese Antwort, weil es nützliche Informationen enthält, aber es beantwortet meine Frage nicht und es bezieht sich auf Dinge, die ich versuche, als Lösungen auslaufen. Ich benutze derzeit eine erweiterte Form von Schlaf, aber ich möchte dies für etwas anpassungsfähiger an einzelne Elemente aus. Außerdem verwende ich bereits ExtendedSelenium2Library (meine schlechte, ich habe vergessen zu erwähnen, dass ich das tat). Ich wusste jedoch nichts von "Warten bis Schlüsselwort Erfolg", also vielen Dank dafür. –

+0

@BrandonOlson hast du die AngularJSLibrary ausprobiert? Wenn ja, was funktioniert bei dir nicht? Nachdem ich mir den Code angeschaut habe, scheint er die AngularJS-spezifische Schlaffunktion zu enthalten, die Sie haben möchten. –

+0

Ich habe nicht. Ist es kompatibel mit ExtendedSelenium2? –

Verwandte Themen