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]).
ElementXPath selektorOpis
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']//tdWszystkie <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']")));