Klicken Sie mit XPath auf einen Hypertext-Link
Entschuldigung, wenn dies eine dumme Frage ist - ich bin neu in Selen.
Ich habe eine Webseite, die ich teste und die einige Hypertext-Links in einer Tabelle enthält. Das HTML sieht so aus:
<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>
Ich möchte einen Klick auf jeden der 'Show'-Links testen. Sie haben alle den gleichen Text, daher kann ich sie nicht per Linktext referenzieren. Ich habe sie von XPath referenziert, so dass:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/thead/tr/td[1]").getText()
gibt 'History' und korrekt zurück
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]").getText()
korrekte Rückgabe 'Show'.
Ich würde also denken, dass:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()
Klicken Sie in der ersten Spalte auf den Link "Anzeigen". Aber es passiert nichts.
Wenn ich mache:
driver.findElement(By.linkText("Show")).click()
es klickt auf den ersten 'Show'-Link, was ich erwarte.
Ich kann auch:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2].1.0")).click()
und das funktioniert genauso
driver.findElement(By.xpath("(//a[contains(text(),'Show')])[2]")).click()
Also, um es zusammenzufassen, all diese Arbeiten:
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()
aber das tut nicht:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()
Warum?