Szukanie elementów na stronie internetowej może być koszmarem z powodu złożoności elementów webowych. Jednakże, elementy webowe odgrywają istotną rolę w tworzeniu i testowaniu każdej aplikacji. Aby ułatwić pracę testerom, ten artykuł będzie oferował pewien wgląd w Selenium findElement i findElements z pomocą przykładu.
Oto co będzie przedmiotem tego artykułu:
- Wprowadzenie do Selenium findElement
- Różnica między findElement a findElements
- Syntaktyka Selenium findElement
- Typy lokalizatorów
- Używanie lokalizatora. Strategia do findElement
Wprowadzenie do Selenium findElement
Interakcja ze stroną internetową wymaga od sterownika zlokalizowania elementu sieciowego i albo wywołania zdarzenia JavaScript, takiego jak kliknięcie, enter, select, itp. lub wpisania wartości pola. Zazwyczaj, zaczynamy zautomatyzowane testowanie jakiejkolwiek aplikacji internetowej od znalezienia odpowiednich elementów na stronie internetowej. Najczęściej, takie zautomatyzowane testy wykonywane są przy użyciu frameworków takich jak Selenium WebDriver.
Selenium definiuje dwie metody identyfikacji elementów WWW:
- findElement: Polecenie używane do jednoznacznej identyfikacji elementu webowego w obrębie strony internetowej.
- findElements: Polecenie używane do identyfikowania listy elementów WWW w obrębie strony WWW.
Zrozummy różnicę między tymi dwiema metodami bardziej szczegółowo.
Różnica pomiędzy findElement a findElements
findElement | findElements |
Zwraca pierwszy pasujący element strony, jeśli lokalizator wykrył wiele elementów strony | Zwraca listę wielu pasujących elementów strony |
Rzuca wyjątek NoSuchElementException, jeśli element nie został znaleziony | Zwraca pustą listę, jeśli nie znaleziono pasującego elementu |
Wykrywa unikalny element element | Wraca kolekcję pasujących elementów |
Aby zrozumieć niektóre podstawowe komendy Selenium, spójrz na Podstawowe komendy Selenium Webdriver.
Syntaktyka Selenium findElement
Komenda findElement zwraca obiekt typu WebElement. Może wykorzystywać różne strategie lokalizatora takie jak ID, Name, ClassName, link text, XPath, etc.
Poniżej znajduje się składnia:
WebElement elementName = driver.findElement(By.LocatorStrategy("LocatorValue"));
Strategia lokalizatora zawiera następujące wartości.
- ID
- Name
- Nazwa klasy
- Nazwa tagu
- Tekst linku
- XPath
Wartość lokalizatora jest unikalną metodą, za pomocą której można łatwo zidentyfikować element WWW.
Przykład:
driver.findElement(By.xpath("//input")).sendKeys("Guitar");
Syntaktyka Selenium findElements
Komenda findElements zwraca pustą listę, jeśli nie ma elementów znalezionych przy użyciu podanej strategii lokalizatora i wartości lokalizatora. Poniżej znajduje się składnia komendy findElements.
List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
Przykład:
List<WebElement> listOfElements = driver.findElements(By.xpath("//div"));
Próbka Selenium Testing for Free
Zagłębmy się teraz w zrozumienie jak znaleźć elementy sieci za pomocą różnych lokalizatorów. Można odnieść się do różnych typów lokalizatorów w Selenium.
Zrozummy jak używać Selenium findElement na różne sposoby:
Szukanie przez ID
ID jest unikalnie zdefiniowany dla każdego elementu i jest najczęstszym sposobem lokalizowania elementów przy użyciu lokalizatora ID. Jeśli strona posiada dynamicznie generowane identyfikatory, to ta strategia nie może być użyta do jednoznacznego odnalezienia elementu. Jednakże, zwróci ona pierwszy element strony, który pasuje do lokalizatora.
Przykład: Weźmy www.amazon.com do zautomatyzowania i znalezienia elementów. Po przejściu przez pole wyszukiwania i sprawdzeniu elementu, będzie można zobaczyć różne elementy, jak pokazano na poniższym zrzucie.
Jak widać, zawiera on lokalizator ID, którego wartością jest twotabsearchtextbox. Poniższy snippet używa tej samej wartości lokalizatora do napisania programu.
Find by Name
Jest to podobne do Find By ID z tą różnicą, że sterownik będzie lokalizował element po atrybucie „name” zamiast „id”.
Przykład: Rozważmy tę samą stronę internetową amazonu. Pole wyszukiwania również posiada lokalizator nazwy, którego wartość to „field-keywords”, jak pokazano na poniższym zrzucie.
Cały kod pozostaje podobny do tego z lokalizatora ID, z tą różnicą, że różnica będzie w składni findElement.
elementName = driver.findElement(By.name("field-keywords"))
Find By LinkText
LinkText jest pomocny w znajdowaniu linków na stronie internetowej. Jest to najbardziej efektywny sposób znajdowania elementów strony zawierających linki.
Zlokalizuj teraz link Returns, jak pokazano poniżej.
Gdy tester trafi na ten link i wykona inspekcję, zlokalizuje tekst linku Returns, jak pokazano na zrzucie poniżej.
To może być zlokalizowane po prostu przy użyciu Selenium findElement z poniższą składnią:
elementLinktext = driver.findElement(By.linkText("Returns”))
Find By CSS Selector
CSS Selector jest używany do dostarczania reguł stylu dla stron internetowych, a także może być używany do identyfikacji jednego lub więcej elementów internetowych.
Przykład: Rozważmy to samo pole wyszukiwania na stronie Amazon. Posiada ono atrybut class, którego wartością jest nav-search-input. Używając tej samej wartości, metoda Selenium findElement może zlokalizować ten element.
elementcss= driver.findElement(By.cssSelector('div.nav-search-input'))
Find By XPath
XPath jest techniką w Selenium do nawigacji po strukturze HTML strony. XPath umożliwia testerom poruszanie się po strukturze XML dowolnego dokumentu i może być używany zarówno na dokumentach HTML jak i XML.
Przykład: Spróbujmy zlokalizować ten sam pasek wyszukiwania w Amazon za pomocą XPath. Poniższy kod pokazuje, że zawiera on lokalizator ID. Zauważ, że względny XPath zaczyna się od '//'.
Na poniższym obrazku widać tag input. Zacznij od //input. Tutaj //input implikuje nazwę znacznika. Wykorzystaj atrybut id i przekaż twotabsearchtextbox w pojedynczych cudzysłowach jako jego wartość. W ten sposób otrzymamy wyrażenie XPath pokazane poniżej:
//input
Następnie, używając metody Selenium findElement, wykonaj poniższy kod:
elementxpath = driver.findElement(By.xpath("//input"))
Run Selenium Tests for Free on Real Devices
Lokalizacja elementów sieciowych jest podstawą zautomatyzowanych testów Selenium stron internetowych i aplikacji webowych. Aby dowiedzieć się więcej o podstawach Selenium, spójrz na Selenium WebDriver Tutorial.