1. Tổng quan Xpath & cách hoạt động
1.1 Xpath là gì?
XPath là một ngôn ngữ thiết kế ra với mục đích giúp cho ứng dụng có thể di chuyển bên trong XML document và truy xuất các giá trị cũng như thuộc tính của các elements.
Cấu trúc 1 tài liệu XML có thể hình dung như 1 cái cây với nhiều cành và nhánh nhỏ khác nhau. Tất cả các thành phần đó đề được gọi là element.
"Hình dạng" giống với Xpath bạn đang tìm hiểu đó chính là cấu trúc thư mục cây của hệ thống tệp trong hệ điều hành bạn đang sử dụng đấy!

Giờ ta sẽ xem mối quan hệ giữa các element này trong Xpath như thế nào:
- Parent: mỗi node (element, attribute) đều có một node parent.
Ví dụ ở trên, node article là parent của các nodes id, author, title…
- Children: mỗi node có thể có nhiều và cũng có thể không có node children nào. Ví dụ ở trên, node id là children của node article. Node id cũng có thể không có node children nào cả.
- Siblings: là các nodes có chung node parent. Ví dụ như các nodes id, author, link …
- Ancestors: là các nodes tổ tiên, bao gồm node parent và các nodes parent của parent.
Ví dụ có thể xem node list là ancestor của node author.
- Descending: là các nodes con cháu, bao gồm node children và các nodes children của children.
Xpath xử dụng path expressions để di chuyển hay truy xuất thuộc tính trong các node của XML document. Biểu thức được đặc tả trong liệt kê sau:

1.2 Cú pháp của Xpath ra sao?
XPath chứa đường dẫn của element nằm trên trang web của bạn, sau đây là cấu trúc tiêu chuẩn để tạo XPath:

Trong đó:
- //: chọn nút hiện tại
- Tagname: tên thẻ của nút
- @: chọn thuộc tính
- Attribute: tên thuộc tính của nút
- Value: giá trị của thuộc tính
Để định vị được chính xác element, chúng ta sẽ có nhiều thông tin, yếu tố hay thuộc tính của element đó để xác định như:
|
XPath |
Tìm bằng các yếu tố khác nhau |
|
ID |
Để tìm Element theo ID của Element |
|
Classname |
Để tìm element theo Classname của element |
|
Name |
Để tìm element theo name của element |
|
Link text |
Để tìm element theo text của link |
|
XPath |
XPath cần thiết để có thể tìm các phần tử động và “tra cứu” giữa các element khác trên trang web |
|
CSS path |
CSS path chỉ định vị các element không có name, class hoặc ID. |
1.3 Có bao nhiêu loại Xpath
Về cơ bản, chúng ta có 2 loại Xpath bao gồm:
- Relative Xpath: XPath tương đối/ XPath không ổn định
- Absolute XPath: XPath tuyệt đối/ XPath ổn định
Tiếng Anh chỉ có một phiên bản, nhưng trong tiếng Việt sẽ có thể tồn tại thêm nhiều tên gọi khác nhau nữa. Về cơ bản, XPath tuyệt đối và XPath tương đối là hai tên gọi thông dụng nhất.
1.3.1 Relative XPath (XPath tương đối/ XPath không ổn định)
XPath tương đối sẽ bắt đầu thực hiện từ giữa cấu trúc HTML DOM, từ vị trí dấu //. Đồng nghĩa với XPath tương đối sẽ tìm kiếm các element ở bất kỳ đâu trên trang web và không cần một đường dẫn dài, đầy đủ.
Trong thực tế, XPath tương đối sẽ được ưu tiên hơn vì không cần phải có một đường dẫn hoàn chỉnh đến element gốc.
Ví dụ như element TESTING trong ảnh.

Nếu bạn thực hiện test trên các web app có XPath tương đối, đôi khi bạn sẽ lấy ra các phần từ có phần khác nhau. Lý do là đôi khi lập trình viên của web sử dụng generate elements động, một kỹ thuật khá phổ biến khi phát triển web app.
1.3.2 Absolute Xpath (XPath tuyệt đối/ XPath ổn định)
XPath tuyệt đối là cách trực tiếp và chính xác nhất để tìm ra vị trí của element. Tuy nhiên, nếu website sử dụng generate elements, chắc chắn việc tìm kiếm của bạn sẽ thất bại vì đường dẫn không ổn định.
Đặc điểm của XPath tuyệt đối chính là XPath tuyệt đối bắt đầu bằng dấu gạch chéo /, đồng nghĩa với việc bạn có thể chọn element từ nút gốc.
Ví dụ như element TESTING trong ảnh: đường dẫn chính xác sẽ “siêu dài”.
