XPath :: Kardeşi Takip Edin


85

Aşağıdaki HTML Yapısına sahibim: DOM içinde bu etiketlerin birçoğu olacağı için, ikinci renk özeti öğesini çıkarmak için sağlam bir yöntem oluşturmaya çalışıyorum.

<table>
  <tbody>
    <tr bgcolor="#AAAAAA">
    <tr>
    <tr>
    <tr>
    <tr>
      <td>Color Digest </td>
      <td>AgArAQICGQMVBBwTIRQHIwg0GUMURAZTBWQJcwV0AoEDAQ </td>
    </tr>
    <tr>
      <td>Color Digest </td>
      <td>2,43,2,25,21,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, </td>
    </tr>
  </tbody>
</table>

Çözülmüş değere sahip İkinci "Renk Özeti" td öğesini çıkarmaya çalışıyorum.

Aşağıdaki xpath'i yazdım ama ikinciyi almak yerine ikinci td öğesini alamıyorum.

//td[text() = ' Color Digest ']/following-sibling::td[2]

Ve onu td [2] 'ye td [1] olarak değiştirdiğimde, her iki elemanı da elde ederim.

Yanıtlar:


124

'Color Digest'e eşit olan td'ye sahip ikinci tr'yi aramalısınız, sonra tr'deki ilk td'nin sonraki kardeşine veya ikinci td'ye bakmanız gerekir.

Takip etmeyi dene:

//tr[td='Color Digest'][2]/td/following-sibling::td[1]

veya

//tr[td='Color Digest'][2]/td[2]

http://www.xpathtester.com/saved/76bb0bca-1896-43b7-8312-54f924a98a89


Firefox'ta Xpath Checker kullanıyorum
noktalı virgül ekle


1
belki xpath denetleyicisi çalışmıyor? Hiç kullanmadım ve firefox kurulu değil. Sahip olduğum xpath, yalnızca ilk td öğesi 'Color Digest'e sahip olduğunda ikinci td öğesini döndürmelidir
james31rock

HTML'mi kontrol ederseniz, bir Space "Color Digest" var, gönderdiğiniz bağlantıyı denedim ve her iki TD'nin de geri döndüğünü görebilirsiniz.
noktalı virgül ekle

1
Ahh anlıyorum, cevabımı değiştireceğim. Afedersiniz. 'Color Digest'e eşit olan td'ye sahip ikinci tr'yi aramalısınız, sonra tr'deki ilk td'nin sonraki kardeşine veya ikinci td'ye bakmanız gerekir.
james31rock

6

XPath ile bir öğe listesi belirlemeye gidebilirsiniz:

//td[text() = ' Color Digest ']/following-sibling::td[1]

Bu size 2. elementi amaçladığınız gibi kullanabileceğinizden iki elementin bir listesini verecektir. Örneğin:

List<WebElement> elements = driver.findElements(By.xpath("//td[text() = ' Color Digest ']/following-sibling::td[1]"))

Şimdi, 2. elementi, yani elements.get (1) 'i istediğiniz element olarak kullanabilirsiniz.


2

/html/body/table/tbody/tr[9]/td[1]

Chrome'da (olası Safari de) bir öğeyi inceleyebilir, ardından xpath'i almak istediğiniz etikete sağ tıklayabilir, ardından o öğeyi seçmek için xpath'i kopyalayabilirsiniz.


2
Evet, sağlam bir yaklaşım inşa etmek istiyorum, bu işlevin, bu öğelerin tekrarı olduğunu biliyorum.
noktalı virgül ekle
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.