Handbuch
Version 8.0.1 |
SmartIDs ermöglichen eine einfache und flexible Wiedererkennung von Komponenten direkt auf Basis der ID, ohne dass die Wiedererkennungskriterien an anderer Stelle abgespeichert werden. Dies verschlankt den aufgenommenen Komponentenbaum in "Fenster und Komponenten" deutlich. Bei ausschließlicher Verwendung von SmartIDs wird der Komponentenbaum überhaupt nicht mehr benötigt. Es ist allerdings zu berücksichtigen, dass diese Flexibilität und Vereinfachung ihren Preis hat und - je nach Situation - die Performanz und Wartbarkeit beeinträchtigen kann.
SmartIDs verwenden die gleichen Wiedererkennungsmerkmale, die bei der klassischen Komponentenerkennung in den 'Komponente'-Knoten abgespeichert werden. Der Unterschied ist, dass aus den möglichen Wiedererkennungsmerkmalen eines oder mehrere explizit ausgewählt und an Stelle der Referenz zur aufgenommenen 'Komponente' eingetragen werden. Zum Beispiel direkt im Attribut 'QF-Test ID der Komponente' eines Mausklick-Knotens.
Ziel der SmartIDs ist eine Verschlankung des Komponentenbaums - so weit sinnvoll, aber nicht um jeden Preis. Einfaches soll möglichst einfach genutzt werden können, aber wenn es schwierig ist, eine Komponente anzusprechen, sind 'Komponente' Knoten besser geeignet. Die Themen "Eindeutigkeit" und "Performanz" können alternativ über das Scope-Konzept adressiert werden, siehe Geltungsbereich (Scope).
Die SmartID wird durch ein führendes #
gekennzeichnet.
Die einfachste Version der SmartID ist entweder der Name oder die
Beschriftung der Komponente mit einem vorangestellten #
.
Zum Beispiel #username
, um eine Komponente mit dem Namen
username
anzusprechen oder #Anwendername
,
wenn Anwendername
die Beschriftung des Feldes ist.
Typischerweise besteht die SmartID jedoch aus #
,
gefolgt von der Klasse der Komponente, die mit einem Doppelpunkt
abgeschlossen wird. Bei Beschriftungen folgt nun ein optionaler
Kennzeichner mit Gleichheitszeichen. Dahinter steht
der Wert der SmartID, zum Beispiel #TextField:left=Anwendername
.
Der Kennzeichner gibt an, worauf sich der SmartID-Wert bezieht. Bei der Wiedergabe ohne Kennzeichner greift die Option Priorität bei Aufnahme von SmartIDs mit Kennzeichner. Es stehen folgende Kennzeichner zur Verfügung:
name
: Name, siehe auch
SmartID-Syntax für 'Name'. Dieser Kennzeichner wird normalerweise nicht aufgenommen.
feature
: Merkmal, siehe auch
SmartID-Syntax für 'Merkmal'. Dieser Kennzeichner wird normalerweise nicht aufgenommen.
label
: Merkmal ist eine Sonderform, die feature
oder eine der qfs:label*
-Varianten für die Übereinstimmung akzeptiert. Dieser Kennzeichner wird normalerweise
nicht aufgenommen.
qlabel
für die
Beste Beschriftung. Siehe auch
SmartID-Syntax für 'Weitere Merkmale'.
Diese Kennzeichner werden immer aufgenommen.
Die Angabe der Klasse und des Kennzeichners dienen der besseren
Lesbarkeit und der Performanz. Ob die Klasse aufgenommen wird,
kann über die Option Für SmartID immer die Klasse aufnehmen
gesteuert werden. Dies gilt jedoch nur für Komponenten, deren
Klasse zu den Generische Klassen gehört.
Für andere Klassen muss der Klassenname auf jeden Fall spezifiziert
werden, zum Beispiel #DIV:compid
.
Die SmartID wird im Attribut 'QF-Test ID der Komponente' eingetragen, zum Beispiel im Attribut 'QF-Test ID der Komponente' von Event- oder Check-Knoten. Sie kann genauso wie die 'QF-Test ID der Komponente' in Variablen gespeichert, in Parametern übergeben oder in Skripten genutzt werden. Bei komplexen Komponenten wie Tabellen, Listen oder Bäumen kann die SmartID ebenfalls die 'QF-Test ID der Komponente' ersetzen. Der Index, der das Unterelement bezeichnet, bleibt unverändert. Im Anschluss an eine SmartID kann eine darin enthaltene Komponente entweder über eine weitere SmartID oder mittels XPath (Adressierung mit XPath und/oder CSS-Selektoren) adressiert werden.
SmartID-spezifische Sonderzeichen und Trenner für Unterelemente (":", "@", "&" und "%", siehe
auch Abschnitt 47.4) müssen mit einem
vorangestellten \
geschützt werden, wenn sie
im Wert der SmartID oder in der Klasse vorkommen.
SmartIDs können für alle Client-Technologien genutzt werden.
Wie bei SmartIDs ist zu berücksichtigen, dass die Aktualisierung nicht so komfortabel ist wie bei 'Komponente'-Knoten Knoten. Allerdings steht in QF-Test eine mächtige "Suchen und Ersetzen" Funktionalität zur Verfügung, um SmartIDs suiteübergreifend anzupassen.
Hinweis Für eine kleine Einführung in SmartID lesen Sie auch unseren Blogartikel SmartID - Die nächste Generation der Komponentenerkennung .
Die Anwendungsbereiche sind die gleichen, in denen bisher Generische Komponenten zum Einsatz kamen. SmartIDs ersetzen generische Komponenten weitgehend und sind einfacher zu nutzen als diese.
label,name
.
Die Klasse wird in der SmartID
direkt nach dem #
angegeben und mit einem :
abgeschlossen,
zum Beispiel #Button:
.
Für Komponentenklassen, mit denen der Anwender typischerweise interagiert,
muss die Klasse nicht explizit in der SmartID angegeben werden.
Bei diesen Klassen kann die SmartID auch einfach nur den
Komponentenbezeichner oder die Komponentenbeschriftung
(entweder das Merkmal oder eine der
qfs:label*
-Varianten)
umfassen, zum Beispiel #btnOK
, wenn der Name des Buttons
"btnOK" ist, oder #Speichern
, wenn die Beschriftung
des Buttons "Speichern" lautet. Dies macht eine SmartID einfacher in der Handhabung,
allerdings in gewissem Maß auf Kosten der Performance, da ohne Angabe der Klasse mehr Kandidaten
auf Übereinstimmung mit der SmartID geprüft werden müssen.
Auf Grund der besseren Performance wird bei der Aufnahme einer SmartID standardmäßig die Klasse mit aufgenommen. Falls dies nicht erwünscht ist, können Sie dies über die Option Für SmartID immer die Klasse aufnehmen deaktivieren.
Im Kapitel 60 ist in den Klasseneigenschaften
vermerkt, wenn die Klasse in der SmartID angegeben werden muss.
Alle Klassen, die nicht in dem Kapitel genannt werden, müssen immer
in der SmartID spezifiziert werden.
Beispiel: #DIV:addresses
wobei "addresses" hier der Name des DIV-Elements in einer Web-Anwendungen ist.
Panels sind insofern ein Sonderfall, da sich Panels mit Beschriftung
für geschachtelte SmartIDs (siehe Abschnitt 5.6.7)
oder Scopes (siehe Abschnitt 5.7) anbieten.
Daher gehört der Klassentyp Panel:TitledPanel
zu den SmartID-Klassen
und muss nicht separat angegeben werden.
Wenn Sie zusätzlich zur generischen Klasse einen
vordefinierten Klassentyp verwenden,
können Sie diese Kombination wie gewohnt schreiben, zum Beispiel
#Button:ComboBoxButton:
. Die vordefinierten Klassentypen
finden Sie in Generische Klassen.
Bei eigenen Klassentypen muss der innere Doppelpunkt mittels
\
geschützt werden, zum Beispiel #Panel\:myPanel:
.
Auch die Indextypkennzeichner "@", "&" und "%" müssen mit einem
vorangestellten \
geschützt werden (siehe
Abschnitt 47.4).
Informationen zu Kombinationsmöglichkeiten finden Sie in Abschnitt 47.3.
Ein Name kann in der SmartID direkt
nach dem #
angegeben werden, z.B. #txtUsername
.
Wenn die Klasse der Komponente zu den Generische Klassen
gehört, reicht die einfache Angabe des Namens. Ansonsten muss die
Klasse vorangestellt werden, zum Beispiel
#DIV:txtUsername
.
Der verwendete Name kann SmartID-spezifische Sonderzeichen enthalten
":", "@", "&" und "%" (siehe auch Abschnitt 47.4), diese
müssen jedoch mit einem vorangestellten \
geschützt werden.
Um zu erzwingen, dass der Name
für die Komponentenerkennung verwendet wird,
kann in der SmartID Name=
vorangestellt werden, zum Beispiel
#Name=txtUsername
. Die Groß-/Kleinschreibung muss beim Präfix
Name=
nicht beachtet werden.
Weitere Informationen zu Kombinationsmöglichkeiten finden Sie in Abschnitt 47.3.
Das Wiedererkennungskriterium Merkmal
kann in der SmartID direkt nach dem #
angegeben werden,
zum Beispiel #Anwendername
.
Wenn die Klasse der Komponente zu den Generische Klassen
gehört, reicht die einfache Angabe des Merkmals. Ansonsten muss die
Klasse vorangestellt werden, zum Beispiel
#DIV:Anwendername
.
Das verwendete Merkmal kann SmartID-spezifische Sonderzeichen
enthalten, diese
müssen jedoch mit einem vorangestellten \
geschützt werden.
Um zu erzwingen, dass das Merkmal für die Komponentenerkennung
verwendet wird, kann dem Merkmal Feature=
vorangestellt werden, zum Beispiel #Feature=Anwendername
.
Wenn es unwichtig ist, ob das Merkmal oder das weitere Merkmal
qfs:label*
-Varianten verwendet wird,
kann Label=
vorangestellt werden, zum Beispiel
#Label=Anwendername
. Die Groß-/Kleinschreibung
muss bei den Präfixen Feature=
und Label=
nicht beachtet werden.
Weitere Informationen zu Kombinationsmöglichkeiten finden Sie in Abschnitt 47.3.
Wiedererkennungskriterien aus der Gruppe der
Weitere Merkmale stehen
ebenfalls für die SmartID zur Verfügung. Diese
können über den Kennzeichner, der vor den
SmartID-Wert gesetzt wird, angesprochen werden. Zwischen Kennzeichner
und SmartID steht ein =
. Für alle
'Weiteren Merkmals' entspricht der Kennzeichner dem Namen des
weiteren Merkmals. Die Groß- und Kleinschreibung
muss berücksichtigt werden. Der SmartID-Wert entspricht dem
Wert des weiteren Merkmals. Auch hier ist die Groß- und
Kleinschreibung relevant.
Beispiele:
#module=Modul1
referenziert
eine Komponente mit einem weiteren Merkmal mit dem Namen
module
und dem Wert Modul1
.
#my\:foo=Irgend\&etwas
referenziert
eine Komponente mit einem weiteren Merkmal mit dem Namen
my:foo
und dem Wert Irgend&etwas
.
Für die qfs:label*
-Varianten gibt es Kurzformen
für den Kennzeichner. Diese werden weiter unten in diesem
Kapitel erläutert.
SmartID-spezifische Sonderzeichen ":", "@", "&" und "%" (siehe
auch Abschnitt 47.4) müssen mit einem
vorangestellten \
geschützt werden, wenn sie
im Wert der SmartID, Bezeichner oder in der Klasse vorkommen.
Informationen zu Kombinationsmöglichkeiten finden Sie in Abschnitt 47.3.
qfs:label*
-Varianten
Eine herausragende Stellung haben die
qfs:label*
-Varianten, die
Beschriftungen für eine Komponente enthalten. Wenn für eine Komponente
Beschriftungen existieren, kann in der SmartID entweder die
Beste Beschriftung
oder eine spezifische Beschriftung genutzt werden. Der Vorteil einer
spezifischen Beschriftung ist neben der präziseren Angabe auch die
Performanz bei der Wiedergabe, da direkt
nach der entsprechenden Beschriftung gesucht werden kann. Andernfalls wird
aus allen in Frage kommenden Beschriftungen die beste Beschriftung ermittelt,
dieser Vorgang ist zeitintensiver.
Um eine spezifische Beschriftung zu nutzen, starten Sie mit #
dann ein Bezeichner,
das heißt, der Kurzform des
weiteren Merkmalnamens (siehe qfs:label*
-Varianten),
gefolgt von "=" und dem SmartID-Wert an, zum Beispiel #left=Vorname
.
Die beste Beschriftung können Sie direkt nach dem #
angeben oder mit
#qlabel=
spezifizieren. Wenn Sie #label=
verwenden, kann sich
der Wert auf das Merkmal oder eine der qfs:label*
-Varianten
beziehen. Die Groß- und Kleinschreibung muss bei diesen
Kennzeichnerkurzformen nicht beachtet werden.
Die Beschriftung kann in der SmartID auch ohne Kennzeichner verwendet werden,
zum Beispiel #Anwendername
. Dann gilt die in der
Option Priorität bei Aufnahme von SmartIDs mit Kennzeichner eingestellte Reihenfolge.
Standardmäßig ist dies: Name - beste Beschriftung - Merkmal.
Beispiele:
#left=Vorname
- Die Beschriftung links der Komponente
muss "Vorname" lauten.
#qlabel=Vorname
- Die
Beste Beschriftung für die Komponente
muss "Vorname" lauten.
#label=Vorname
- Entweder muss
das Merkmal oder die beste Beschriftung für die Komponente
"Vorname" lauten.
#Vorname
- Entweder muss der Name der Komponente
oder das Merkmal oder die beste Beschriftung für die Komponente
"Vorname" lauten.
qfs:text
und text
Auch die weiteren Merkmale qfs:text
und
text
haben eine Sonderstellung.
Beide können über den Kennzeichner text=
vor dem eigentlichen Wert angesprochen werden. Wenn dediziert
qfs:text
verwendet werden soll, können Sie
qtext=
verwenden.
Beispiele: #text=Anna
, #qtext=Benno
Hinweis
Genaugenommen wird bei vorangestelltem #text=
zuerst nach dem weiteren Merkmal #qfs:labelText=
gesucht und dann nach qfs:text
und
text
. Da jedoch die beiden letzteren speziell für
Textkomponenten gedacht sind, für die #qfs:labelText=
nicht aufgenommen wird, ergibt sich hier kaum Konfliktpotenzial.
Die weiteren Merkmale qfs:text
und text
können auch ohne vorangestelltem #text=
genutzt werden.
Hierzu können Sie die Option Priorität bei Aufnahme von SmartIDs mit Kennzeichner
entsprechend ergänzen, zum Beispiel "name,feature,qlabel,text".
qfs:type
qfs:type
gibt den Typ einer
Klasse an. Wenn nicht einer der von QF-Test vordefinierten Typen (siehe
Generische Klassen) verwendet wird,
müssen die darin enthaltenen Doppelpunkte mit \
geschützt werden.
Alle SmartIDs können mit einem Index versehen werden, wenn mehrere Komponenten für die gleiche SmartID in Frage kommen. Dabei zählt die technische Reihenfolge der Komponenten in der Hierarchie. Diese muss nicht der visuellen Reihenfolge entsprechen. Die Zählung des Index beginnt bei 0. Der Index wird in spitzen Klammern angegeben. Wird kein Index angegeben, wird implizit der Index 0 verwendet.
Beispiele: #Name<2>
,
#TextField:<2>
Bei Komponenten der Klasse Label
gilt diese Reihenfolge
nicht. Da sie in den meisten Fällen als Beschriftung anderer Komponentenklassen
genutzt werden und dort im Merkmal oder als qfs:label*
-Varianten
abgespeichert werden, werden die Komponenten der Klasse Label
nachrangig behandelt. Label Komponenten müssen daher explizit mit
vorangestellter Klasse Label:
angesprochen, zum Beispiel
#Label:Vorname
werden.
Informationen zur allgemeinen SmartID-Syntax finden Sie in Abschnitt 47.3.
Die Komponentenhierarchie kann auch mit
SmartIDs für die Wiedererkennung genutzt werden.
Als Trennzeichen zwischen den Hierarchieebenen dient @
.
Beispiele:
#Kundeninformationen@#Name
referenziert eine
Komponente mit der SmartID #Name
in einer übergeordneten
Komponente (zum Beispiel einem TitledPanel
) mit der SmartID
#Kundeninformationen
.
#ComboBoxSmartID@#Button:
#ListenSmartID&22@#Link:<1>
#Link:<1>
adressiert den zweiten Link darin.
Wenn Sie SmartIDs aufnehmen wollen, aktivieren Sie die Option Aufnahme von SmartIDs oder haken Sie einfach den Menüpunkt »Aufnahme«-»Aufnahme von SmartIDs« an.
Bei der Aufnahme von SmartIDs prüft QF-Test zunächst, ob ein Name vorhanden ist. Falls ja, wird dieser für die SmartID verwendet. Wenn nicht, wird nach einer Beschriftung gesucht (Merkmal oder Weitere Merkmale.) Wenn die ermittelte SmartID für mehrere Komponenten gültig ist, wird ein Index angefügt.
Hinweis
Normalerweise ist die Aufnahme von SmartIDs relativ einfach. Anhängig von der Zielkomponente und den
vorhandenen Informationen kann es aber vorkommen, dass keine SmartID aufgenommenen werden kann, so dass ganz
klassisch ein 'Komponente'-Knoten Knoten aufgenommen wird. Dies ist zum Beispiel der Fall,
wenn dem GUI-Element keine generische Klasse zugewiesen werden kann oder wenn QF-Test für das GUI-Element weder
Name, noch Merkmal noch das weitere
Merkmal qfs:label*
-Varianten ermitteln kann.
Standardmäßig wird die generische Klasse der SmartID vorangestellt. Dies erhöht nicht nur die Lesbarkeit sondern kann auch die Performanz bei der Wiedergabe deutlich verbessern. Über die Option Für SmartID immer die Klasse aufnehmen kann das Voranstellen der Klasse deaktiviert werden. Dabei ist zu beachten, dass die Klassen 'Label' und 'Panel' trotzdem vorangestellt werden, um die korrekte Wiedergabe zu gewährleisten.
Das Abspielen von Knoten mit SmartIDs unterscheidet sich nicht von dem
mit aufgenommenen Komponenten. Es können beide Varianten innerhalb
eines Testfalls verwendet werden. SmartIDs können auch bei
aufgenommenen Komponenten zur Adressierung
untergeordneter Komponenten verwendet werden. Das Beispiel
aufgenommeneListe&10@#Button:
zeigt Kombination der
'QF-Test ID' einer aufgenommenen Liste mit Index und der SmartID des in dem
Listenelement liegenden Buttons.
Es ist möglich, die 'QF-Test ID' einer aufgenommenen 'Komponente'
auf eine SmartID inklusive vorangestelltem #
Kennzeichen zu setzen. Dies kann genutzt werden,
um die SmartID quasi umzuleiten und die Komponentenerkennung klassisch über die
Wiedererkennungsmerkmale der aufgenommenen Komponente durchzuführen. Einzelne Komponenten
aufzunehmen macht insbesondere dann Sinn, wenn die SmartID lang und
umständlich wird, schlechte Performance hat oder schwer eindeutig zu machen ist.
Das SmartID-Kennzeichen #
kann dann der
Einheitlichkeit halber genutzt werden, muss aber nicht.
Letzte Änderung: 10.9.2024 Copyright © 1999-2024 Quality First Software GmbH |