![]() |
OpenKeyWord
Build_ID: 457, Datum: 01.02.2020 07:45:48
Dont repeat yourself. - Do it once and only once!
|
Eine Verkettung von Locatoren kann notwendig werden, wenn ein Kind-Objekt nur zusammen mit seinem Eltern-Objekt eindeutig erkannt werden kann.
So kann ein Eingabefeld wie User
, aus dem Beispiel in Tutorial 3 Tutorial 3: Der Locator, in mehreren Fenstern vorkommen. Erst in Verbindung mit dem Locator des Eltern-Objektes (=Fenster) kann eine Verwechselung des Kind-Objeks ausgeschlossen werden.
Nun könnte ohne Verkettung jedes Kind-Objekt einfach die Erkennungseigenschaft des Eltern Objektes mit eingebaut bekommen.
Das zieht jedoch immer dann einen Wartungsaufwand nach sich, wenn die Objekt-Erkennungseigenschaft des Eltern-Objektes sich ändert: Dann müssen alle Kind-Objekte angepasst werden, die eine Objekterkennungseigenschaft des Eltern-Objektes besitzen.
Eine Anpassung kann sehr aufwendig werden und der Umstand, dass sich ein Fehler in der Objekt-Erkennungseigenschaft erst während der Ausführung äussert, erschwert und verzögert die Wartung.
Dem DRY-Prinzip gemäß, liegt eine mögliche Lösung in der Verkettung von Locatoren. - Das wird nun hier in diesem Tutorial gezeigt.
Wir nehmen das Beispiel aus dem [[OKW Tutorial 3: Der Locator|OKW-Tutorial-3:–Der-Locator]] und verketten die Locatoren von Eltern- und Kind-Objekt.
Das Ziel ist hier, dass der Locator des Eltern-Objektes wp_login
dem der Locator des Kind-Objektes User
vorangestellt wird:
//body/div[@id='login']/..
//*[@id='user_login']
Zunächst müssen wir zwei Methoden kennenlernen:
getLOCATOR()
holt die Referenz auf den Locator werden.OKWLocator
.Wir lassen den Locator des Eltern-Objektes (wp_login
) unverändert. Dieser wird im Konstruktor des Klasse definiert:
Entscheidend ist hier der Ausdruck super("//body/div[@id='login']/..");
. Hiermit wird in der XPATH Wert //body/div[@id='login']/..
in der Locator Klasse des Fensters abgelegt.
Wir erweitern nun den Locator des Kind-Objektes um den Locator des Eltern-Objektes:
%1$s
gibt an, an welcher Stelle, der Wert des Eltern-Objekt Locators ein gesetzt werden soll.Das Ganze nun im Überblick:
Das war´s auch schon prinzipiell: Wenn der Locator der Klasse wp-login
geändert wird, dann bekommen die Verketteten Kind-Objekte automatisch die Änderung mit.
Es können prinzipiell beliebig viele Locatoren im Konstruktor mitgegeben werden.
String
und enthält den XPATH.%1$s
ersetzt, der 2. LOCATOR wird für %2$s
ersetzt usw.Ein Eltern LOCATOR kann an mehreren Stellen in einem Kind-Locator eingesetzt werden.
Im folgenden Beispiel (JUnit TestFall) werden zwei Locatorer (Eltern_1
und Eltern_2
) an mehreren Stellen (zwei) in ein Kind-Locator eingesetzt. Das erwartetet Ergebniss ist L2=L2, L1=L1, L2=L2, L1=L1
Damit sind wir mit diesem Tutorial auch schon fertig.