Một trong những khía cạnh cơ bản nhất của việc sử dụng Selenium là lấy các tham chiếu phần tử để làm việc với. Selenium cung cấp một số chiến lược định vị tích hợp để xác định duy nhất một phần tử. Có nhiều cách để sử dụng bộ định vị trong các tình huống rất nâng cao. Đối với mục đích của tài liệu này, hãy xem xét đoạn mã HTML này
- …
- …
- Tomato is a Vegetable…
- …
- …
- Tomato is a Fruit…
Phần tử phù hợp đầu tiên
Nhiều bộ định vị sẽ khớp với nhiều yếu tố trên trang. Phương thức phần tử tìm số ít sẽ trả về một tham chiếu đến phần tử đầu tiên được tìm thấy trong một ngữ cảnh nhất định
Đánh giá toàn bộ DOM
Khi phương thức tìm phần tử được gọi trên phiên bản trình điều khiển, nó sẽ trả về một tham chiếu đến phần tử đầu tiên trong DOM khớp với bộ định vị được cung cấp. Giá trị này có thể được lưu trữ và sử dụng cho các hành động phần tử trong tương lai. Trong HTML ví dụ của chúng tôi ở trên, có hai phần tử có tên lớp là “cà chua” vì vậy phương thức này sẽ trả về phần tử trong danh sách “rau”
WebElement vegetable = driver.findElement[By.className["tomatoes"]];
vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
var vegetable = driver.FindElement[By.ClassName["tomatoes"]];
vegetable = driver.find_element[class: 'tomatoes']
const vegetable = await driver.findElement[By.className['tomatoes']];
val vegetable: WebElement = driver.findElement[By.className["tomatoes"]]
Đánh giá một tập hợp con của DOM
Thay vì tìm một công cụ định vị duy nhất trong toàn bộ DOM, việc thu hẹp tìm kiếm trong phạm vi của một phần tử được định vị khác thường rất hữu ích. Trong ví dụ trên, có hai phần tử có tên lớp là “cà chua” và sẽ khó khăn hơn một chút để lấy tham chiếu cho phần tử thứ hai
Một giải pháp là xác định vị trí một phần tử có thuộc tính duy nhất là tổ tiên của phần tử mong muốn chứ không phải tổ tiên của phần tử không mong muốn, sau đó gọi phần tử tìm trên đối tượng đó
WebElement fruits = driver.findElement[By.id["fruits"]];
WebElement fruit = fruits.findElement[By.className["tomatoes"]];
________số 8_______
IWebElement fruits = driver.FindElement[By.Id["fruits"]];
IWebElement fruit = fruits.FindElement[By.ClassName["tomatoes"]];
WebElement vegetable = driver.findElement[By.className["tomatoes"]];
0WebElement vegetable = driver.findElement[By.className["tomatoes"]];
1WebElement vegetable = driver.findElement[By.className["tomatoes"]];
2Java và C#
Các lớp
vegetable = driver.find_element[class: 'tomatoes']
3, vegetable = driver.find_element[class: 'tomatoes']
4 và vegetable = driver.find_element[class: 'tomatoes']
5 đều triển khai giao diện vegetable = driver.find_element[class: 'tomatoes']
6, được coi là giao diện dựa trên vai trò. Giao diện dựa trên vai trò cho phép bạn xác định xem việc triển khai trình điều khiển cụ thể có hỗ trợ một tính năng nhất định hay không. Các giao diện này được xác định rõ ràng và cố gắng tuân thủ chỉ có một vai trò trách nhiệm duy nhấtTra cứu lồng nhau có thể không phải là chiến lược vị trí hiệu quả nhất vì nó yêu cầu hai lệnh riêng biệt được cấp cho trình duyệt
Để cải thiện hiệu suất một chút, chúng ta có thể sử dụng CSS hoặc XPath để tìm phần tử này trong một lệnh. Xem các đề xuất chiến lược Định vị trong phần Thực hành thử nghiệm được khuyến khích của chúng tôi
Đối với ví dụ này, chúng tôi sẽ sử dụng Bộ chọn CSS
WebElement vegetable = driver.findElement[By.className["tomatoes"]];
3WebElement vegetable = driver.findElement[By.className["tomatoes"]];
4WebElement vegetable = driver.findElement[By.className["tomatoes"]];
5WebElement vegetable = driver.findElement[By.className["tomatoes"]];
6WebElement vegetable = driver.findElement[By.className["tomatoes"]];
7WebElement vegetable = driver.findElement[By.className["tomatoes"]];
8Tất cả các yếu tố phù hợp
Có một số trường hợp sử dụng cần lấy tham chiếu đến tất cả các phần tử khớp với bộ định vị, thay vì chỉ phần tử đầu tiên. Các phương thức tìm phần tử số nhiều trả về một tập hợp các tham chiếu phần tử. Nếu không có kết quả phù hợp, một danh sách trống được trả về. Trong trường hợp này, các tham chiếu đến tất cả các mục trong danh sách trái cây và rau củ sẽ được trả về trong bộ sưu tập
WebElement vegetable = driver.findElement[By.className["tomatoes"]];
9vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
0vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
1vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
2vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
3vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
4Nhận phần tử
Thường thì bạn nhận được một tập hợp các phần tử nhưng lại muốn làm việc với một phần tử cụ thể, điều đó có nghĩa là bạn cần lặp lại tập hợp và xác định phần tử bạn muốn
vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
5vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
6vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
7vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
8vegetable = driver.find_element[By.CLASS_NAME, "tomatoes"]
9var vegetable = driver.FindElement[By.ClassName["tomatoes"]];
0Tìm phần tử từ phần tử
Nó được sử dụng để tìm danh sách các WebElements con phù hợp trong ngữ cảnh của phần tử cha. Để đạt được điều này, WebElement gốc được kết nối với ‘findElements’ để truy cập các phần tử con