OptionTag Auswahl mit Selenium
Um in einem automatisierten Test einen Eintrag aus einer DropDown Liste auszuwählen (Select-Tag), gibt es in Selenium mehrere Möglichkeiten.
Methode 1
Bei der ersten Methode erfolgt die Auswahl nach einem Index:
IWebElement bundeslaender = post.FindElement(By.Id("bundesland_id")); bundeslaender.FindElements(By.TagName("option"))[2].Click();
Wir suchen ausgehend von dem Parent-Element unsere DropDown Liste mit Hilfe einer ID (z.B. bundesland_id), dazu bietet Selenium die Methode „FindElements“ . Lassen uns anschließend eine Liste an Kind-Elementen vom Typ option zurückgeben und wählen per Index den dritten Eintrag aus ([0] -> Eintrag 1, [1] -> Eintrag 2, [2] -> Eintrag 3).
Vorteile:
- schnelle Implementierung
Nachteile / Risiken:
- Testfall würde fehlschlagen, wenn die Liste weniger als 3 Elemente enthält (ArgumentOutOfRange Exception)
- Auswahl des gewünschten Elementes ist instabil, sollte ein weiteres Element hinzukommen, kann es sein dass das gewünschte Element nicht mehr auf Index Platz 2 zu finden ist.
Methode 2
Bei der Methode 2 wird grundsätzlich vorgegangen wie bei der Methode 1. Nur wird anschließend nicht per Index auf die Auflistung zugegriffen, sondern es wird über die Liste iteriert:
IWebElement bundeslaender = post.FindElement(By.Id("bundesland_id")); foreach (IWebElement bundesland in bundeslaender.FindElements(By.TagName("option"))) { if (bundesland.Text == "Bayern"){ bundesland.Click(); break; } }
Wenn der Wert des OptionTags stimmt (Selenium Property „Text“), wird ein Klick auf das Element gemacht. Ansonsten wird weiter durch die Auflistung durchgegangen.
Vorteile:
- Lässt sich gut debuggen
- Einträge können gut im Log protokolliert werden
Nachteile / Risiken:
- Im Beispiel oben würde er auch weitermachen, wenn kein Element gefunden werden würde (dieser Fall kann natürlich noch aus-implementiert werden)
- Umständliche Implementierung
Methode 3
In der dritten Methode wird die Klasse SelectElement verwendet. Um auf diese aus dem Code zugreifen zu können, muss Selenium Namespace „OpenQA.Selenium.Support.UI“ in den using’s aufgeführt werden.
SelectElement bundeslaender = new SelectElement(post.FindElement(By.Id("bundesland_id"))); bundeslaender.SelectByText("Bayern");
Dem Konstruktor der Selenium Klasse „SelectElement“ wird ein IWebElement als Parameter übergeben. Anschließend wird mit „SelectByText“, das Unterelement mit dem angezeigten Text „Bayern“ ausgewählt.
Vorteile:
- Schnell zu implementieren
- Saubere Vorgehensweise, es werden keine falschen Elemente ausgewählt
Nachteile / Risiken:
- Falls Element nicht gefunden wird, wird die NoSuchEllementException von Selenium ausgeöst, diese sollte im Testfall behandelt werden
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!