Trong automation test giao diện, trước khi bấm nút, bạn phải xác định đúng phần tử để bấm. XPath là cú pháp truy vấn các node trong HTML/XML.
Ở bài này, chúng ta sẽ dùng một trang rất nhỏ để hiểu từng phần của biểu thức XPath.
Các thẻ HTML phổ biến
| Tên thẻ | Ý nghĩa |
|---|---|
| <button> | Nút |
| <div> | Phân vùng |
| <a> | Đường link |
| <input> | Textbox |
| <select> | Dropdown |
| <img> | Ảnh |
| <p> | Đoạn văn |
| <h1> <h2> <h3> <h4> | Chữ tiêu đề to, nhỏ… |
Nhìn HTML trước khi viết XPath
<form id="login-form">
<label for="email">Email</label>
<input id="email" name="email" type="email">
<button type="submit">Đăng nhập</button>
</form>
<ul class="products">
<li><span>Bút</span><button>Mua</button></li>
<li><span>Vở</span><button>Mua</button></li>
</ul>form, input, button là thẻ (node).
id, name và type là thuộc tính.
Dấu @ trong XPath dùng để chọn thuộc tính.
| Ký hiệu | Ý nghĩa | Ví dụ |
|---|---|---|
// | Tìm element ở mọi độ sâu | //button |
/ | Tìm element dưới 1 nấc | //form/button |
@ | Thuộc tính | //input[@id="email"] |
[...] | Điều kiện lọc | //button[@type="submit"] |
Tìm theo thẻ và thuộc tính
Tìm input có id là 'email':
//input[@id="email"]
Tìm input có name là 'email':
//input[@name="email"]
Tìm button có type là 'submit':
//button[@type="submit"]
Từ form có id là 'login-form', lấy thằng button ngay dưới nó (con của nó):
//form[@id="login-form"]/buttonNếu trang có nhiều button, //button sẽ khớp nhiều phần tử. Hãy thêm điều kiện đủ rõ và ưu tiên thuộc tính ổn định như id hoặc data-testid nếu project cung cấp.
Tìm theo chữ hiển thị
Dùng text() hoặc contains() tuỳ theo nhu cầu của bạn:
Tìm button có text là 'Đăng nhập':
//button[text()="Đăng nhập"]
Tìm button có text chứa chữ 'Vở':
//span[contains(text(), "Vở")]contain(text(), "abc") có scope hẹp hơn contains(. , "abc"), vì cái sau còn check cả text trong các thẻ con, cái đầu chỉ check text trong các node trực tiếpLấy thẻ con làm mốc, đi lên thẻ cha
//span[text()="Vở"]/parent::li
//span[text()="Vở"]/..Giải thích: 2 cách bên trên là tương đương với nhau, đều là chọc vào thẻ span có text là “Vở”, sau đó đi lên thằng cha
Lấy các thẻ đồng cấp
//span[text()="Bút"]/following-sibling::span
Xpath này lấy span Bút làm gốc, sau đó trỏ vào thẻ đồng cấp ngay sau nó, chính là thẻ span Vở
Index đếm từ 1
//ul[@class="products"]/li[1]//ul[@class="products"]/li[2]
Cả hai biểu thức trỏ tới item thứ hai trong HTML mẫu. XPath đếm từ 1.
/html/body/div[3]/main/buttonXpath tương đối: xược kép:
//button[@id="abc"]Luôn ưu tiên Xpath tương đối vì dễ nhìn, gọn gàng, ít bị break nhé 👌




