Man kann sich bei Windows anmelden, ohne Benutzer&Passwort einzugeben: Sysinternals Autologon.
Im Zusammenhang mit der Verwendung von VMs ergibt sich der praktische Nutzen daraus, dass eine Session mit (virtuellem) Bildschirm beim Rechnerneustart automatisch mitstartet, die für das Funktionieren von Ranorex-Tests notwendig ist.
Es scheint so zu sein, dass ein Zugriff per RDP trotzdem noch die Eingabe eines Passworts erforderlich macht, was für den Schutz des Computers ausreichen dürfte. Jedenfalls bekam ich bei einem RDP-Verbindungsversuche folgenden Hinweis: To log on to this remote computer, you must be granted the Allow logon through Terminal Services right. Ich glaube, wer Mitglied in der Usergroup Remote Desktop Users ist, der hat dieses Recht automatisch. Das Pendant zum Vor-dem-Computer-Sitzen ist bei VMs der Zugriff via Console, der tatsächlich dann auch ohne die Eingabe eines Passworts auskommt. Bei einem physischen Computer erscheint trotz enableten Autologon natürlich noch eine möglicherweise eingerichtete McAfee Endpoint Encryption Passworteingabe.
Der batch-mode vom Autologon.exe funktioniert zwar grundsätzlich – ist aber irgendwie nicht ganz zuverlässig. So konnte ich das autologon im batch-mode erfolgreich laufen lassen, als es bei mir auf dem Computer lag. Es wurde jedoch keine Erfolgsmeldung ausgegeben und so habe ich erst durch einen Restart herausgefunden, dass es wirklich geklappt hat. Von einem Netzwerkordner konnte ich das autologon nicht im batch-mode ausführen (was an den Sicherheitseinstellungen lag). Der entsprechende Versuch wurde jedoch mit der unpassenden und irreführenden Fehlermeldung Login failure: unknown user name or bad password. quittiert – die Credentials waren nachweislich korrekt – ich hatte sie vom vorigen „lokalen“ Versuch einfach rüberkopiert. So richtig dokumentiert ist der batch-mode leider auch nicht.
Auf vielen Computern Autologon aktivieren
Eine bulk-action mit PowerShell konnte ich noch nicht realisieren, weil ich es noch nicht geschafft habe, Dateien von einem Netzwerk-share zu kopieren – siehe.
Am effektivsten ist also noch Folgendes: autologon auf share ablegen und dann folgendes script auf jedem Rechner per cmd ausführen:
Ich habe visionapp Remote Desktop 2011 auf meinem Laptop installiert. Damit möchte ich mich per VNC auf eine VM Windows 7 Professional verbinden. Nach dem Neustart kommt der blaue Begrüßungs-Bildschirm mit der Aufforderung Drücke Strg + Alt + Entf. Wenn ich dem auf meiner Tastatur nachkomme, dann geht der Befehl natürlich an meinen Laptop selbst und kommt bei der VM nicht an. In der Tool-Leiste von visionapp findet sich ein Dropdown-Box VNC. Die dortige Funktion Strg + Alt + Entf senden tut nicht, was sie sollte.
Lösung
Vermutlich ist das ein Bug einer alten Version von visionapp und ist bei den neueren schon längst ausgebaut.
Im Prinzip geht es immer um Attribute und ihre Werte – das ist für die alltägliche Testautomatisierungs-Praxis das Wesentliche. Die Bedeutung des obigen Schaubilds liegt eher im theoretischen Bereich und zeigt, woher Ranorex Spy die Attribute bekommt und wie es diese zusammenfasst.
Technology bezieht sich wohl auf die Technologie mit der die Application Under Test umgesetzt ist, also z.B. Web, Office, Java, SAP, usw. Jedenfalls die Technologie aus Sicht von Ranorex. Im Desktop-Bereich können das mehrere gleichzeitig sein – im Web-Bereich hingegen ist das ganz einfach: es geht immer um die Webtechnologie, also um die Attribute des Bereichs Web Plugin.
Categories (im Bereich Capabilities) sind die blauen Überschriften:
Tatsächlich sind es 18 (im Schaubild ist die Rede von 15+) und werden alle mit Plugin postfixt und meint die Technologie im Sinne Ranorex. Im Ranorex attributes overview ist zusätzlich noch ganz oben die Kategorie build in roles aufgelistet, wobei m.E. die Spaltenüberschrift hier nicht Capabilities sondern eben Roles lauten müsste.
Beispiel: Google-Logo
Ich habe das Google-Logo mit dem Ranorex Spy getrackt – Folgendes steht nun im Advanced-Tab des Ranorex Spy:
Im Gegensatz zu einer Desktopanwendung hat das Element schon mal die Role Unknown, weshalb auch keine Rollen-spezifische Überschrift im AdvancedTab zu sehen ist.
Als PreferedCapability ist ImgTag angezeigt, wobei das wohl dem Primary Adapter entspricht, der ganz links oben neben dem vorgeschlagenen Namen steht.
Die Attribute im Ranorex Attribute Overview stimmen mit denen im Advanced Tab von Ranorex Spy exakt überein.
Ranorex Spy in action
Am besten macht man sich den Unterschied der ganzen Begrifflichkeiten anhand des Ranorex Spy -> Track -> Hovern über ein bestimmtes Element und studieren des kurz später auftauchenden Tooltips klar:
Im Header:
Icon für den nachfolgende Primary Adapter.
Primary Adapter: die Haupt-Capability
Von Ranorex vorgeschlagener Name in einfachen Anführungszeichen
Role spezifiziert, welche Funktion ein Steuerelement (unabhängig von der verwendeten Technologie) hat, also z.B. handelt es sich um einen Button oder um ein Textfeld (egal ob in einer Webanwendung oder in einer ASP.net-Anwendung). Für die Web-basierte Testautomatisierung hat die Role keine Bedeutung, da Ranorex Spy dort die UI-Elemente ohnehin immer als Unknown kennzeichnet.
Caps: Capabilities. Im Web ist das immer das WebElement und eine spezifischere Capability (also z.B. imgtag). Die spezifischere Capability wird im Header immer als primary adapter angezeigt.
Location: wo beginnt das Element relativ zum Viewport in Pixel
Size: wie groß ist das Element in Pixel
Attributes: alle Begriffe in blauer Schrift. Kennzeichnet die kleinsten Einheiten in diesem Begriffsdschungel, nämlich z.B. Visible oder InnerText
Beispiel Keepass-Button OK
Ich habe den OK-Button beim Windows New Entry in Keepass getracked.
Die Überschriften Button, Control und NativeWindow im Advanced-Tab des Ranorex Spy:
… finden sich im Ranorex attributes overview wieder:
Adapter & Element
Adapter
Capabilities (z.B. ImageTag) sind im Ranorex-Code als Adapter implementiert:
Auch Roles (z.B. Button) sind in Ranorex als Adapter implementiert:
Click() ist beispielsweise eine Methode des Adapters.
Der generierte Ranorex-Code leitet den Adapter aus dem entsprechenden Repoitem her:
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
WebElement ist eine Subklasse von Adapter und hat z.B. die zusätzliche Methode getInnerHTML():
Element
Element im allgemeinen Sinne
Bestandteil einer UI.
Element (im Sinne der Ranorex-library)
Dieser Post fasst die aktuellen(?) Unklarheiten gut zusammen – ein user postete einen interessanten Erklärungsversuch.
Hier ein Post, der das Verhältnis von Element und Adapter skizzieren dürfte.
RepoItem, RepoItemInfo & Adapter
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.
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();
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: