Problemstellung: Vergleich der Darstellung von UI Elementen mit Ranorex.
Da es immer wieder vorkommt dass UI Elemente nicht korrekt dargestellt werden hier ein kleiner Codeschnipsel, welcher das Beispiel meines Kollegen (Ranorex Pixelfarbe ermitteln) etwas erweitert. Weiterlesen
Testautomatisierung mit Ranorex
Bei manchen Testfällen ist es notwendig die aktuelle Hintergrundfarbe eines Oberflächenelements zu ermitteln.
WinForms / VB6 / usw. Oberflächen stellen diesen Wert nicht als Eigenschaft bereit, aus diesem Grund muss dieser Wert über einen anderen Weg abgefragt werden.
Der einfachste Weg ist es, ein Screenshot des Elements zu erzeugen und diesen dann mit der GetPixel Methode abfragen.
Ranorex stellt dazu z.B. die Methode
Report.Screenshot(element);
bereit.
Bei dieser Methode wird allerdings das Bild lokal gespeichert, dieses Vorgehen ist etwas fehleranfällig und vor allem unnötig.
Nach einer längerer Suche, bin ich auf die Methode Imaging.CaptureCompressedImage() gestoßen, diese liefert ein Bitmap Objekt zur Laufzeit zurück, ohne dass Bilder lokal gespeichert werden müssen.
Als Parameter kann ein Element vom Typ Ranorex Adapter oder Ranorex Element übergeben werden.
Hier ist eine Beispiels-Methode, mit der vom übergebenen Control die Hintergrundfarben ermittelt werden können.
Natürlich können auch die Pixel verändert bzw. parametrisiert werden.
public static string Color(Adapter ui_control) { Bitmap bmp = Imaging.CaptureCompressedImage(ui_control); Color cElementColor = bmp.GetPixel(2, 2); return cElementColor.Name; }

Begeisterter Entwickler, Trainer und Berater zu allem Themen rund um agile Softwareentwicklung, Softwarequalität und Testautomatisierung.
Gründer und Geschäftsführer der Firma SimplyTest GmbH
Bei der Automatisierung einer Web-Applikation mit Ranorex, bin ich vor kurzem auf folgendes Problem gestoßen:
Die Tabelle besteht aus ca 10 Zeilen und 2 Header Zeilen.
Um einen flexibelen Zugriff zu ermöglichen, setze ich mir den Ranorex Pfad (Ranorex XPath) selbst zusammen.
Der Zugriff sollte in diesem Fall über „Zeilen / Spalten – Nummer“ aus Sicht der Tabellenebene stattfinden.
Das Element setzte sich so zusammen:
element = tablepath + "//tr[" + row + "]/td[" + column + "]";
Alles soweit in Ordnung. Variablen row = 1 und column = 3 gesetzt, Ranorex Pfad wird richtig gefüllt und die td Zelle lässt sich, mit dem generierten Pfad, durch Ranorex Spy finden.
Der Versuch dieses Element per Methode TryFindSingle() während der Testdurchführung zu finden, ist aber gescheitert.
Host.Local.TryFindSingle(element, TimeSpan.FromSeconds(time), out tdElement))
Nach einer kurzen Try/Fail-Phase, habe ich versucht die Zelle über den Ranorex Typ „WebElement“ zu finden.
Dazu wird einfach das letzte Element (td) durch ein * ersetzt und mit TryFindSingle nach Typ „WebElement“ gesucht.
Dadurch kann jedes Element identifiziert werden, das den Suchkriterien entspricht. Als Result kam Tag TH (Head Element) raus.
Also row = 3 (von der Anzahl höher als das letzte TH Element) gesetzt, schon hat der Zugriff über TryFindSingle() funktioniert.
Reicht als Lösung des Problems natürlich nicht aus, die ersten beiden Zeilen sollen schließlich auch angesprochen werden können. Da kommt das Element tbody ins Spiel.
Durch tbody kann hier sichergestellt werden, dass der Zugriff wirklich auf den „Content“ der Tabelle stattfindet. Die Identifikation ist so eindeutig.
Also den Ranorex XPath Ausdruck angepasst, schon funktioniert die TryFindSingle() Suche fehlerfrei:
element = tablepath + "//tbody/tr[" + row + "]/td[" + column + "]";
Man könnte annehmen, dass //tr[1]/td[1] Kombination ausreichend wäre, dem war hier leider nicht so.
Warum dieser Pfad in Ranorex Spy richtig erkannt wird und per TryFindSingle() nicht, kann ich leider nicht sagen, aber durch diesen kleinen „Workaround“ kann an dieser Stelle weitergearbeitet werden.
Im Ranorex Forum gibt es ein ähnliches Problem: Beitrag im Ranorex Forum
Die dort vorgeschlagenen Lösungen, haben bei diesem Problem aber keine Besserung gebracht.

Begeisterter Entwickler, Trainer und Berater zu allem Themen rund um agile Softwareentwicklung, Softwarequalität und Testautomatisierung.
Gründer und Geschäftsführer der Firma SimplyTest GmbH
Um aus Microsoft Test Manager automatisierte Testfälle (Unit Tests, Coded UI Tests, Ranorex, Selenium usw.) ansprechen zu können, müssen diese in Testmethoden „verpackt“ werden. Weiterlesen

Begeisterter Entwickler, Trainer und Berater zu allem Themen rund um agile Softwareentwicklung, Softwarequalität und Testautomatisierung.
Gründer und Geschäftsführer der Firma SimplyTest GmbH
Neueste Beiträge
- Testautomatisierungs-Frameworks
- Testautomatisierung mit Playwright, Gherkin und Cucumber unter Zuhilfenahme der Page-Object Model Methode
- Testautomatisierung mit Cypress 13, Gherkin und Cucumber unter Anwendung des Page-Object-Modells
- Java-Projekt mit Playwright, TestNG und Allure (mithilfe des Page Object Model)
- Java Projekt mit JUnit5, Cucumber7 und Allure
Kategorien
- Allgemeines
- Angular
- Appium
- Karma und Jasmine
- Komponententests
- Last und Performancetests
- Microsoft Test Manager
- News
- Personal
- Playwright
- Protractor
- QuickTest Pro
- Ranorex
- RapidRep
- Selenium
- Software Testing Conferences
- Testautomatisierungsframeworks Tipps und Tutorials
- Testinfrastruktur
- Testreporting
- Testwerkzeuge Tipps und Tutorials
- Unit Tests
- Visual Studio Testframework
- Webautomatisierung
- Weiterbildung
Archive
- Dezember 2024
- Januar 2024
- November 2023
- Oktober 2023
- August 2023
- April 2023
- November 2022
- Oktober 2022
- September 2022
- Juli 2022
- Juni 2022
- Mai 2022
- Januar 2022
- November 2021
- Oktober 2021
- Dezember 2020
- Oktober 2020
- Mai 2020
- Februar 2020
- November 2019
- April 2019
- Januar 2019
- Oktober 2018
- September 2018
- November 2017
- Oktober 2017
- Juni 2017
- Mai 2017
- März 2017
- Januar 2017
- Dezember 2015
- August 2015
- Juli 2015
- Juni 2015
- Mai 2015
- März 2015
- Februar 2015
- Dezember 2014
- Oktober 2014
- September 2014
- August 2014
- Mai 2014
- März 2014
- Februar 2014
- Dezember 2013
- Juli 2013
- Juni 2013
- Januar 2013
- September 2012
- August 2012
- Juli 2012
- Juni 2012
- Mai 2012
- April 2012
- März 2012
- Oktober 2011
- Januar 2011
- November 2010