Ranorex Entitäten: Adapter/Role & Element, RepoItem & RepoItemInfo, Characteristics & Capabilities

Adapter (heute: Role)

Ranorex scheint adapter in role umbenannt zu haben. Jedenfalls wird Form in dieser offiziellen pdf-docu (V10.1) noch als  primary adapter bezeichnet und in dieser offiziellen html-docu (Stand 17.8.2022) als role.

Der Adapter ist eine zentrale Entität in Ranorex. Click() ist beispielsweise eine Methode des Adapters.

Darüber hinaus zählt der Adapter zahlreiche Properties – die Auswahl der wichtigsten:

  • Screenrectangle (Advanced -> Layout) beschreibt X- und Y-Position (ausgehend von der linken oberen Monitorecke) sowie Breite und Höhe. Exakt diese Daten in genau dieser Reihenfolge werden auch optisch unter dem Titel herausgehoben:

  • Flavorname (Advanced -> General) gibt einen Hinweis auf das dahinterliegende Gebilde. Werte von Elementen einer Desktop-Anwendung sind bsps.weise msaa, winforms, win32, chromeweb
  • Location (Advanced -> Dynamic) gibt die X- und Y-Position (ausgehend von der linken oberen Ecke des Parent-Elements) an. (Achtung: Es gibt in Ranorex auch irritierenderweise eine Klasse Ranorex.Location, deren x- und y-Werte jedoch die Distanz zur oberen linken Ecke des Elements selbst darstellt.)

MyRepoObject.Element.Location.X

Element

Dieser Post fasst die aktuellen(?) Unklarheiten gut zusammen.

Hier ein Post, der das Verhältnis von Element und Adapter skizzieren dürfte.

RepoItem

RepoItem: am 17.8.2022 habe ich bei einem <i>-Element die Beobachtung gemacht, dass Ranorex, wenn es mit dem entsprechenden RanoreXPath eigentlich mehrere <i>-Elemente auf der Webseite selektieren würde, es nur das erste nahm.

RepoItemInfo

RepoItemInfo: What’s a RepoItemInfo and how do you use it? – Ranorex Forum

Eine in einer Actiontable erzeugte Validierungsaction, nutzt im dahinterliegenden Code nicht das repoItem, sondern das repoItemInfo, z.B.

Validate.Exists(repo.StartPage.SuchfeldInfo);

Ein in einer Actiontable erzeugtes Wait, nutzt im dahinterliegenden Code ebenfalls das repoItemInfo, z.B.

repo.StartPage.SuchfeldInfo.WaitForExists(5000);
//oder:
repo.StartPage.SuchfeldInfo.WaitForAttributeEqual(5000, "Id", "yourValue");

Ein repoItem hat gar keine WaitForExists-Methode:

und auch keine sonstige Wait-Methode …

Wie komme ich von RepoItemInfo zu Adapter

Es gilt jedoch zu beachten, dass FindAdapter<WebElement> immer einem spezifischen Adapter vorzuziehen ist, weil bei der Änderung eines Elements von beispielsweise <div> auf <td> folgende Fehlermeldung kommt:

Item myRepository.okButton is no DivTag.
The element does not support the required capability ‘divtag’.

Wie komme ich von RepoItem zu Adapter

var okButtonAdapter = myrepo.okButton; // hier wird der Adapter erzeugt, der im repository item gespeichert ist, beispielsweise WebElement
okButtonAdapter.Click();

Wie komme ich von Adapter zu RepoItemInfo

aktuell gar nicht (Quelle)

mit Hilfe von Adapter.GetPath() bekommt man zwar einen RanoreXPath, dieser ist jedoch nicht der ursprünglich vom Testautomatisierer eingegebene, sondern ein “künstlich” generierter:

string RxPath = webElement.Element.GetPath(PathBuildMode.Default);

Rolle/Technology -> Charcteristics/Capabilities -> Attribute

Offizielle Doku wobei ich denke, dass das Schaubild etwas irreführend ist:

Unter dem Role-Kasten sollte der Technology-Kasten stehen und im Capabilities-Kasten entsprechend die Capabilities aufgelistet sein.