Holen Sie sich die UMFANGREICHSTE Abdeckung für die Einhaltung von MISRA C! Erfahren Sie mehr >>

Tipps und Tricks, um UI-Aufzeichnungswerkzeuge weniger schmerzhaft zu machen

Von Nathan Jakubiak

24. Oktober 2019

9  min lesen

UI-Aufzeichnungstools können frustrierend sein, müssen es aber nicht. Mit einigen schnellen Tipps und Tricks, um die Randfälle weniger schmerzhaft zu machen, können Sie Ihre UI-Testautomatisierung besser skalieren.

Tester verwenden Testautomatisierung, insbesondere UI-Testautomatisierung, um sich wiederholende Testaktionen zu beschleunigen und die manuelle Arbeit darauf zu konzentrieren, neue und interessante Probleme zu finden. Mit der UI-Testautomatisierung können Sie die verschiedenen Pfade definieren, die Sie durch die Anwendung führen möchten, und anstatt dass ein Mensch die Arbeit erledigt, kann die Maschine die Anwendung kontinuierlich und automatisiert validieren.

Der primäre Weg, einen automatisierten Test zu erstellen, besteht darin, Code zu schreiben. Dies kann unglücklich sein, da ein Tester, der weiß, wie man die Anwendung von Hand durchläuft, entweder lernen muss, wie man Code mit einem Framework wie Selenium schreibt, oder mit einem proprietären Tool wie UFT einen automatisierten Workflow erstellt, der den von ihm durchgeführten widerspiegelt Hand. Dies kann schnell zu einer Herausforderung werden, da Code von Natur aus fehleranfällig ist und das Schreiben automatisierter Tests ziemlich ausgefeilte Fähigkeiten erfordern kann.

Um die Herausforderung zu erleichtern, viele Tools (Parasofts UI-Testautomatisierungstool enthalten) enthalten die Fähigkeit zum Aufzeichnen und Wiedergeben eines Web-Szenarios. Diese Tools sind theoretisch großartig, aber ein großes Problem ist, dass die meisten Rekorder in 80% der Fälle nicht das genaue Szenario aufnehmen und wiedergeben können. Dies ist eine unglückliche Realität, aber am Ende des Tunnels leuchtet ein Licht. Hier sind einige der allgemeinen Herausforderungen, denen sich alle Rekorder gegenübersehen, sowie einige Tipps und Tricks, mit denen Sie sie beheben können.

Wenn sich die Webanwendung während der Wiedergabe anders verhält als bei der Aufnahme…

Inkonsistenzen im Verhalten von Webanwendungen sind die größte Herausforderung bei Aufnahme- und Wiedergabetechnologien und können nur schwer zu bewältigen sein. Hier sind einige verschiedene Gründe, aus denen dies auftreten kann, sowie einige Techniken, mit denen Sie die Probleme diagnostizieren und möglicherweise beheben können.

Problem Nr. 1: Die Anwendung wurde in einem bestimmten Zustand aufgezeichnet, obwohl Sie es nicht wussten.

Softwareentwickler verwenden Browser-Cookies, um Sitzungsinformationen für einen bestimmten Benutzer einer Webanwendung zu speichern oder Sitzungen zwischen verwandten Anwendungen zu verfolgen. Cookies können verwendet werden, um Informationen über den Benutzer abzurufen, ohne die Informationen in einem Back-End-System speichern zu müssen. Ein Cookie zeichnet Daten auf, z. B. die Tatsache, dass der Browser des Benutzers zuvor die Webanwendung besucht hat, oder Informationen zur aktuellen Sitzung des Benutzers.

Zu Automatisierungszwecken können vorhandene Cookies leicht ein Problem verursachen. Testautomatisierungs-Frameworks wie Selenium starten den Browser häufig in einem "sauberen" Zustand, in dem alle Cookies entfernt wurden. Wenn Sie einen Test mit vorhandenen Cookies aufgezeichnet haben, verhält sich die Webanwendung während der Wiedergabe anders als bei der Aufzeichnung, und der aufgezeichnete Test schlägt möglicherweise fehl.

Ein Beispiel sind Sitzungsdaten, die in einem Cookie gespeichert sind und es einem Benutzer ermöglichen, zwischen Browsersitzungen in einer Webanwendung angemeldet zu bleiben. Wenn Sie mit der Aufzeichnung beginnen, während Sie bereits angemeldet sind, werden im aufgezeichneten Testfall keine Anmeldeinformationen erfasst. Während der Wiedergabe sind keine Cookies vorhanden, sodass die Anwendung sofort zu einer Anmeldeseite wechselt und der Test fehlschlägt.

Die gleiche Art von Problem tritt auf, wenn während der Wiedergabe Elemente auf der Seite angezeigt werden, die während der Aufnahme nicht angezeigt wurden. Viele Webanwendungen zeigen beim ersten Besuch eines Benutzers eine Benachrichtigung an, z. B. eine GDPR-Benachrichtigung über die Verwendung von Cookies durch die Anwendung oder ein Popup-Div, das eine Sonderangebot-, Verkaufs- oder Newsletter-Anmeldemöglichkeit anzeigt. Die Wiedergabe aufgezeichneter Szenarien schlägt in diesem Fall fehl, da die zusätzlichen Seitenelemente während der Aufzeichnung nicht angezeigt wurden und der Test daher nicht weiß, wie er mit den zusätzlichen Elementen interagieren soll.

Hier erfahren Sie, wie Sie dies weniger schmerzhaft machen können.

Lösung: Aufnahme und Wiedergabe im Inkognito / Private-Modus

Die meisten Browser können so eingestellt werden, dass sie im Inkognito / Private-Modus gestartet werden. In diesem Modus werden Cookies und Profilinformationen entfernt, sodass sich die Webanwendung so verhält, als wäre es Ihr erster Besuch und Sie nicht angemeldet sind. Zeichnen Sie Ihre Testszenarien mit einem Browser auf, der im Inkognito / Private-Modus gestartet wurde. und Sie haben eine saubere Basis für Ihre aufgezeichneten Testszenarien. In Chrome sieht die Einstellung folgendermaßen aus:

Hier ist ein großartiger Artikel Hier wird gezeigt, wie dieser Modus in anderen Browsern als Chrome konfiguriert wird.

Sobald Sie Ihr Testskript erstellt haben, können Sie es normalerweise im normalen Modus wiedergeben lassen. Es gibt jedoch bestimmte Fälle, in denen es von Vorteil sein kann, im inkognito / privaten Modus wiederzugeben. Ein Beispiel hierfür wäre eine Webanwendung, die Ihren aktuellen Standort verwendet, um die Erfahrung auf der Seite anzupassen. Ich habe Fälle gesehen, in denen der aktuelle Ort, der während der Wiedergabe eines Selenium-Tests abgerufen wurde, von dem Ort abweicht, der während der Aufnahme abgerufen wurde (ich bin nicht sicher, warum). Die Wiedergabe im Inkognito / Private-Modus verhindert, dass der Browser Ihren aktuellen Standort abruft, und stabilisiert Ihr Testszenario. In Selenium können Sie die Wiedergabe im Inkognito / Private-Modus anweisen. Schauen Sie sich diese praktischen Links an Chrome und  Firefox.

Lösung: Setzen Sie bestimmte Cookies

Dies kann nützlich sein, wenn bestimmte Cookies vorhanden sein müssen, um sicherzustellen, dass die Wiedergabe mit der Webanwendung in einem bestimmten Status beginnt. Hier ist ein toller Forumbeitrag Dies beschreibt den Prozess zum Erfassen und Setzen bestimmter Cookies bei der Wiedergabe.

Problem Nr. 2: Ändern der Bildschirmgröße

Die moderne Webanwendungsentwicklungspraxis von sich anpassendes Webdesign verursacht Probleme bei der automatisierten Testerstellung. Um eine Webanwendung zu erstellen, die sowohl für Mobilgeräte als auch für Desktops geeignet ist, erstellen Entwickler reaktionsschnelle Anwendungen, die sich je nach Bildschirmgröße ändern. Sie sehen dies, wenn Sie die Größe eines Fensters ändern und sich die Benutzeroberfläche vollständig ändert. Stellen Sie sich vor, was das mit einem automatisierten Test macht!

Wenn Sie Ihren Test in einem maximierten Fenster aufzeichnen und dann in einem Fenster mit halber Größe wiedergeben, können Seitenelemente aufgrund der Unterschiede in der Browsergröße ausgeblendet oder verdeckt werden. Ein ähnlicher Effekt tritt auf, wenn die Auflösung Ihres Wiedergabegeräts anders ist als die Ihres Aufnahmegeräts. In jedem Fall hat dies erhebliche Auswirkungen auf Ihre Testautomatisierung.

Hier erfahren Sie, wie Sie dies weniger schmerzhaft machen können.

Lösung: Maximieren Sie Ihren Browser bei der Wiedergabe

Sie können Selenium-Befehle verwenden, um die Browsergröße zu maximieren:

  • Verwenden Sie die Selenium WebDriver-API (funktioniert in allen von Selenium unterstützten Browsern):
    driver.manage (). window (). maxim ();
  • Fügen Sie diese Option für Chrome hinzu, mit der Sie einen Schritt in Ihrem Test sparen, indem Sie den WebDriver konfigurieren Chrome-Optionen:
    options.addArguments ("startmaximiert")
  • Schauen Sie sich dieses nützliche Tutorial für andere an Browsergrößenbefehle

Durch das Maximieren des Browsers wird sichergestellt, dass die Seite in voller Größe angezeigt wird und Elemente für diese Konfiguration auf der Seite angeordnet sind. Angenommen, Sie haben mit maximaler Bildschirmgröße aufgenommen, sind die Elemente im Allgemeinen zwischen Aufnahme und Wiedergabe konsistent, selbst wenn das Gerät, das die Wiedergabe ausführt, eine andere Auflösung verwendet.

Wenn Tests sporadisch fehlschlagen oder sich aufgrund von Zeitproblemen anders verhalten…

Wenn ich als Mensch eine Webanwendung verwende, suche ich nach bestimmten Elementen und interagiere mit diesen Elementen, wenn sie "bereit" sind. In einem automatisierten Test ist es für die Maschine etwas schwieriger zu wissen, wann Dinge zu tun sind, als wann zu warten ist.

Das automatisierte Testtool führt ein Testszenario in mehreren Schritten aus. Wenn Sie beispielsweise einen Warenkorbtest gegen Amazon ausführen, kann es zu einem Punkt kommen, an dem der nächste Schritt darin besteht, einen Artikel zum Warenkorb hinzuzufügen und dann auf die Schaltfläche "Warenkorb" zu klicken. Das Problem ist, dass die Warenkorbschaltfläche möglicherweise nicht sofort nach dem Hinzufügen des Artikels verfügbar ist und sich das Symbol möglicherweise in einem Moment ändert. Das Testskript muss genau wissen, wie lange es warten muss oder unter welchen Bedingungen es suchen muss, um vorwärts zu kommen. Die Konfiguration im Test, die dies behandelt, wird normalerweise als "Wartebedingungen" bezeichnet. Rekorder haben es sehr schwer zu verstehen, welche Wartebedingungen in den Testskripten erstellt werden müssen. Daher müssen Sie ausgefeilte Wartebedingungen manuell in Ihre Tests einbauen.

Hier erfahren Sie, wie Sie dies weniger schmerzhaft machen können…

Lösung: Verwenden Sie explizite Wartezeiten

Explizite Wartezeiten sind Wartebedingungen, die für ein einzelnes Element festgelegt werden und Selenium WebDriver anweisen, zu warten, bis eine bestimmte Bedingung erfüllt ist, z. B. darauf zu warten, dass ein Element auf der Seite vorhanden oder sichtbar ist. Die Wartebedingung gibt eine maximale Wartezeit an, bis die Bedingung erfüllt ist.

Verwenden Sie explizite Wartezeiten, wenn der Test versucht, ein Element zu finden. Wenn überhaupt keine Wartebedingungen verwendet werden, schlägt der Test fehl, wenn das Element nicht sofort im richtigen Zustand vorhanden ist. Selenium WebDriver unterstützt auch implizite Wartebedingungen, die global für ein gesamtes Testszenario festgelegt und verwendet werden, wenn der Test versucht, ein Element zu finden. Implizite Wartezeiten werden jedoch nicht empfohlen. Siehe die Selenium-Dokumentation zu explizite und implizite Wartezeiten.

Wenn Sie explizite Wartezeiten verwenden, kann Selenium Ausnahmen auslösen, die die Wartebedingung unterbrechen. In diesen Fällen soll die Wartebedingung jedoch tatsächlich fortgesetzt werden. Sie behandeln dies, indem Sie die expliziten Wartezeiten so konfigurieren, dass bestimmte Ausnahmen ignoriert werden. Einige häufige Ausnahmen, die ignoriert werden müssen, sind NoSuchElementException, StaleElementReferenceException und ElementClickInterceptedException.

Hier ist ein gutes Beispiel für ein explizites Warten, bei dem eine dieser Ausnahmen ignoriert wird:

WebDriverWait wait = new WebDriverWait (Treiber, DEFAULT_WAIT_FOR_ELEMENT_TIMEOUT); wait.ignoring (StaleElementReferenceException.class); wait.until (ExpectedConditions.elementToBeClickable (Element);

Wenn Element-Locators aufgrund von Änderungen in nicht verwandten Teilen der Seite unterbrochen werden…

Webanwendungsrekorder versuchen, für jedes Seitenelement, auf das im aufgezeichneten Test verwiesen wird, einen guten Element-Locator zu erstellen. In vielen Fällen sind die aufgezeichneten Locators jedoch nicht ideal. Beispielsweise kann der aufgezeichnete Locator auf dynamische Informationen verweisen, die sich bei jedem Besuch der Seite ändern, oder dazu neigen, zu brechen, wenn nicht verwandte Teile der Seite später geändert werden.

Häufige Beispiele könnten sein:

  • IDs, die sich bei jedem Besuch der Seite ändern, was in Salesforce- und SAP-Anwendungen sehr häufig vorkommt:
    Klicken Sie hier für weitere Informationen
  • Text, der sich je nach dem angemeldeten Benutzer unterscheidet:
    Benutzer abmelden (bob)
  • Positionsbasierte Locators, z. B. ein xpath, der nicht mehr funktioniert, wenn Seitenelemente, auf die durch Segmente im xpath verwiesen wird, später in der Webanwendung verschoben oder anderweitig geändert werden.

Hier erfahren Sie, wie Sie dies weniger schmerzhaft machen können.

Lösung: Erstellen Sie intelligente Locators

Es ist normalerweise ziemlich einfach, Element-Locators zu identifizieren, die dynamische Informationen enthalten. Sobald Sie Ihr aufgezeichnetes Szenario wiedergeben, schlagen diese Locators fehl, da die dynamischen Informationen, von denen sie abhängen, unterschiedlich sind. Um diese Fälle zu behandeln, müssen Sie eindeutig identifizierende Attribute des Seitenelements finden, die Sie im Element-Locator anstelle des aufgezeichneten dynamischen Attributs verwenden können.

Eine Möglichkeit, dies zu tun, besteht darin, manuell in Ihrem Browser zu der Seite zu navigieren, auf der das Element angezeigt wird. Klicken Sie dann mit der rechten Maustaste auf das Element und wählen Sie die Menüoption zum Überprüfen des Elements (in Chrome als Inspect und in Firefox als Inspect Element bezeichnet). Dadurch gelangen Sie zu einer DOM-Struktur, in der Sie den zugrunde liegenden DOM- und HTML-Code für das Element anzeigen können. In dieser Ansicht können Sie andere Attribute identifizieren, anhand derer Sie das Element identifizieren können. Häufige Attribute, nach denen gesucht werden muss, sind "Klasse", "Name", "Titel" und "Alt". Diese können jedoch auch dynamisch sein, und Sie sollten eines oder mehrere auswählen, die das Element eindeutig identifizieren. In einigen Fällen befindet sich in einem übergeordneten Element ein Attribut, das am besten zur eindeutigen Identifizierung des Elements verwendet wird. Daher möchten Sie möglicherweise einen relativen xpath wie den folgenden erstellen:

// div [@ class = 'actionButton'] / button

Ein anderer Ansatz besteht darin, Werkzeuge zu verwenden, mit denen Sie verschiedene Locator-Optionen erhalten, aus denen Sie eine auswählen und bei Bedarf anpassen können. Einige spezielle Tools, die mir in den Sinn kommen, sind SeleniumIDE und TruePath, die beide mehrere verschiedene Locators erstellen, mit denen ein Element identifiziert werden kann. Sie können einen Locator unverändert verwenden oder einen auswählen und an Ihre Bedürfnisse anpassen.

Eine dritte Option ist die Verwendung Parasoft Selenic Empfehlungen für bessere Locators zu generieren, wenn Tests aufgrund schlechter Locators oder zu fehlschlagen selbstheilende kaputte Locators zur Laufzeit. Selenic verwendet historische Daten aus früheren Testausführungen sowie Informationen zum aktuellen Status der Seite, um eine Reihe verschiedener Locators vorzuschlagen, die Sie verwenden können, sowie das Vertrauen in jeden Locator.

Ein paar zusätzliche Tipps

Zusätzlich zu dem, was ich bereits erwähnt habe, gibt es eine Reihe weiterer häufiger Situationen, die beim Erstellen von Testszenarien aus der Aufzeichnung auftreten. Hier sind einige zusätzliche Tipps, um die Verwendung von UI-Aufzeichnungstools weniger schmerzhaft zu machen.

Hover-Aktionen aufzeichnen

Für Aufnahme- und Wiedergabewerkzeuge ist es traditionell schwierig, Seitenelemente zu erfassen, die angezeigt werden, wenn ein Benutzer die Maus über ein anderes Element positioniert. Die Hover-Aktion wird normalerweise nicht aufgezeichnet, aber die Interaktion mit dem angezeigten Element wird aufgezeichnet. Beim Ausführen des Testszenarios wird die Hover-Aktion nicht ausgeführt und das nächste im Testszenario definierte Seitenelement wird nie angezeigt, wodurch der Test fehlschlägt.

Um dies weniger schmerzhaft zu machen, achten Sie bei der Aufnahme darauf, wo bei Hover-Aktionen zusätzliche Elemente angezeigt werden. Wenn Sie einen dieser Fälle sehen, klicken Sie auf das Element, anstatt einfach darüber zu schweben. Dadurch wird eine Klickaktion in Ihrem Test für dieses Seitenelement aufgezeichnet. Wenn Sie möchten, dass der Test schwebt, anstatt auf das Element zu klicken, ändern Sie die Klickaktion im Test nachträglich in eine Schwebemaßnahme. Hier ist eine Artikel um Ihnen dabei zu helfen.

Scrolling

Während der Aufnahme müssen Sie häufig Seitenelemente in die Ansicht scrollen, um mit ihnen interagieren zu können. Aufzeichnungswerkzeuge zeichnen normalerweise keine Bildlaufaktionen auf und müssen dies auch nicht, da Selenium normalerweise das Scrollen für Sie übernimmt. Es gibt jedoch einige Fälle, in denen Selenium das Seitenelement bei der Wiedergabe des Tests nicht in die Ansicht scrollt und der Test fehlschlägt, weil das Element nicht sichtbar ist. Um dies weniger schmerzhaft zu machen, fügen Sie die Bildlaufinteraktionen später manuell mit einem JavaScript-Executor hinzu. Hier ist ein großartiger Artikel das hilft dir dabei.

Einige Aktionen wurden nicht aufgezeichnet

Von Zeit zu Zeit werden Elemente während der Aufnahme einfach nicht aufgenommen. Sehr oft liegt dies daran, dass das UI-Framework die Elemente auf der Seite auf einzigartige Weise erstellt.

Um dies weniger schmerzhaft zu machen, behalten Sie die spezifischen Aktionen im Auge, die Sie während der Aufzeichnung in Ihrer Webanwendung ausführen. Identifizieren Sie nach der Aufnahme in Ihrem Selenium-Skript, wo die Aktion hätte sein sollen, und fügen Sie sie manuell hinzu. Sie können den zu verwendenden Locator identifizieren, indem Sie im Browser zu der Seite navigieren, auf der die Aktion verpasst wurde, und dann eine der zuvor genannten Browsererweiterungen verwenden, um einen Locator zu erfassen und manuell in den Test einzufügen.

Fazit

Das Erstellen von Testszenarien mit UI-Aufzeichnungstools kann schmerzhaft sein, muss es aber nicht sein. Nutzen Sie diese Techniken, um mit Ihrer UI-Testautomatisierungspraxis erfolgreich zu sein. Viel Spaß beim Testen!

Neuer Handlungsaufruf

Von Nathan Jakubiak

Nathan ist Entwicklungsdirektor bei Parasoft. Er und seine Teams entwickeln Produktfunktionen in den Bereichen UI-Tests (Selenic), API-Tests (SOAtest), Service-Virtualisierung (Virtualize) und Unit-Tests (Jtest). Er ist seit 2000 bei Parasoft.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.