CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này về các nguyên nhân và giải pháp phổ biến khiến Python+Selenium không thể định vị các phần tử (được báo cáo là: NoSuchElementException) đã được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.
Khi thực hiện kiểm thử tự động các ứng dụng web, việc định vị các phần tử là điều cần thiết. Quá trình này thường gặp phải các tình huống không thể định vị được các phần tử (Selenium.common.Exceptions.NoSuchElementException được báo cáo. Nói chung, vấn đề này có thể được giải quyết từ các khía cạnh sau:
1. Không thể định vị được phần tử vì lý do Khung/Iframe:
Đây là lý do phổ biến nhất Trước hết, bạn cần hiểu bản chất của khung. Thực tế, khung được nhúng vào một trang khác và webdriver chỉ có thể xác định nó trên một trang tại một thời điểm, vì vậy bạn cần xác định vị trí tương ứng. frame đầu tiên và kiểm tra phần tử trang đó để định vị.
Giải pháp:
Nếu iframe có tên hoặc id, hãy sử dụng trực tiếp switch_to_frame("name value") hoặc switch_to_frame("id value"). như sau:
?
1
2
3
4
5
|
tài xế
=
webdriver. Firefox()
driver.get(r
'http://www.126.com/'
)
driver.switch_to_frame(
'x-URS-iframe'
)
tên người dùng
=
driver.find_element_by_name(
'e-mail'
)
tên người dùng.xóa()
|
Nếu iframe không có tên hoặc id, nó có thể được định vị theo cách sau:
?
1
2
3
4
|
yếu tố
=
driver.find_element_by_class_name(
'ỨNG DỤNG-biên tập-iframe'
)
driver.switch_to_frame(phần tử)
|
Sau khi hoàn tất thao tác, bạn có thể nhảy ra khỏi iframe hiện tại thông qua phương thức switch_to.parent_content() hoặc bạn có thể quay lại trang ngoài cùng thông qua phương thức switch_to.default_content().
2.Lý do lỗi mô tả Xpath:
Vì hệ thống phân cấp của Xpath quá phức tạp nên dễ mắc lỗi. Tuy nhiên, phương pháp định vị này có thể định vị hầu hết các phần tử một cách hiệu quả và bạn nên thành thạo nó.
Giải pháp:
2.1 Bạn có thể sử dụng firePath của Firefox để sao chép đường dẫn xpath. Phương pháp này rất dễ viết lại đường dẫn xpath do thay đổi lớp. Người mới bắt đầu có thể sao chép đường dẫn trước rồi thử sửa đổi nó.
2.2 Nâng cao trình độ viết xpath.
Bạn có thể đọc phần tóm tắt bài đăng trên blog khác của tác giả để biết chi tiết: Tóm tắt và ví dụ về định vị phần tử trong Selenuim+Python Bài đăng trên blog này tóm tắt chi tiết việc sử dụng Xpath.
Làm cách nào để kiểm tra xem Xpath được viết có đúng không? Sau khi ghi đường dẫn Xpath, bạn có thể sao chép trực tiếp vào firebug của trình duyệt Sohu để xem mã nguồn html và tìm kiếm thông qua Xpath: ô màu đỏ sau, nếu không báo lỗi nghĩa là đường dẫn Xpath được ghi là chính xác.
?
1
|
tìm_phần_tử_theo_xpath(
"//đầu vào[@id='kw']"
)
|
3. Trước khi tải trang, thực hiện các thao tác trên các thành phần trên trang:
Nói chung, trong trường hợp này, bạn có thể đặt thời gian chờ và chờ trang được hiển thị trước khi thao tác. Điều này cũng giống như thao tác thủ công: 3.1 Điểm bất lợi là bạn cần đặt thời gian chờ lâu hơn; và quá trình kiểm tra sẽ rất chậm nếu có quá nhiều trường hợp; 3.2 Đặt chờ một phần tử nhất định trên trang xuất hiện, chẳng hạn như văn bản hoặc hộp nhập liệu. Sau khi phần tử được chỉ định xuất hiện, bạn có thể thực hiện các thao tác. 3.3 Trong quá trình gỡ lỗi, mã html của trang có thể được in ra để phân tích.
Giải pháp: Nhập mô-đun thời gian.
?
1
2
|
nhập khẩu
thời gian
thời gian.ngủ(
3
)
|
4. Id động không thể định vị được phần tử:
Giải pháp: Nếu phát hiện thấy đó là ID động, hãy trực tiếp sử dụng định vị xpath hoặc các phương pháp khác để xác định vị trí của nó.
5. Định vị phụ, chẳng hạn như đăng nhập hộp bật lên
Ví dụ: nếu bạn đăng nhập vào tài khoản Baidu thông qua hộp bật lên đăng nhập Baidu, trước tiên bạn cần điều hướng đến hộp bật lên Baidu, sau đó điều hướng đến tên người dùng và mật khẩu để đăng nhập.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
từ
selen
nhập khẩu
trình điều khiển web
nhập khẩu
thời gian
tài xế
=
webdriver. Firefox()
trình điều khiển.get(
"http://www.baidu.com/"
)
thời gian.ngủ(
3
)
phần tử0
=
driver.find_elements_by_name(
"tj_đăng nhập"
)
vì
ele0
TRONG
phần tử0:
nếu như
ele0.is_displayed():
ele0. nhấp()
phần tử1
=
driver.find_element_by_class_name(
"nội dung tang"
)
phần tử11
=
phần tử1.tìm_phần_tử_theo_id(
"TANGRAM__PSP_8__tên người dùng"
)
phần tử11.xóa()
phần tử11.gửi_khóa(
"đăng nhập"
)
phần tử2
=
phần tử1.tìm_phần_tử_theo_id(
"TANGRAM__PSP_8__mật khẩu"
)
phần tử2.xóa()
phần tử2.gửi_khóa(
"mật khẩu"
)
phần tử3
=
phần tử1.tìm_phần_tử_theo_id(
"TANGRAM__PSP_8__gửi"
)
phần tử3.click()
phần tử3.gửi()
thử
:
khẳng định
"đăng nhập"
TRONG
driver.page_source
ngoại trừ
Lỗi khẳng định:
in
"Đăng nhập thất bại"
khác
:
in
"Đăng nhập thành công"
thời gian.ngủ(
3
)
Cuối cùng
:
in
"Hồ sơ kiểm tra: Đã kiểm tra"
trình điều khiển. đóng()
|
Bổ sung: Đã báo cáo: Selenium.common.Exceptions.ElementNotVisibleException
mã số
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
từ
selen
nhập khẩu
trình điều khiển web
từ
PIL
nhập khẩu
Hình ảnh
nhập khẩu
thời gian
nhập khẩu
gấu trúc như pd
nhập khẩu
ngày giờ
tài xế
=
webdriver.Ie(r
"C:\Program Files\internet explorer\IEDriverServer2.exe"
)
trình điều khiển.get(
"https://www.cib.com.cn/cn/minipage/page/login-firmalert.html"
)
in
(
"Vui lòng nhập tên người dùng và mật khẩu tài khoản của bạn để đăng nhập"
)
đầu vào
(
"====Nhấn phím bất kỳ để tiếp tục===="
)
khung
=
driver.find_element_by_id(
"khung làm việc"
)
driver.switch_to_frame(khung)
trình điều khiển.tìm_phần_tử_theo_xpath(
'//div[@id="fast-way"]/ul/li[2]/a'
).nhấp()
thời gian.ngủ(
2
)
thử
:
trình điều khiển.tìm_phần_tử_theo_xpath(
'//div[@id="fast-way"]/ul/li[2]/a'
).nhấp()
ngoại trừ
Ngoại lệ như e:
in
(
"==================================================================
, e)
thời gian.ngủ(
3
)
|
Phần này kết thúc bài viết này về các nguyên nhân và giải pháp phổ biến khiến Python+Selenium không thể định vị các phần tử (được báo cáo là: NoSuchElementException). Để biết thêm nội dung liên quan về việc Python+Selenium không thể định vị các phần tử, vui lòng tìm kiếm các bài viết trước của tôi hoặc tiếp tục duyệt. Những bài viết liên quan sau đây mong các bạn sẽ ủng hộ mình trong thời gian tới! .
Link gốc: https://blog.csdn.net/chang995196962/article/details/84634570.
Cuối cùng, bài viết này về các lý do và giải pháp phổ biến khiến Python+Selenium không thể định vị các phần tử (được báo cáo: NoSuchElementException) sẽ kết thúc tại đây. Nếu bạn muốn biết thêm về các lý do và giải pháp phổ biến khiến Python+Selenium không thể định vị các phần tử. (đã báo cáo: NoSuchElementException): NoSuchElementException), vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!