Tôi có thể tìm phần tử theo lớp python selen không?

Các chiến lược định vị trong Selenium Python là các phương thức được sử dụng để định vị các phần tử từ trang và thực hiện một thao tác trên cùng một trang. Mô-đun Python của Selenium được xây dựng để thực hiện kiểm tra tự động với Python. Các ràng buộc Selenium Python cung cấp một API đơn giản để viết các bài kiểm tra chức năng/chấp nhận bằng cách sử dụng Selenium WebDriver. Sau khi một người đã cài đặt Selenium và kiểm tra – Điều hướng các liên kết bằng phương thức get, một người có thể muốn chơi nhiều hơn với Selenium Python. Sau khi mở một trang bằng selen chẳng hạn như geeksforgeeks, người dùng có thể muốn tự động nhấp vào một số nút hoặc tự động điền vào biểu mẫu hoặc bất kỳ tác vụ tự động nào như vậy. Bài viết này xoay quanh Định vị các phần tử đơn lẻ trong Selenium Python

Chiến lược định vị để xác định vị trí các yếu tố đầu tiên duy nhất

Ghi chú. find_element_by_*… không được dùng nữa và do đó, Theo lớp hiện được sử dụng với find_element. Để biết thêm chi tiết. truy cập vào đây

Selenium Python tuân theo các chiến lược định vị khác nhau cho các phần tử. Để định vị các phần tử, bạn phải nhập By

from selenium.webdriver.common.by import By

Người ta có thể xác định vị trí một phần tử theo 8 cách khác nhau. Đây là danh sách các chiến lược định vị cho Selenium trong python –

LocatorsDescriptionPhần tử đầu tiên có giá trị thuộc tính id khớp với vị trí sẽ được trả về. Phần tử đầu tiên có giá trị thuộc tính tên khớp với vị trí sẽ được trả về. Phần tử đầu tiên có cú pháp xpath khớp với vị trí sẽ được trả về. Phần tử đầu tiên có giá trị văn bản liên kết khớp với vị trí sẽ được trả về. Phần tử đầu tiên có giá trị văn bản liên kết một phần khớp với vị trí sẽ được trả về. Phần tử đầu tiên có tên thẻ đã cho sẽ được trả về. phần tử đầu tiên có tên thuộc tính lớp phù hợp sẽ được trả về. Phần tử đầu tiên có bộ chọn CSS phù hợp sẽ được trả về

Qua. TÔI

Với chiến lược này, phần tử đầu tiên có bộ chọn CSS phù hợp sẽ được trả về. Nếu không có phần tử nào có bộ chọn CSS phù hợp, NoSuchElementException sẽ xuất hiện.  

Bài viết này dành cho bất kỳ ai đang sử dụng Selenium hoặc Endtest và muốn biết cách tốt nhất để tìm các phần tử

Chìa khóa ở đây là tìm bộ định vị ổn định và đáng tin cậy nhất cho từng phần tử

Hãy nhớ rằng việc yêu cầu Selenium xác định vị trí một phần tử cũng giống như nói cho ai đó ở ngoài thị trấn cách tìm một quán cà phê nào đó trong thành phố của bạn

Chúng tôi sẽ sử dụng trang Đăng ký Github làm ví dụ

Tôi cũng sẽ thực hiện một số so sánh giữa Selenium và Endtest

Ngay cả khi bạn đang sử dụng Tiện ích mở rộng Chrome cuối cùng của chúng tôi để định vị các thành phần của mình, bạn vẫn có thể gặp phải các tình huống cần tìm nạp công cụ định vị


Chúng tôi sẽ sử dụng các loại công cụ định vị khác nhau để tìm đầu vào Tên người dùng

  1. Tìm phần tử theo ID
  2. Tìm phần tử theo tên
  3. Tìm phần tử theo tên lớp
  4. Tìm phần tử bằng XPath
  5. Tìm phần tử bằng CSS Selector
  6. Tìm phần tử theo văn bản liên kết
  7. Tìm phần tử theo văn bản liên kết một phần
  8. Tìm phần tử theo tên thẻ

1] Tìm phần tử theo ID

Luôn là lựa chọn hàng đầu

Để lấy ID phần tử của bạn, bạn chỉ cần nhấp chuột phải vào phần tử của mình và nhấp vào tùy chọn Kiểm tra

Cấu trúc phần tử của bạn sẽ được đánh dấu trong bảng điều khiển

Có vẻ như phần tử của chúng tôi có ID sau

đăng nhập người dùng

Điều này có nghĩa là dòng mã của bạn sẽ trông như thế này

tên người dùng = trình điều khiển. find_element_by_id["user_login"]

Vì ID phải là duy nhất trên một trang nên đây là loại công cụ định vị đáng tin cậy nhất mà bạn có thể sử dụng

Nó giống như chỉ có một cửa hàng Starbucks trong thành phố của bạn và bảo bạn bè đến gặp bạn ở đó, họ không thể bỏ lỡ

2] Tìm phần tử theo tên

Cũng tốt như ID, nhưng bạn sẽ không gặp nó thường xuyên như mong đợi

Các phần tử từ biểu mẫu thường có thuộc tính Tên

Chúng ta có thể dễ dàng thấy rằng phần tử của chúng ta có Tên sau

đăng nhập người dùng]

tên người dùng = trình điều khiển. find_element_by_name["người dùng[đăng nhập]"]

3] Tìm phần tử theo tên lớp

Không đáng tin cậy lắm, vì Tên lớp thường được chia sẻ bởi nhiều phần tử

Chúng ta có thể dễ dàng thấy rằng phần tử của chúng ta có Tên lớp sau

điều khiển biểu mẫu

Và nếu chúng ta xem xét kỹ hơn phần còn lại của các đầu vào từ biểu mẫu đó, chúng ta sẽ thấy rằng tất cả chúng đều có Tên lớp điều khiển biểu mẫu

tên người dùng = trình điều khiển. find_element_by_class_name["form-control"]

Điều này có nghĩa là bạn sẽ không thể xác định vị trí đầu vào Tên người dùng đó bằng loại bộ định vị Tên lớp, vì Selenium sẽ gây ra lỗi

Endtest có cách tiếp cận thanh lịch hơn ở đây so với Selenium. Nếu bạn cung cấp Tên lớp đó, nó sẽ chỉ cảnh báo cho bạn biết có bao nhiêu phần tử được tìm thấy với Tên lớp đó và phần tử đầu tiên sẽ được sử dụng

Nếu Starbucks có Class Name, có lẽ nó sẽ là quán cà phê. Nếu bạn nói với bạn của bạn Gặp tôi ở quán cà phê đó, họ có thể không biết bạn đang nói về quán nào

Lỗi phổ biến nhất của người mới bắt đầu là trích xuất tất cả Tên lớp thay vì chỉ một

Hãy xem xét yếu tố này

Người dùng mới làm quen có thể nói rằng phần tử có Tên lớp sau

HeaderMenu-link d-inline-block đường viền không gạch chân viền-xám-tối

Nhưng nó thực sự có 5 tên lớp khác nhau

HeaderMenu-link d-inline-block đường viền không gạch chân viền-xám-tối

Đúng vậy, Tên lớp được phân tách bằng dấu cách

Selenium không có xác thực cho điều đó, nhưng Endtest thì có

4] Tìm phần tử bằng XPath

Đơn giản là bạn không thể tránh khỏi việc phải sử dụng XPath cho ít nhất một số phần tử. Nó không tệ như họ nói

Một XPath giống như một tuyến đường. Có rất nhiều con đường mà bạn của bạn có thể đi để đến quán Starbucks đó

Thông thường, một XPath trông giống như thế này

/html/body/div[4]/main/div/div/div[1]/p

Cách nhanh nhất để lấy XPath là từ bảng điều khiển Chrome

Trong trường hợp này, chúng ta có XPath sau

//*[@id="user_login"]

Nếu bạn có ID ổn định, bạn không nên bận tâm sử dụng XPath

Và nếu bạn không có ID ổn định, XPath mà chúng tôi nhận được không đáng tin cậy

Có rất nhiều ứng dụng web đang sử dụng ID động cho một số phần tử

Một phần tử có ID động giống như một quán cà phê đang đổi tên hàng ngày

Bạn đã biết quán cà phê có tên là iCoffee ngày hôm qua, nhưng bạn không biết hôm nay nó sẽ có tên là gì

Nói với bạn của bạn để gặp bạn tại iCoffee sẽ gây nhầm lẫn

Đó là lúc chúng ta cần viết XPath của riêng mình

Tìm hiểu các thuộc tính và đặc điểm ổn định của phần tử đó là gì

Quay trở lại ví dụ với quán cà phê có tên khác

Một cái gì đó mà không thay đổi về nó là gì?

Có lẽ vị trí và thực tế rằng đó là một quán cà phê

Điều này có nghĩa là bạn có thể nói với bạn của mình từ ngoài thành phố đến gặp bạn tại quán cà phê từ Trung tâm mua sắm phía Tây

Hãy xem xét phần tử của chúng ta và lấy XPath của phần tử gốc của nó

Đây là XPath mà chúng tôi nhận được cho cha mẹ của nó

//*[@id="signup-form"]/auto-check[1]/dl/dd

Đây thực tế là địa chỉ của Trung tâm mua sắm phía Tây trong ví dụ của chúng tôi

Bây giờ tất cả những gì chúng ta phải làm là thêm một số chi tiết vào cuối

Phần tử Tên người dùng của chúng tôi là một đầu vào và nó có Tên lớp kiểm soát biểu mẫu

Điều này có nghĩa là chúng ta cần nối thêm phần sau vào cha mẹ

/input[@class="form-control"]

Và phần đó dịch sang. Tìm kiếm cha mẹ đó để tìm đầu vào có Tên lớp kiểm soát biểu mẫu

Và XPath cuối cùng cho phần tử Username của chúng ta sẽ như thế này

//*[@id="signup-form"]/auto-check[1]/dl/dd/input[@class="form-control"]

Luôn xác minh XPath của bạn trong bảng điều khiển Chrome bằng cách nhấn Ctrl + F và tìm kiếm nó, bạn sẽ thấy phần tử của mình được đánh dấu như thế này

Viết XPath của riêng bạn không quá đáng sợ. Bạn sẽ gặp các tình huống trong đó phần tử của bạn có thể không có ID, nhưng nó sẽ có một thuộc tính đáng tin cậy nhất định khiến nó trở nên độc nhất

Trong trường hợp đó, XPath của bạn sẽ trông như thế này

//*[@attribute = "attribute_value"]

Bạn cũng có thể viết XPath định vị phần tử bằng cách chỉ sử dụng một phần giá trị của thuộc tính

//*[chứa[@attribute, "part_of_attribute_value"]]

Ví dụ: phần tử Tên người dùng của chúng tôi có các thuộc tính sau

aria-descriptedby="description_2822cb3d798c" name="user[login]" autocapitalize="off"AFAF="autofocus" required="required" class="form-control" type="text" id="user_login" autocomplete="

Nếu chúng ta muốn sử dụng thuộc tính aria-descriptedby, đây sẽ là XPath

//*[@aria-descriptedby = "description_2822cb3d798c"]

Nếu bạn đang sử dụng Endtest thay vì Selenium, trình ghi của họ sẽ biết cách tự động trích xuất các XPath tùy chỉnh này

5] Tìm phần tử bằng CSS Selector

Loại bộ định vị CSS Selector tương tự như XPath

Một số người thực sự cho rằng nó nhanh hơn

Thông thường, Bộ chọn CSS trông như thế này

cơ thể> div. ứng dụng chính> chính> div> div

Và chúng tôi giải nén nó theo cách tương tự

Trong trường hợp này, chúng tôi có Bộ chọn CSS sau

#đăng nhập người dùng

Nếu bạn quen thuộc với CSS, bạn sẽ biết rằng # là viết tắt của ID

Điểm tương đồng với XPath không dừng lại ở đây

Nếu bạn có ID ổn định, bạn không nên bận tâm sử dụng CSS Selector

Và nếu bạn không có ID ổn định, Bộ chọn CSS mà chúng tôi nhận được không đáng tin cậy

Giải pháp?

Để viết Bộ chọn CSS tùy chỉnh của riêng chúng tôi

Hãy bắt đầu bằng cách trích xuất Bộ chọn CSS cho phần tử gốc của phần tử Tên người dùng

Đây là những gì chúng tôi nhận được

#signup-form > tự động kiểm tra. con thứ n[4] > dl > dd

Bây giờ, giống như chúng ta đã làm với XPath, chúng ta cần thêm một số chi tiết ở cuối

Trong trường hợp bạn quên, phần tử Tên người dùng của chúng tôi là một đầu vào và nó có Tên lớp điều khiển biểu mẫu

Điều này có nghĩa là chúng ta cần nối thêm phần sau vào cha mẹ

> đầu vào. điều khiển biểu mẫu

Và phần đó dịch sang

Tìm kiếm cha mẹ đó để tìm đầu vào có Tên lớp kiểm soát biểu mẫu

Nếu bạn quen thuộc với CSS, dấu chấm là viết tắt của Tên lớp

Và Bộ chọn CSS cuối cùng cho phần tử Tên người dùng của chúng ta sẽ trông như thế này

#signup-form > tự động kiểm tra. con thứ n[4] > dl > dd > đầu vào. điều khiển biểu mẫu

Không bắt buộc phải thêm cả loại phần tử và Tên lớp

Bạn chỉ có thể sử dụng một trong số họ

#signup-form > tự động kiểm tra. con thứ n[4] > dl > dd > đầu vào

#signup-form > tự động kiểm tra. con thứ n[4] > dl > dd >. điều khiển biểu mẫu

Một lần nữa, nếu bạn đang sử dụng Endtest thay vì Selenium, trình ghi của họ sẽ biết cách tự động trích xuất các Bộ chọn CSS tùy chỉnh này

6] Tìm phần tử theo văn bản liên kết

Loại công cụ định vị văn bản liên kết chỉ hoạt động đối với các liên kết

Phần tử của bạn là một Liên kết nếu nó có định dạng sau

A là viết tắt của Anchor

Vì phần tử Tên người dùng của chúng tôi là một đầu vào và không phải là một liên kết, nên chúng tôi sẽ không thể xác định vị trí của nó bằng cách sử dụng Văn bản liên kết

Điều đáng ghi nhớ là Văn bản liên kết chỉ là văn bản giữa các thẻ

Trong trường hợp liên kết từ ảnh chụp màn hình, Văn bản liên kết là Doanh nghiệp

Mã Selenium của chúng tôi sẽ trông như thế này

Enterprise_link = trình điều khiển. find_element_by_link_text["Doanh nghiệp"]

7] Tìm phần tử bằng văn bản liên kết một phần

Như tên cho thấy, nó giống hệt như Văn bản liên kết, nhưng với sự khác biệt là bạn chỉ cần thêm một phần của Văn bản liên kết

Và đây sẽ là mã Selenium của chúng ta

Enterprise_link = trình điều khiển. find_element_by_partial_link_text["Enterp"]

8] Tìm phần tử theo tên thẻ

Như chúng ta đã thấy từ các ví dụ trước, một phần tử luôn có một thẻ

Bạn có thể sử dụng loại công cụ định vị Tên thẻ nếu đó là đặc điểm duy nhất của phần tử mà bạn có thể lấy

Thực tế mà nói, tôi không nghĩ bạn sẽ sử dụng cái này

Endtest có thêm một loại định vị là Text Inside, tương tự như Partial Link Text, nhưng nó dùng được cho mọi loại phần tử

Ngay cả khi bộ định vị của bạn đáng tin cậy, bạn sẽ gặp phải các tình huống trong đó ứng dụng web của bạn trải qua quá trình sửa đổi và bạn sẽ mất thời gian để giữ cho các bài kiểm tra của mình đồng bộ với các ứng dụng web của bạn

Làm cách nào để chọn phần tử theo lớp trong Selenium Python?

Để tìm Phần tử HTML theo thuộc tính tên lớp bằng Selenium trong Python, gọi phương thức find_element[] và chuyển By. CLASS_NAME làm đối số đầu tiên và tên lớp [của Phần tử HTML chúng ta cần tìm] làm đối số thứ hai .

Làm cách nào để tìm một phần tử theo lớp trong Selenium?

Cú pháp Java để định vị phần tử web bằng thuộc tính Lớp của nó được viết là. trình điều khiển. findElement[By. Tên lớp [

Làm cách nào để chọn theo tên lớp trong Selenium?

Chúng ta có thể lấy tên lớp css của một phần tử với Selenium webdriver. Để lấy thuộc tính tên lớp của một phần tử trong tài liệu html, chúng ta phải sử dụng phương thức getAttribute[]. Sau đó, giá trị lớp được truyền dưới dạng tham số cho phương thức

Làm cách nào để tìm phần tử trong Python Selenium?

Python – phương thức find_element[] trong Selenium . Id về cơ bản là thuộc tính duy nhất được gán cho các thành phần của trang web như nút, hình ảnh, tiêu đề, v.v. Ghi chú. Phần tử đầu tiên có giá trị thuộc tính “id” khớp với vị trí sẽ được trả về. find_element[] method is used. Id is basically unique attribute assigned to the elements of the web page such as buttons, image, heading etc. Note: The first element with the “id” attribute value matching the location will be returned.

Chủ Đề