Lokalizowanie elementów za pomocą selektora XPath
Link do strony testowej: Testing Playground for Selectors
Lokalizowanie elementów przez By.xpath
XPath to język do nawigacji po strukturze XML/HTML
- Preferuj
//
(nawigacja gdziekolwiek) nad/
(od root'a). - Nie używaj bardzo długich XPath.
- Nie łącz z konkretnymi indeksami, które mogą się zmieniać (
div[3]
).
Element | XPath selektor | Opis |
---|---|---|
Przycisk Click Me | //button[@id='clickMe'] | Po id |
Pole username | //input[@name='username'] | Po name |
Checkbox | //input[@type='checkbox'] | Po typie inputa |
Link Example.com | //a[text()='Visit Example.com'] | Dokładny tekst linka |
Link Example.com (fragment) | //a[contains(text(), 'Example')] | Część tekstu |
Suwak | //input[@type='range'] | Slider |
Komórki tabeli | //table[@id='dataTable']//td | Wszystkie <td> w tabeli |
Zagnieżdżona lista | //li[contains(@class,'nested')] | Elementy listy |
Przycisk Submit | //input[@type='submit' and @value='Submit'] | Złożony warunek |
Iframe | //iframe[@id='testFrame'] | Znalezienie iframe |
Lokalizowanie po ID
WebElement btn = driver.findElement(By.xpath("//button[@id='clickMe']"));
Po class
WebElement input = driver.findElement(By.xpath("//input[@class='input-field']"));
Jeśli klasa ma więcej niż jedną wartość
// zawiera jedną z klas
WebElement btn = driver.findElement(By.xpath("//button[contains(@class, 'btn')]"));
Po name
lub type
WebElement username = driver.findElement(By.xpath("//input[@name='username']"));
Po tekście linka
// Dokładny tekst
WebElement link = driver.findElement(By.xpath("//a[text()='Visit Example.com']"));
// Fragment tekstu
WebElement link2 = driver.findElement(By.xpath("//a[contains(text(), 'Example')]"));
Tabela – iteracja po komórkach
List<WebElement> cells = driver.findElements(By.xpath("//table[@id='dataTable']//td"));
for (WebElement cell : cells) {
System.out.println(cell.getText());
}
Zagnieżdżone listy
WebElement nested = driver.findElement(By.xpath("//li[contains(@class,'nested')]"));
Suwak (slider) i input number
WebElement slider = driver.findElement(By.xpath("//input[@type='range']"));
WebElement number = driver.findElement(By.xpath("//input[@type='number']"));
Przycisk „Submit” w formularzu
WebElement submitBtn = driver.findElement(By.xpath("//input[@type='submit' and @value='Submit']"));
Iframe
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id='testFrame']")));