XPath :: Nhận theo dõi Sibling


82

Tôi có Cấu trúc HTML sau: Tôi đang cố gắng xây dựng một phương pháp mạnh mẽ để trích xuất phần tử thông báo màu thứ hai vì sẽ có nhiều thẻ trong số này trong DOM.

<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>

Tôi đang cố gắng trích xuất phần tử td "Thông báo màu" thứ hai có giá trị được giải mã.

Tôi đã viết xpath sau đây nhưng thay vì nhận được thứ hai, tôi không nhận được phần tử td thứ hai.

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

Và khi tôi thay đổi nó thành td [2] thành td [1] tôi nhận được cả hai phần tử.

Câu trả lời:


120

Bạn nên tìm kiếm tr thứ hai có td bằng 'Color Digest', sau đó bạn cần nhìn vào người anh em sau của td đầu tiên trong tr, hoặc td thứ hai.

Hãy thử những cách sau:

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

hoặc là

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

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


Tôi đang sử dụng Trình kiểm tra Xpath trên firefox
thêm-dấu chấm phẩy

tôi đã sử dụng cái này để kiểm tra. xpathtester.com/saved/b452f721-556c-4e9b-9758-1910b0871d4a
james31rock

1
có thể trình kiểm tra xpath không hoạt động? Tôi chưa bao giờ sử dụng nó và không cài đặt firefox. Xpath Tôi chỉ có nên trả lại các yếu tố td thứ hai, khi các yếu tố đầu tiên có td 'Màu Digest'
james31rock

Nếu bạn kiểm tra HTML của tôi, có dấu cách "Chữ số màu", tôi đã thử liên kết bạn đã gửi và bạn có thể thấy cả TD đều được trả về.
thêm dấu chấm phẩy vào

1
Ahh tôi hiểu rồi, tôi sẽ thay đổi câu trả lời của mình. Lấy làm tiếc. Bạn nên tìm kiếm tr thứ hai có td bằng 'Color Digest', sau đó bạn cần nhìn vào người anh em sau của td đầu tiên trong tr, hoặc td thứ hai.
james31rock

5

Bạn có thể xác định danh sách các phần tử với xPath:

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

Điều này sẽ cung cấp cho bạn danh sách gồm hai phần tử, ngoài ra bạn có thể sử dụng phần tử thứ 2 như dự định của mình. Ví dụ:

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

Bây giờ, bạn có thể sử dụng phần tử thứ 2 làm phần tử dự định của mình, đó là Elements.get (1)


2

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

Trong Chrome (có thể cả Safari), bạn có thể kiểm tra một phần tử, sau đó nhấp chuột phải vào thẻ bạn muốn lấy xpath, sau đó bạn có thể sao chép xpath để chọn phần tử đó.


2
Đúng vậy, tôi biết rằng hàm có sự lặp lại của các yếu tố này thay vì chỉ nhận được một yếu tố mà tôi muốn xây dựng một cách tiếp cận mạnh mẽ.
thêm dấu chấm phẩy vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.