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
Begeisterter Entwickler, Trainer und Berater zu allem Themen rund um agile Softwareentwicklung, Softwarequalität und Testautomatisierung.
Gründer und Geschäftsführer der Firma SimplyTest GmbH
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!