2

これがばかげた質問である場合はお詫びします-私は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()

なんで?

4

3 に答える 3

0

を使用してすべてのリンクをまとめて収集しfindElements、配列を反復処理できます。

例 - List<WebElement> inputs = driver.findElements(By.xpath("//input"));

そしてあなたの場合

List<WebElement> links = driver.findElements(By.linkText("Show"));

そして、繰り返しlinks、それぞれをクリックします

于 2012-10-25T20:51:01.897 に答える
0

問題の式に注意してください

driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()

tdリンクまたはイベントが定義されていない要素を選択します。ブラウザーでクリックするとリンクが開きますが、タグtd自体だけでなくタグの内部も効果的にクリックしているためにのみ、リンクが開きます。上記のコードは をクリックするだけでtd、その内容は無視されます。

a現在選択されている 内の要素まで、さらに一歩深く進む必要がありますtd。このような:

driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]/a")).click()
于 2012-10-26T19:49:51.723 に答える
0

リストリンク = driver.findElements(By.tagName("a"));

次に、リンクを反復処理し、for ループを使用してそれぞれのリンクをクリックします

于 2012-10-29T12:45:23.117 に答える