Trong tự động hóa Selenium, nếu các phần tử không được tìm thấy bởi các bộ định vị chung như id, class, name, v.v. thì XPath được sử dụng để tìm một phần tử trên trang web.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu về xpath và các biểu thức XPath khác nhau để tìm các phần tử phức tạp hoặc động, có các thuộc tính thay đổi động khi làm mới hoặc bất kỳ hoạt động nào.
Trong hướng dẫn XPath này, bạn sẽ học-
- XPath là gì?
- Các loại đường dẫn X
- XPath tuyệt đối
- XPath tương đối
- XPath cơ bản
- Chứa đựng()
- Sử dụng HOẶC & VÀ
- Bắt đầu với chức năng
- Bản văn()
- Các phương pháp trục XPath
- Tiếp theo
- Tổ tiên
- Đứa trẻ
- Preceding
- Anh chị em sau
- Cha mẹ
- Bản thân
- Con cháu
XPath trong Selenium là gì?
XPath trong Selenium là một đường dẫn XML được sử dụng để điều hướng thông qua cấu trúc HTML của trang. Nó là một cú pháp hoặc ngôn ngữ để tìm bất kỳ phần tử nào trên trang web bằng cách sử dụng biểu thức đường dẫn XML. XPath có thể được sử dụng cho cả tài liệu HTML và XML để tìm vị trí của bất kỳ phần tử nào trên trang web bằng cách sử dụng cấu trúc HTML DOM.
Định dạng cơ bản của XPath trong selen được giải thích bên dưới với ảnh chụp màn hình.
Định dạng cơ bản của XPath
Cú pháp cho XPath selen:
XPath chứa đường dẫn của phần tử nằm trên trang web. Cú pháp XPath tiêu chuẩn để tạo XPath là.
Xpath = // tagname [@ thuộc tính = 'value']
- //: Chọn nút hiện tại.
- Tagname: Tên tag của nút cụ thể.
- @: Chọn thuộc tính.
- Thuộc tính: Tên thuộc tính của nút.
- Giá trị: Giá trị của thuộc tính.
Để tìm chính xác phần tử trên các trang web, có nhiều loại định vị khác nhau:
Bộ định vị XPath | Tìm các yếu tố khác nhau trên trang web |
TÔI | Để tìm phần tử theo ID của phần tử |
Tên lớp | Để tìm phần tử theo Tên lớp của phần tử |
Tên | Để tìm phần tử theo tên của phần tử |
văn bản liên kết | Để tìm phần tử theo văn bản của liên kết |
XPath | XPath cần thiết để tìm phần tử động và duyệt giữa các phần tử khác nhau của trang web |
Đường dẫn CSS | Đường dẫn CSS cũng định vị các phần tử không có tên, lớp hoặc ID. |
Các loại đường dẫn X
Có hai loại XPath:
1) XPath tuyệt đối
2) XPath tương đối
XPath tuyệt đối:
Đây là cách trực tiếp để tìm phần tử, nhưng nhược điểm của XPath tuyệt đối là nếu có bất kỳ thay đổi nào được thực hiện trong đường dẫn của phần tử thì XPath đó sẽ không thành công.
Đặc điểm chính của XPath là nó bắt đầu bằng một dấu gạch chéo ngược (/), có nghĩa là bạn có thể chọn phần tử từ nút gốc.
Dưới đây là ví dụ về biểu thức xpath tuyệt đối của phần tử được hiển thị trong màn hình bên dưới.
LƯU Ý: Bạn có thể thực hành bài tập XPath sau trên http://demo.guru99.com/test/selenium-xpath.html này
Bấm vào đây nếu video không thể truy cập được
XPath tuyệt đối:
/ html / body / div [2] / div [1] / div / h4 [1] / b / html [1] / body [1] / div [2] / div [1] / div [1] / h4 [1] / b [1]
XPath tuyệt đối
Xpath tương đối:
Xpath tương đối bắt đầu từ giữa cấu trúc HTML DOM. Nó bắt đầu bằng dấu gạch chéo kép (//). Nó có thể tìm kiếm các phần tử ở bất cứ đâu trên trang web, có nghĩa là không cần phải viết một đường dẫn dài và bạn có thể bắt đầu từ phần giữa của cấu trúc HTML DOM. Xpath tương đối luôn được ưu tiên vì nó không phải là một đường dẫn hoàn chỉnh từ phần tử gốc.
Dưới đây là ví dụ về biểu thức XPath tương đối của cùng một phần tử được hiển thị trong màn hình bên dưới. Đây là định dạng phổ biến được sử dụng để tìm phần tử của XPath.
Bấm vào đây nếu video không thể truy cập được
XPath tương đối: // div [@ class = 'feature-box cloumnsize1'] // h4 [1] // b [1]
XPath tương đối
Các trục XPath là gì.
Các trục XPath tìm kiếm các nút khác nhau trong tài liệu XML từ nút ngữ cảnh hiện tại. XPath Axes là các phương thức được sử dụng để tìm các phần tử động, điều này không thể thực hiện được bởi phương thức XPath thông thường không có ID, Classname, Name, v.v.
Các phương thức Axes được sử dụng để tìm các phần tử đó, thay đổi động khi làm mới hoặc bất kỳ hoạt động nào khác. Có một số phương thức trục thường được sử dụng trong Selenium Webdriver như con, cha mẹ, tổ tiên, anh chị em, trước đó, tự, v.v.
Sử dụng XPath Xử lý các phần tử phức tạp & động trong Selenium
1) XPath cơ bản:
Biểu thức XPath chọn các nút hoặc danh sách các nút trên cơ sở các thuộc tính như ID, Tên, Tên lớp , v.v. từ tài liệu XML như được minh họa bên dưới.
Xpath = // input [@ name = 'uid']
Đây là liên kết để truy cập trang http://demo.guru99.com/test/selenium-xpath.html
XPath cơ bản
Một số biểu thức xpath cơ bản hơn:
Xpath = // input [@ type = 'text']Xpath = // label [@ id = 'message23']Xpath = // input [@ value = 'RESET']Xpath = // * [@ class = 'barone']Xpath = // a [@ href = 'http: //demo.guru99.com/']Xpath = //img[@src='//cdn.guru99.com/images/home/java.png.webp ']
2) Chứa ():
Contains () là một phương thức được sử dụng trong biểu thức XPath. Nó được sử dụng khi giá trị của bất kỳ thuộc tính nào thay đổi động, ví dụ: thông tin đăng nhập.
Tính năng chứa có khả năng tìm phần tử có một phần văn bản như được hiển thị trong ví dụ XPath dưới đây.
Trong ví dụ này, chúng tôi đã cố gắng xác định phần tử bằng cách chỉ sử dụng một phần giá trị văn bản của thuộc tính. Trong biểu thức XPath dưới đây, một phần giá trị 'phụ' được sử dụng thay cho nút gửi. Có thể quan sát rằng phần tử được tìm thấy thành công.
Giá trị hoàn chỉnh của 'Loại' là 'gửi' nhưng chỉ sử dụng một phần giá trị 'phụ'.
Xpath = // * [chứa (@ type, 'sub')]
Giá trị hoàn chỉnh của 'name' là 'btnLogin' nhưng chỉ sử dụng một phần giá trị 'btn'.
Xpath = // * [chứa (@ tên, 'btn')]
Trong biểu thức trên, chúng tôi đã lấy 'name' làm thuộc tính và 'btn' làm giá trị một phần như được hiển thị trong ảnh chụp màn hình bên dưới. Thao tác này sẽ tìm thấy 2 phần tử (ĐĂNG NHẬP & ĐẶT LẠI) vì thuộc tính 'tên' của chúng bắt đầu bằng 'btn'.
Tương tự, trong biểu thức dưới đây, chúng tôi đã lấy 'id' làm thuộc tính và 'thông báo' làm giá trị một phần. Điều này sẽ tìm thấy 2 yếu tố ('ID người dùng không được để trống' và 'Mật khẩu không được để trống') vì thuộc tính 'tên' của nó bắt đầu bằng 'thông báo'.
Xpath = // * [chứa (@ id, 'nội dung')]
Trong biểu thức bên dưới, chúng tôi đã lấy "văn bản" của liên kết làm thuộc tính và 'đây' dưới dạng một phần giá trị như được hiển thị trong ảnh chụp màn hình bên dưới. Thao tác này sẽ tìm thấy liên kết ('tại đây') vì nó hiển thị văn bản 'tại đây'.
Xpath = // * [chứa (text (), 'here')]Xpath = // * [chứa (@ href, 'guru99.com')]
3) Sử dụng OR & AND:
Trong biểu thức OR, hai điều kiện được sử dụng, cho dù điều kiện thứ nhất HOẶC điều kiện thứ hai phải đúng. Nó cũng có thể áp dụng nếu bất kỳ một điều kiện nào là đúng hoặc có thể là cả hai. Có nghĩa là bất kỳ một điều kiện nào phải đúng để tìm phần tử.
Trong biểu thức XPath dưới đây, nó xác định các phần tử có điều kiện đơn hoặc cả hai điều kiện đều đúng.
Xpath = // * [@ type = 'submit' hoặc @ name = 'btnReset']
Đánh dấu cả hai phần tử là phần tử "ĐĂNG NHẬP" có thuộc tính "loại" và phần tử "ĐẶT LẠI" có thuộc tính "tên".
Trong biểu thức AND, hai điều kiện được sử dụng, cả hai điều kiện phải đúng để tìm phần tử. Nó không thể tìm thấy phần tử nếu bất kỳ điều kiện nào là sai.
Xpath = // input [@ type = 'submit' và @ name = 'btnLogin']
Trong biểu thức bên dưới, đánh dấu phần tử 'LOGIN' vì nó có cả thuộc tính 'loại' và 'tên'.
4) Xpath Starts-with
XPath start-with () là một hàm được sử dụng để tìm phần tử web có giá trị thuộc tính bị thay đổi khi làm mới hoặc bởi các hoạt động động khác trên trang web. Trong phương pháp này, văn bản bắt đầu của thuộc tính được đối sánh để tìm phần tử có giá trị thuộc tính thay đổi động. Bạn cũng có thể tìm thấy các phần tử có giá trị thuộc tính là tĩnh (không thay đổi).
Ví dụ -: Giả sử ID của phần tử cụ thể thay đổi động như:
Id = "message12"
Id = "message345"
Id = "message8769"
vân vân… nhưng văn bản ban đầu giống nhau. Trong trường hợp này, chúng tôi sử dụng biểu thức Bắt đầu với.
Trong biểu thức dưới đây, có hai phần tử có id bắt đầu là "thông báo" (nghĩa là 'ID người dùng không được để trống' & 'Mật khẩu không được để trống'). Trong ví dụ dưới đây, XPath tìm những phần tử có 'ID' bắt đầu bằng 'message'.
Xpath = // label [start-with (@ id, 'message')]
5) Hàm XPath Text ()
Hàm XPath text () là một hàm tích hợp sẵn của selenium webdriver được sử dụng để định vị các phần tử dựa trên văn bản của phần tử web. Nó giúp tìm các phần tử văn bản chính xác và định vị các phần tử trong tập hợp các nút văn bản. Các phần tử được định vị phải ở dạng chuỗi.
Trong biểu thức này, với chức năng văn bản, chúng tôi tìm thấy phần tử có khớp văn bản chính xác như hình dưới đây. Trong trường hợp của chúng tôi, chúng tôi tìm thấy phần tử có văn bản "UserID".
Xpath = // td [text () = 'UserID']
6) Các phương thức trục XPath:
Các phương pháp trục XPath này được sử dụng để tìm các phần tử phức tạp hoặc động. Dưới đây chúng ta sẽ thấy một số phương pháp này.
Để minh họa phương pháp trục XPath này, chúng tôi sẽ sử dụng trang web demo của ngân hàng Guru99.
a) Sau đây:
Chọn tất cả các phần tử trong tài liệu của nút hiện tại () [Hộp nhập UserID là nút hiện tại] như được hiển thị trong màn hình bên dưới.
Xpath = // * [@ type = 'text'] // following :: input
Có 3 nút "đầu vào" khớp với nhau bằng cách sử dụng mật khẩu trục "sau", đăng nhập và nút đặt lại. Nếu bạn muốn tập trung vào bất kỳ phần tử cụ thể nào thì bạn có thể sử dụng phương pháp XPath dưới đây:
Xpath = // * [@ type = 'text'] // theo dõi :: input [1]
Bạn có thể thay đổi XPath theo yêu cầu bằng cách đặt [1], [2]
… và như thế.Với đầu vào là '1', ảnh chụp màn hình dưới đây tìm thấy nút cụ thể là phần tử hộp nhập 'Mật khẩu'.
b) Tổ tiên:
Trục tổ tiên chọn tất cả phần tử tổ tiên (ông bà, cha mẹ, v.v.) của nút hiện tại như được hiển thị trong màn hình bên dưới.
Trong biểu thức dưới đây, chúng tôi đang tìm phần tử tổ tiên của nút hiện tại (nút "KIỂM TRA DOANH NGHIỆP").
Xpath = // * [text () = 'Thử nghiệm doanh nghiệp'] // tổ tiên :: div
Có 13 nút "div" khớp bằng cách sử dụng trục "tổ tiên". Nếu bạn muốn tập trung vào bất kỳ phần tử cụ thể nào thì bạn có thể sử dụng XPath bên dưới, nơi bạn thay đổi số 1, 2 theo yêu cầu của bạn:
Xpath = // * [text () = 'Thử nghiệm doanh nghiệp'] // tổ tiên :: div [1]
Bạn có thể thay đổi XPath theo yêu cầu bằng cách đặt [1], [2]
… và như thế.c) Con:
Chọn tất cả các phần tử con của nút hiện tại (Java) như được hiển thị trong màn hình bên dưới.
Xpath = // * [@ id = 'java_technologies'] // con :: li
Có 71 nút "li" khớp bằng cách sử dụng trục "con". Nếu bạn muốn tập trung vào bất kỳ phần tử cụ thể nào thì bạn có thể sử dụng xpath bên dưới:
Xpath = // * [@ id = 'java_technologies'] // con :: li [1]
Bạn có thể thay đổi xpath theo yêu cầu bằng cách đặt [1], [2]
… và như thế.d) Trước:
Chọn tất cả các nút đến trước nút hiện tại như hiển thị trong màn hình bên dưới.
Trong biểu thức dưới đây, nó xác định tất cả các phần tử đầu vào trước nút "ĐĂNG NHẬP" là Userid và phần tử nhập mật khẩu .
Xpath = // * [@ type = 'submit'] // trước :: đầu vào
Có 2 nút "đầu vào" khớp bằng cách sử dụng trục "trước". Nếu bạn muốn tập trung vào bất kỳ phần tử cụ thể nào thì bạn có thể sử dụng XPath bên dưới:
Xpath = // * [@ type = 'submit'] // trước :: input [1]
Bạn có thể thay đổi xpath theo yêu cầu bằng cách đặt [1], [2]
… và như thế.e) Anh, chị, em ruột sau:
Chọn các anh chị em sau của nút ngữ cảnh. Anh chị em ở cùng cấp của nút hiện tại như được hiển thị trong màn hình bên dưới. Nó sẽ tìm phần tử sau nút hiện tại.
xpath = // * [@ type = 'submit'] // anh chị em sau :: đầu vào
Một nút đầu vào khớp bằng cách sử dụng trục "anh chị em sau".
f) Phụ huynh:
Chọn nút cha của nút hiện tại như được hiển thị trong màn hình bên dưới.
Xpath = // * [@ id = 'rt-feature'] // cha :: div
Có 65 nút "div" khớp bằng cách sử dụng trục "cha". Nếu bạn muốn tập trung vào bất kỳ phần tử cụ thể nào thì bạn có thể sử dụng XPath bên dưới:
Xpath = // * [@ id = 'rt-feature'] // cha :: div [1]
Bạn có thể thay đổi XPath theo yêu cầu bằng cách đặt [1], [2]
… và như thế.g) Bản thân:
Chọn nút hiện tại hoặc 'self' có nghĩa là nó chỉ ra chính nút đó như được hiển thị trong màn hình bên dưới.
Đối sánh một nút bằng cách sử dụng trục "tự". Nó luôn chỉ tìm thấy một nút vì nó đại diện cho phần tử tự.
Xpath = // * [@ type = 'password'] // self :: input
h) Hậu duệ:
Chọn phần tử con của nút hiện tại như được hiển thị trong màn hình bên dưới.Trong biểu thức dưới đây, nó xác định tất cả các phần tử con của phần tử hiện tại (phần tử khung 'Main body surround') có nghĩa là nằm dưới nút (nút con, nút cháu, v.v.).
Xpath = // * [@ id = 'rt-feature'] // hậu duệ :: a
Có 12 nút "liên kết" khớp bằng cách sử dụng trục "con cháu". Nếu bạn muốn tập trung vào bất kỳ phần tử cụ thể nào thì bạn có thể sử dụng XPath bên dưới:
Xpath = // * [@ id = 'rt-feature'] // hậu duệ :: a [1]
Bạn có thể thay đổi XPath theo yêu cầu bằng cách đặt [1], [2]
… và như thế.Tóm lược:
XPath được yêu cầu để tìm một phần tử trên trang web để thực hiện một thao tác trên phần tử cụ thể đó.
- Có hai loại selen XPath:
- XPath tuyệt đối
- XPath tương đối
- XPath Axes là các phương thức được sử dụng để tìm các phần tử động, nếu không thì không thể tìm thấy bằng phương pháp XPath thông thường
- Biểu thức XPath chọn các nút hoặc danh sách các nút trên cơ sở các thuộc tính như ID, Tên, Tên lớp, v.v. từ tài liệu XML.