Một Vài “Trick” Khi Sử Dụng Xpath Và Css Selector Trong Selenium

Như vậy chúng ta thấy trên trình duyệt sẽ hiển thị y nguyên tài liệu gốc. Vậy làm cách nào để chúng ta có thể đi lại trên các phần tử của tài liệu XML để trích ra những dữ liệu mà chúng ta cần thiết.

Bạn đang xem: Một vài “trick” khi sử dụng xpath và css selector trong selenium

Để đáp ứng điều này người ta thiết kế ra một ngôn ngữ XPath. XPath có một vai trò quan trọng trong việc trao đổi dữ liệu giữa các máy tính hay giữa các chương trình ứng dụng vì nó cho chúng ta sàng lọc các dữ liệu mà ta mong muốn.

XPath xem XML như một cây, với ví dụ trên sẽ được biểu diễn dưới dạng cây sau:

*

Bây giờ chúng ta hãy học cách đi qua các nút trong tài liệu XML.

Đường dẫn tuyệt đối

Nếu đường dẫn XPath bắt đầu bởi dấu / thì có nghĩa đây là một đường dẫn tuyệt đối bắt đầu từ phần tử gốc.

Trong hình cấu trúc câyở trên, bây giờ chúng ta muốn chọn nút Order ta viết như sau:


Cú pháp nguyên: /child::Order

Cú pháp tắt: /Order


Đi ra nhánh con Custumer bằng XPath như sau:


Cú pháp nguyên: /child::Order/child::Custumer

Cú pháp tắt: /Order/Custumer


Trong trường hợp muốn đi đến thuộc tính của nút thì chúng ta cần phải chỉ rõ từ khóa Attribute trong cú pháp nguyên hoặc
trong cú pháp tắt.

Xem thêm: Đâu Là Tên Một Nhiệm Vụ Ẩn Tại Đồng Linh Thạch? Hiểm Họa Từ “Thử Thách Cá Voi Xanh”

Để lấy thuộc tính OrderNo của nút Order ta dùng cú pháp XPath như sau:


Cú pháp nguyên: /child::Order/Attribute::OrderNo

Cú pháp tắt: /Order/
OrderNo


Đường dẫn tương đối

Khi chúng ta muốn trích một phần tử nào đó mà chúng ta chỉ biết tên của phần tử này chứ chúng ta không biết là phần tử này nằm ở vị trí nào thì chúng ta có thể dùng đường dẫn tương đối để làm điểu này. Chúng ta dùng dấu // để chỉ cho trình phân tích biết đây là đường dẫn tương đối.

Ví dụ, để trích các phần tử có tên là Product chúng ta viết như sau:


Cú pháp nguyên: //child::Product

Cú pháp viết tắt: //Product


Khi chúng ta viết như thế này thì khi đi qua trình phân tích sẽ truy tìm đến các phần tử có tên là Product.

Chọn các phần tử bằng ký tự đại diện

Để chọn tất cả các phần tử con của một phần tử nào đó chúng ta dùng ký tự đại diện *.

Ví dụ, để lấy tất cả các phần tử con của phần tử Order ta viết như sau:


Cú pháp nguyên: /child::Order/child::*

Cú pháp tắt: /Order/*


Chọn các phần tử theo điều kiện

Để lấy các phần tử theo một điều kiện nào đó chúng ta dùng dấu ngoặc vuông(< >).

Ví dụ, để lấy mọi phần tử Product có thuộc tính UnitPrice > 70 ta viết như sau:

Cú pháp nguyên:


//child::Product70>


Cú pháp tắt:


//Product<
UnitPrice>70>


Ví dụ, để lấy những phần tử Item có phần tử con là Product và có thuộc tính ProductID=1 chúng ta viết như sau:

Cú pháp nguyên:


//child::Item


Cú pháp tắt:


//ItemProductID=1>


Một số hàm thường dùng

Tên hàm

Ý nghĩa

Ví dụ

count()

Hàm lấy tổng số nút con của một

//Item

Chọn tất cả các phần tử Item có số phầntử con là 2

name()

Lấy tên của phần tử

/Order/*

Chọn tất cả các phần tử con của Ordercó tên là Item

not()

Hàm phủ định

//Item/**)>

Chọn tất cả các phần tử con của Itemkhông chứa thuộc tính nào

normalize-space(str)

Hàm bỏ khoảng trắng

//Item/*ProductID)=’abc’>

Chọn tất cả các phần tử con của Item cóthuộc tính ProductID=abc (không phânbiệt khoảng trắng)

starts-with(str,substr)

Hàm kiểm tra xem chuỗi str cóchứa chuỗi substr (tính từ vị trí đầutiên) hay không

//item/*

Chọn tất cả các phần tử con của Item cótên bắt đầu bởi ký tự P

contains(str,substr)

Kiểm tra một chuỗi str có chứachuổi con substr hay không

//item/*

Chọn tất cả các phần tử con của phầntử Item mà tên của các phần tử con nàycó chứ ký tự u

string-length(str)Hàm lấy chiều dài của 1 chuỗi

//Item/*

Chọn tất cả các phần tử con của Itemmà độ dài tên của các phần tử con này là 5

position()Cho biết vị trí hiện tại của phần tử

//Item

Chọn phần tử Item có vị trí là 5

floor()Lấy giá trị nhỏ nhất gần với giá trịchỉ định
ceiling()Lấy giá trị lớn nhất gần với giá trịchỉ định
last()Vị trí nút cuối cùng

//Item

Chọn phần tử Item cuối cùng

Một số toán tử thường dùng


Tên toán tử

Chức năng

Ví dụ

|

Toán tử hoặc dùng để chọn ra mộtlần nhiều phần tử có điều kiện khác nhau

//Item/*

Chọn tất cả các phần tử là con của Itemcó có tên bắt đầu bởi ký tự P hoặc Q

descendant

Chọn phần tử con của phần tử chỉ định

/Order /Item/Product/descendant::*

Chọn tất cả các phần tử là con của/Order/Item/Product

ancestor

Chọn phần tử cấp trên

/Order/Item/Product/ancestor::*

chọn 2 phần tử Item và phần tử Order

following-sibling

Chọn phần tử cùng cấp kế tiếp

/Order/OrderDate/following-sibling::*

chọn các phần tử Custumer và hai phầntử Item theo sau và cùng cấp với phầntử OrderDate

preceding-sibling

Chọn phần tử cùng cấp trước đó

/Order/Custumer/preceding-sibling::*

chọn phần tử OrderDate

followingChọn phần tử theo sau phần tử chỉ định

/Order/OrderDate/following::*

chọn phần tử Custumer và 2 phần tửItem và các phần tử con của Item

precedingChọn các phần tử đứng trước phần tử chỉ định

/Order/Custumer/preceding::*

chọn tất cả các phần tử đi trước phần tửCustumer

descendant-or-selfChọn phần tử cấp dưới và phần tử chỉ định

/Order/Item/descendant-or-self::*

Chọn tất cả các phần tử Item và cácphần tử con của phần tử này

ancestor-or-selfChọn phần tử cấp trên và phần tử

/Order/Item/product/ancestor-or-self::*

chọn 2 phân tử product, 2 phần tử Itemvà phần tử Order

Một số ví dụ

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

Nếu bạn có điều thắc mắc, bạn hãy comment cho realchampionshipwrestling.com để được giải đáp. Bài viết này được chia sẻ bởi LongDT. Nếu bạn muốn chia sẻ bài viết, bạn hãy Đăng ký làm thành viên! « Prev
Next » Đăng ký học thử Đăng ký khóa học
| W88Vuive