これがばかげた質問である場合はお詫びします-私はSeleniumを初めて使用します。
表にいくつかのハイパーテキスト リンクがある Web ページをテストしています。HTML は次のようになります。
<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>
「表示」リンクのそれぞれをクリックしてテストしたいと思います。それらはすべて同じテキストを持っているため、linktext で参照することはできません。私は XPath でそれらを参照してきたので、次のようになります。
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/thead/tr/td[1]").getText()
'History' を正しく返し、
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]").getText()
正解は「表示」を返します。
だから私はそれを考えるだろう:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()
最初の列の [表示] リンクをクリックします。しかし、そうではありません - 何も起こりません。
私が行った場合:
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')])[2]")).click()
したがって、まとめると、これらすべてが機能します。
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()
しかし、これはしません:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()
なんで?