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.