Xác minh phần tử Hiện tại và lệnh chờ trong Selenium

⚡ Tóm tắt thông minh

Xác minh sự hiện diện của phần tử và các lệnh waitFor trong Selenium IDE xác nhận rằng trang chứa các phần tử và văn bản mà bài kiểm tra mong đợi, và tạm dừng phát lại cho đến khi một điều kiện động trở thành đúng trước khi bước tiếp theo được thực thi.

  • 🔘 Kiểm tra phần tử: verifyElementPresent trả về TRUE khi bộ định vị khớp với một phần tử nào đó trên trang, còn verifyElementNotPresent là hàm ngược lại hoàn toàn.
  • ☑️ Kiểm tra văn bản: verifyTextPresent tìm kiếm toàn bộ trang và phân biệt chữ hoa chữ thường, vì vậy “Atlanta” sẽ không bao giờ khớp với “atlanta”.
  • Kiểm tra vị trí: verifyElementPositionLeft và verifyElementPositionTop so sánh độ lệch pixel của một phần tử so với cạnh trang.
  • 🧪 Trang đang tải: Các lệnh andWait như clickAndWait sẽ tạm dừng kịch bản cho đến khi trang mới tải xong.
  • 🛠️ Nội dung động: Lệnh waitFor chờ một điều kiện nào đó thay vì chờ trang tải xong, điều này phù hợp với các màn hình AJAX không bao giờ tải lại.
  • 📊 Môi trường phát triển tích hợp (IDE) hiện tại: Tiện ích mở rộng trình duyệt đổi tên các bước này và gán cho mỗi lệnh chờ một khoảng thời gian chờ tính bằng mili giây riêng.

Xác minh sự hiện diện của phần tử và lệnh waitFor trong Selenium IDE

Một bản ghi âm Selenium IDE Tập lệnh thực hiện các thao tác nhấp chuột và gõ phím, nhưng tự nó không bao giờ quyết định xem ứng dụng hoạt động đúng hay sai. Có hai nhóm lệnh thực hiện công việc đó: xác minh các lệnh kiểm tra trạng thái của trang và chờ đợi các lệnh này sẽ tạm dừng thực thi cho đến khi trang sẵn sàng để được kiểm tra.

⚠️ Lưu ý về các phiên bản: Các ảnh chụp màn hình bên dưới được lấy từ bản gốc. Firefox-cắm vào Selenium IDE này hiện không còn được phân phối nữa, và họ sử dụng tên tiếng Selenese theo kiểu camelCase. IDE hiện tại là Chrome. Firefox và Edge mở rộng trình duyệtHành vi được mô tả ở đây vẫn áp dụng, nhưng một số tên lệnh đã thay đổi — một bản đồping Bảng sẽ xuất hiện ở phần sau của bài viết này, và mọi lệnh gốc cũng như ảnh chụp màn hình đều được giữ nguyên chính xác như đã công bố.

Xác minh sự hiện diện của một phần tử

Chúng ta có thể sử dụng hai lệnh sau để xác minh sự hiện diện của một phần tử:

  • xác minhElementPresent – trả về TRUE nếu phần tử được chỉ định được TÌM THẤY trong trang; FALSE nếu không
  • xác minhElementNotPresent – trả về TRUE nếu KHÔNG TÌM THẤY phần tử được chỉ định ở bất kỳ đâu trong trang; SAI nếu nó hiện diện.

Cả hai lệnh đều nhận một phần tử định vị trong Target trường — một id, một tên, một bộ chọn CSS, một văn bản liên kết hoặc một Xpath biểu thức — và cả hai đều không cần giá trị.

Tập lệnh kiểm tra bên dưới xác minh rằng hộp văn bản Tên người dùng có trong Mercury Trang chủ của Tours trong khi hộp văn bản Tên thì không. Hộp văn bản Tên thực sự là một phần tử có trong trang Đăng ký của Mercury Chuyến tham quan, không có trong trang chủ.

Selenium Đoạn mã IDE sử dụng verifyElementPresent trên ô userName và verifyElementNotPresent trên ô First Name.

Bởi vì đây là xác minh lệnh thay vì khẳng định Khi thực hiện các lệnh, lỗi sẽ được ghi vào nhật ký và các bước còn lại vẫn tiếp tục chạy. Sự khác biệt này sẽ được trình bày chi tiết hơn ở phần sau.

Xác minh sự hiện diện của một văn bản nhất định trong lệnh trong Selenium

Việc kiểm tra xem một phần tử có tồn tại hay không không phải lúc nào cũng đủ — một bài kiểm tra thường cần xác nhận các từ được hiển thị cho người dùng. Hai lệnh văn bản giải quyết trường hợp đó.

  • xác minhTextPresence – trả về TRUE nếu chuỗi văn bản được chỉ định được TÌM THẤY ở đâu đó trong trang; FALSE nếu không
  • xác minhTextNotPresent – trả về TRUE nếu KHÔNG TÌM THẤY chuỗi văn bản đã chỉ định ở bất kỳ đâu trong trang; SAI nếu nó được tìm thấy

Hãy nhớ rằng các lệnh này phân biệt chữ hoa chữ thường.

Nhật ký bên dưới cho thấy cùng một trang đã được kiểm tra hai lần với hai cách viết khác nhau của cùng một cụm từ.

Selenium Nhật ký IDE cho thấy verifyTextPresent thành công đối với tuyến Atlanta đến Las Vegas và thất bại đối với tuyến Atlanta đến Las Vegas.

Trong trường hợp trên, "Atlanta to Las Vegas" được xử lý khác với "atlanta to Las Vegas" vì chữ "A" trong "Atlanta" được viết hoa ở trường hợp đầu tiên trong khi viết thường ở trường hợp thứ hai. Khi sử dụng lệnh verifyTextPresent trên từng trường hợp, một trường hợp thành công trong khi trường hợp kia thất bại.

Xác minh vị trí cụ thể của một phần tử

Các lỗi bố trí hiếm khi làm hỏng bộ định vị, vì vậy việc kiểm tra sự hiện diện sẽ bỏ sót chúng. Các lệnh định vị sẽ khắc phục được thiếu sót đó.

Selenium IDE chỉ ra vị trí của một phần tử bằng cách đo (tính bằng pixel) khoảng cách từ cạnh trái hoặc cạnh trên của cửa sổ trình duyệt.

  • xác minhElementPositionLeft – xác minh xem số pixel được chỉ định có khớp với khoảng cách của phần tử từ cạnh trái của trang hay không. Điều này sẽ trả về FALSE nếu giá trị được chỉ định không khớp với khoảng cách từ cạnh trái.
  • xác minhElementPositionTop – xác minh xem số pixel được chỉ định có khớp với khoảng cách của phần tử từ cạnh trên cùng của trang hay không. Điều này sẽ trả về FALSE nếu giá trị được chỉ định không khớp với khoảng cách từ cạnh trên.

Đoạn mã bên dưới ghi lại các giá trị bù pixel dự kiến ​​vào cột Giá trị.

Selenium Các bước IDE sử dụng verifyElementPositionLeft và verifyElementPositionTop với giá trị pixel trong cột Value.

Hãy cẩn trọng khi sử dụng hai lệnh này. Độ lệch pixel thay đổi tùy thuộc vào kích thước cửa sổ, mức độ thu phóng và phông chữ đã cài đặt, vì vậy một giá trị được mã hóa cứng có thể hoạt động trên máy này nhưng lại không hoạt động trên máy khác.

Chờ lệnh trong Selenium

Lệnh kiểm tra chỉ có thể kiểm tra những gì đã hiển thị trên màn hình, vì vậy một thao tác kiểm tra chạy quá sớm sẽ thất bại ngay cả khi ứng dụng vẫn đang hoạt động. Các lệnh chờ giải quyết vấn đề về thời gian đó.

Sau đây là các loại lệnh chờ trong Selenium

và các lệnh chờ

Đây là các lệnh sẽ đợi trang mới tải trước khi chuyển sang lệnh tiếp theo.

Ví dụ như

  • nhấp vào và chờ
  • gõAndWait
  • chọnAndWait

Mỗi lệnh trong số đó đều là một lệnh hành động thông thường với hậu tố AndWait được gắn kèm, như bước được ghi lại bên dưới cho thấy.

Bước clickAndWait được ghi lại, giữ nguyên vị trí. Selenium Tập lệnh IDE sẽ chạy cho đến khi trang tiếp theo tải xong.

chờ lệnh

Đây là các lệnh chờ một điều kiện đã chỉ định trở thành đúng trước khi tiếp tục lệnh tiếp theo (bất kể việc tải trang mới). Các lệnh này phù hợp hơn khi sử dụng trên các trang web động dựa trên AJAX thay đổi giá trị và thành phần mà không cần tải lại toàn bộ trang. Những ví dụ bao gồm:

  • chờForTitle
  • chờForTextPresent
  • chờForAlert

Hãy xem xét kịch bản Facebook dưới đây.

Biểu mẫu đăng ký Facebook hiển thị liên kết "Tại sao tôi cần cung cấp ngày sinh của mình?" trước khi nhấp vào.

Chúng tôi có thể sử dụng kết hợp “click” và “waitForTextPresent” để xác minh sự hiện diện của văn bản “Cung cấp ngày sinh nhật của bạn”.

Selenium Các bước của IDE kết hợp nhấp chuột với waitForTextPresent để đợi nhập ngày sinh của bạn.

Chúng tôi không thể sử dụng clickAndWait vì không có trang nào được tải khi nhấp vào "Tại sao tôi cần cung cấp ngày sinh của mình?" liên kết. Nếu chúng ta làm vậy, bài kiểm tra sẽ thất bại

Quy tắc tương tự cũng áp dụng cho bất kỳ nội dung nào được chèn bằng tập lệnh chứ không phải bằng điều hướng, đó là lý do tại sao Màn hình điều khiển bằng AJAX Hầu hết các trường hợp đều cần sử dụng waitFor thay vì andWait.

So sánh lệnh Assert, Verify và waitFor trong Selenium IDE

Người mới bắt đầu thường chọn sai nhóm phần mềm rồi tự hỏi tại sao bộ phần mềm lại dừng lại ở lỗi đầu tiên, hoặc tại sao nó báo cáo đến hai mươi lỗi mà tất cả đều không phải là lỗi đầu tiên. trace quay lại số một. Ba tiền tố trả lời ba câu hỏi khác nhau.

Tiếp đầu ngữ Những gì nó Khi thất bại Sử dụng tốt nhất cho
khẳng định Kiểm tra tình trạng ngay lập tức Ghi lại lỗi và dừng quá trình kiểm thử. Điều kiện tiên quyết — việc đăng nhập phải thành công trước khi mọi thứ khác có ý nghĩa.
xác minh Kiểm tra tình trạng ngay lập tức Ghi lại lỗi và tiếp tục với lệnh tiếp theo. Các bước kiểm tra độc lập, chẳng hạn như nhiều nhãn trên cùng một trang xác nhận.
chờ đợi Các cuộc thăm dò ý kiến ​​cho đến khi điều kiện trở thành sự thật. Ghi lại lỗi sau khi hết thời gian chờ, rồi tiếp tục. Bất cứ thứ gì xuất hiện chậm trễ — phản hồi AJAX, biểu tượng chờ, hộp thoại.

Một mô hình thực tế kết hợp cả ba: xác nhận trang bạn vừa truy cập, chờ phần tử đến một cách bất đồng bộ, sau đó xác minh từng trường riêng lẻ. Thực hiện theo thứ tự đó có nghĩa là một lỗi điều hướng sẽ làm dừng quá trình kiểm thử sớm, trong khi một số lỗi không khớp về hình thức sẽ được báo cáo trong một lần chạy duy nhất. Nguyên tắc tương tự cũng áp dụng cho Selenium Các bài kiểm tra được viết bằng mã, trong đó các phương pháp tương đương là khẳng định cứng, khẳng định mềm và chờ đợi rõ ràng.

Xác minh và chờ lệnh trong trạng thái hiện tại Selenium IDE

Firefox- Plugin IDE tạo ra các ảnh chụp màn hình ở trên đã bị ngừng hoạt động và bộ lệnh đã được xây dựng lại cho tiện ích mở rộng trình duyệt hiện tại. Một số tên tiếng Selenese vẫn được giữ lại, một số được đổi tên và một vài tên bị loại bỏ. Bảng dưới đây đối chiếu các lệnh được sử dụng trong bài viết này với các lệnh tương đương hiện nay, được lấy từ tài liệu chính thức. Selenium Tài liệu tham khảo lệnh IDE.

Lệnh Selenese cổ Lệnh trong IDE hiện tại
xác minhElementPresent xác minh sự hiện diện của phần tử
xác minhElementNotPresent xác minh phần tử không có mặt
xác minhTextPresence Xác minh văn bản (phạm vi áp dụng cho bộ định vị phần tử, không phải toàn bộ trang)
xác minhTextNotPresent Xác minh không phải văn bản (phạm vi áp dụng cho bộ định vị phần tử)
xác minh tiêu đề xác minh tiêu đề
verifyElementPositionLeft / verifyElementPositionTop Không có sự tương đương — các tuyên bố về lập trường đã bị bác bỏ.
clickAndWait, typeAndWait, selectAndWait Không có hậu tố AndWait — lệnh open đã chờ trang tải xong.
chờForElementPresent Chờ cho đến khi phần tử xuất hiện, với thời gian chờ tính bằng mili giây.
chờForAlert Hiển thị cảnh báo hoặc xác minh văn bản cảnh báo sau khi hộp thoại xuất hiện.

Hai điểm khác biệt quan trọng nhất trong công việc hàng ngày. Thứ nhất, các lệnh chờ hiện tại — chờ phần tử hiện diện, chờ phần tử hiển thị, chờ phần tử có thể chỉnh sửa và các lệnh phủ định của chúng — mỗi lệnh đều yêu cầu một khoảng thời gian chờ cụ thể tính bằng mili giây, do đó một bước chậm không còn phải chia sẻ một thời gian chờ toàn cục nữa. Thứ hai, chức năng tìm kiếm văn bản trên toàn trang đã bị loại bỏ: xác minh văn bản cần một bộ định vị, điều này thường cho kết quả kiểm tra chính xác hơn.

Các lỗi thường gặp với lệnh Verify và waitFor

Hầu hết các sự cố được báo cáo với các lệnh này không phải là lỗi của IDE. Danh sách dưới đây liệt kê các lỗi thường gặp nhất và cách khắc phục từng lỗi.

  • Phần tử tồn tại nhưng quá trình kiểm tra vẫn thất bại. Sự hiện diện và khả năng hiển thị là hai trạng thái khác nhau. Một phần tử bị ẩn sau một quy tắc CSS vẫn hiện diện trong DOM, vì vậy hãy kết hợp kiểm tra sự hiện diện với việc chờ phần tử hiển thị khi phép thử phụ thuộc vào việc người dùng thực sự nhìn thấy nó.
  • Quá trình kiểm tra văn bản thất bại khi phát hiện các từ ngữ trông giống hệt nhau. Các ký tự khoảng trắng không ngắt dòng, khoảng trắng thừa ở cuối dòng và dấu nháy đơn cong được sao chép từ tài liệu thiết kế đều làm hỏng sự khớp chính xác. Hãy gõ lại chuỗi mong muốn bằng tay thay vì dán.
  • Lệnh chờ bị hết thời gian trên một trang rõ ràng đã tải xong. Phần tử này thường nằm bên trong một iframe. Hãy chạy lệnh select frame trước, nếu không bộ định vị sẽ được đánh giá trên tài liệu không chính xác.
  • clickAndWait bị treo trên ứng dụng một trang. Không có thao tác điều hướng nào diễn ra, vì vậy không cần phải chờ đợi. Hãy thay thế nó bằng một cú nhấp chuột kèm theo lệnh waitFor thích hợp.
  • Việc kiểm tra vị trí thành công trên máy cục bộ nhưng lại thất bại trên máy chủ biên dịch. Kích thước màn hình và cách hiển thị phông chữ có thể khác nhau. Nên chọn kiểm tra sự hiện diện hoặc văn bản, hoặc thiết lập kích thước cửa sổ cụ thể ngay từ đầu bài kiểm tra.
  • Toàn bộ bộ bài dừng lại ngay khi có sự không khớp đầu tiên. Lệnh assert đã được ghi nhận trong khi đáng lẽ ra phải là lệnh verify. Hãy đổi tiền tố và chương trình sẽ báo cáo mọi lỗi thay vì chỉ lỗi đầu tiên.

Một khi kịch bản vượt qua được những cạm bẫy này, bước tiếp theo thường là... lưu trữ các giá trị thời gian chạy vào các biến. Vì vậy, các kiểm tra so sánh với dữ liệu thực chứ không phải các chuỗi được mã hóa cứng.

Câu Hỏi Thường Gặp

Môi trường phát triển tích hợp (IDE) cũ sử dụng chung một thời gian chờ toàn cục cho mọi bước waitFor, điều này đã được thay đổi bằng lệnh setTimeout. Phần mở rộng hiện tại lấy một thời gian chờ cụ thể tính bằng mili giây cho mỗi lệnh chờ, do đó, một màn hình chậm duy nhất không còn buộc mọi bước khác phải chờ lâu như vậy nữa.

Không. Lệnh Pause luôn tạm dừng trong toàn bộ thời gian quy định, vì vậy nó sẽ lãng phí thời gian khi trang tải nhanh và vẫn không hoạt động khi trang tải chậm. Chỉ nên sử dụng lệnh này để minh họa một bước nào đó trong quá trình trình diễn, tuyệt đối không sử dụng trong một bộ kiểm thử mà bạn dự định chạy lặp đi lặp lại.

Nó không làm vậy. "Sự hiện diện" có nghĩa là nút đó tồn tại trong DOM, điều này vẫn đúng ngay cả đối với các phần tử bị ẩn bởi CSS hoặc được định vị ngoài màn hình. Khi việc kiểm tra phụ thuộc vào việc người dùng nhìn thấy thứ gì đó, hãy thêm điều kiện "chờ phần tử hiển thị" cùng với kiểm tra sự hiện diện.

Đúng vậy, và IDE hiện tại yêu cầu điều đó. Lệnh xác minh văn bản của nó nhận một bộ định vị phần tử cộng với chuỗi mong muốn, điều này nghiêm ngặt hơn so với tìm kiếm toàn trang cũ và ngăn một mục menu không liên quan đáp ứng được điều kiện mà nó vốn không được thiết kế để đáp ứng.

Code Lệnh `export` chuyển đổi mỗi lệnh thành một câu lệnh tương đương trong ngôn ngữ đích, do đó bước chờ trở thành một thao tác chờ rõ ràng của WebDriver. Hãy đọc kỹ tệp được tạo ra trước khi tin tưởng nó, vì thời gian chờ và hành vi lỗi mềm so với lỗi cứng không phải lúc nào cũng được giữ nguyên sau khi chuyển đổi.

Các mô hình học máy đọc dữ liệu chạy lịch sử và gắn cờ các bước bị lỗi không thường xuyên thay vì liên tục, đó là dấu hiệu của việc thiếu thời gian chờ. Việc sửa chữa bộ định vị hỗ trợ bởi AI giải quyết nguyên nhân phổ biến khác bằng cách đề xuất một bộ chọn mới khi có sự thay đổi về đánh dấu.

Nó xử lý phần cơ học rất tốt — biến bước chờ thành WebDriverWait với điều kiện mong đợi. RevHãy xem xét thời gian chờ và điều kiện mà nó chọn, vì điều kiện hiện diện được tạo ra thường cần phải là điều kiện về khả năng hiển thị.

Các bộ định vị được đánh giá dựa trên tài liệu hiện đang được chọn, và iframe là một tài liệu riêng biệt. Hãy chạy lệnh chọn khung trước, sau đó chạy lệnh kiểm tra, và quay lại tài liệu chính sau đó để các bước tiếp theo không tìm kiếm trong ngữ cảnh sai.

Tóm tắt bài viết này với: