Kliknięcie łącza hipertekstowego za pomocą XPath
Przepraszam, jeśli to głupie pytanie - jestem nowy w Selenium.
Mam testowaną stronę internetową, która ma kilka linków hipertekstowych w tabeli. HTML wygląda tak:
<table>
<thead>
<tr>
<td><b>History</b></td>
<td><b>Attributes</b></td>
<td><b>Xml</b></td>
</tr>
</thead>
<tbody>
<tr>
<td><a href=link here>Show</a></td>
<td><a href=link here>Show</a></td>
<td><a href=link here>Show</a></td>
</tr>
</tbody>
</table>
Chcę przetestować kliknięcie każdego linku „Pokaż”. Wszystkie mają ten sam tekst, więc nie mogę odwoływać się do nich za pomocą tekstu liniowego. Odwołuję się do nich za pomocą XPath, dzięki czemu:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/thead/tr/td[1]").getText()
poprawnie zwraca 'Historia' i
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]").getText()
poprawne zwraca „Pokaż”.
Myślę więc, że:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()
kliknie link „Pokaż” w pierwszej kolumnie. Ale tak nie jest - nic się nie dzieje.
Jeśli zrobię:
driver.findElement(By.linkText("Show")).click()
klika pierwszy link „Pokaż”, czego oczekuję.
Mogę również:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2].1.0")).click()
i tak działa
driver.findElement(By.xpath("(//a[contains(text(),'Show')])[2]")).click()
Podsumowując, wszystkie te prace:
driver.findElement(By.linkText("Show")).click()
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2].1.0")).click()
driver.findElement(By.xpath("(//a[contains(text(),'Show')])[1]")).click()
ale to nie:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()
Czemu?