Lưu trữ các biến, tiếng vang, cảnh báo, xử lý PopUp trong Selenium IDE

⚡ Tóm tắt thông minh

Lưu trữ các lệnh trong Selenium Môi trường phát triển tích hợp (IDE) lưu các giá trị thời gian chạy vào các biến có tên, in chúng ra nhật ký bằng lệnh `echo`, và một nhóm lệnh chuyên dụng xử lý các cảnh báo, hộp thoại xác nhận và chuyển đổi giữa nhiều cửa sổ trình duyệt.

  • 🔘 Tạo một biến: Lệnh lưu trữ lấy giá trị trong Target và tên biến trong Value.
  • ☑️ Đọc lại nhé: Hãy đặt tên trong dấu ngoặc nhọn ${ } ở bất cứ nơi nào lệnh chấp nhận mục tiêu hoặc giá trị.
  • In ra để gỡ lỗi: Lệnh `echo` ghi trực tiếp một chuỗi ký tự hoặc một biến vào nhật ký của IDE.
  • 🧪 Các cảnh báo được tự động chấp nhận: IDE sẽ tự động nhấp OK cho bạn, vì vậy hãy sử dụng storeAlert để thu thập văn bản thông báo.
  • 🛠️ Việc xác nhận cần có quyết định: Đặt lệnh `chooseOkOnNextConfirmation` trước lệnh mở hộp thoại.
  • 📊 Chuyển đổi cửa sổ: selectWindow nhắm mục tiêu vào tiêu đề cửa sổ, và mục tiêu rỗng sẽ trả về cửa sổ cha.

Lưu trữ các biến, xử lý phản hồi, cảnh báo và cửa sổ bật lên trong Selenium IDE

Trong hướng dẫn này, bạn sẽ học các lệnh store, lệnh echo, và cách xử lý cảnh báo và cửa sổ bật lên trong Selenium IDEKết hợp các lệnh này sẽ biến một kịch bản đã được ghi lại cố định thành một kịch bản phản ứng với bất kỳ giá trị nào mà ứng dụng trả về trong quá trình chạy.

⚠️ 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, và các lệnh sử dụng tên tiếng Selenese theo kiểu camelCase. Phiên bản Chrome hiện tại, Firefox Tiện ích mở rộng Edge vẫn giữ nguyên hành vi nhưng viết hầu hết các tên lệnh có dấu cách. Một bản đồping Bảng này xuất hiện gần cuối bài viết, và mọi lệnh gốc cũng như ảnh chụp màn hình đều được giữ nguyên như khi công bố.

Selenium Biến IDE

Cửa Hàng

Để lưu trữ các biến trong Selenium IDE, chúng tôi sử dụng hàng lệnh. Hình minh họa bên dưới lưu giá trị “tutorial” vào một biến có tên là “myVariable”.

Selenium Lệnh lưu trữ IDE với giá trị hướng dẫn được lưu vào myVariable

Để truy cập biến, chỉ cần đặt nó trong ký hiệu ${ … }. Ví dụ, để nhập giá trị của “myVariable” vào ô văn bản “userName” của Mercury Chuyến tham quan, nhập ${myVariable} vào trường Giá trị.

Selenium Nhập lệnh IDE bằng cách sử dụng ${myVariable} trong trường Giá trị của hộp văn bản userName

Lệnh Echo trong Selenium IDE

Một biến được lưu trữ sẽ vô hình cho đến khi có thứ gì đó in nó ra, và đó chính là điều mà... bỏ lỡ Lệnh này thực hiện điều đó. Nó ghi một thông báo vào ngăn nhật ký IDE trong quá trình phát lại, đây là cách nhanh nhất để xác nhận rằng lệnh lưu trữ đã thu thập được những gì bạn mong đợi trước khi bạn xây dựng các khẳng định dựa trên đó.

Lệnh này chấp nhận một trong hai dạng sau:

  • Một chuỗi ký tự theo nghĩa đen. Đặt văn bản vào trong Target ví dụ như trường Bước đăng nhập đã hoàn tất, để đánh dấu một điểm kiểm tra trong một kịch bản dài.
  • Một biến số. Đặt ${myVariable} vào Target Trường đó và giá trị được lưu trữ sẽ được in ra thay vì tên.

Hai thói quen sau khiến lệnh echo hữu ích hơn nhiều so với vẻ ngoài ban đầu của nó. In biến ngay sau lệnh lưu trữ tạo ra nó, để khi xảy ra lỗi thì... tracTập trung vào việc ghi lại thay vì xác nhận sau hai mươi bước. Và hãy thêm tiền tố là bước mà nó thuộc về vào mỗi thông báo, vì ngăn nhật ký hiển thị mọi lệnh trong một danh sách phẳng. Lưu ý rằng lệnh `echo` chỉ ghi vào nhật ký — nó không bao giờ thay đổi trang và không bao giờ thất bại trong quá trình kiểm tra, vì vậy bạn có thể để nó trong tập lệnh vĩnh viễn một cách an toàn.

Cửa hàngElementHiện tại

Lệnh này lưu trữ giá trị “true” hoặc “false” tùy thuộc vào sự hiện diện của phần tử được chỉ định. Đoạn mã bên dưới lưu trữ giá trị Boolean “true” vào “var1” và “false” vào “var2”. Để kiểm tra, chúng ta sẽ sử dụng lệnh echo để hiển thị giá trị của var1 và var2. Cơ sở URL Đối với hình minh họa bên dưới, giá trị được đặt là... Mercury Trang chủ các tour du lịch.

Selenium IDE storeElementPresent lưu giá trị true vào var1 và false vào var2, được hiển thị trong nhật ký.

Cửa hàngVăn bản

Lệnh này được sử dụng để lưu trữ nội dung văn bản bên trong của một phần tử vào một biến. Hình minh họa bên dưới lưu trữ nội dung văn bản bên trong thẻ h1 trên trang đăng ký Facebook vào một biến có tên là “textVar”.

Selenium Lệnh storeText của IDE đọc css=h1 vào biến textVar.

Vì đây là phần tử duy nhất thuộc loại này trên trang, nên việc sử dụng “css=h1” làm thuộc tính mục tiêu là an toàn. Hình ảnh bên dưới minh họa điều đó. Selenium IDE đã có thể lưu chuỗi "Sign Up" vào biến "textVar" vì lệnh echo đã in giá trị của nó một cách chính xác.

Selenium Thông báo lỗi trong cửa sổ nhật ký IDE hiển thị "Sign Up" dưới dạng giá trị được lưu trữ trong biến textVar.

Cảnh báo, Cửa sổ bật lên và Nhiều Windows

Thông báo có lẽ là dạng cửa sổ bật lên đơn giản nhất. Phổ biến nhất là... Selenium Các lệnh IDE được sử dụng để xử lý cảnh báo như sau:

Cảnh báo Sử dụng

khẳng địnhAlert

khẳng địnhNotAlert

Hàm này truy xuất thông báo cảnh báo và so sánh nó với một giá trị chuỗi mà bạn đã chỉ định.

khẳng địnhAlertHiện tại

khẳng địnhAlertNotPresent

Xác nhận xem có cảnh báo hay không.
cửa hàngCảnh báo Truy xuất thông báo cảnh báo và lưu trữ nó vào một biến do bạn chỉ định.
cửa hàngAlertHiện tại Trả về TRUE nếu có cảnh báo, ngược lại trả về FALSE.

xác minhAlert

xác minhNotAlert

Truy xuất thông báo cảnh báo và xác minh xem nó có bằng giá trị chuỗi mà bạn đã chỉ định hay không.

xác minhAlertPresent

xác minhAlertNotPresent

Kiểm tra xem có cảnh báo hay không.

Hãy nhớ hai điều sau khi làm việc với cảnh báo:

  • Selenium IDE tự động nhấn nút OK của cửa sổ cảnh báo, vì vậy bạn sẽ không thể nhìn thấy cảnh báo thực tế.
  • Selenium IDE không thể xử lý các thông báo xuất hiện bên trong hàm onload() của trang. Nó chỉ xử lý các thông báo được tạo ra sau khi trang đã tải hoàn toàn.

Trong ví dụ này, chúng ta sử dụng lệnh storeAlert để cho thấy rằng mặc dù Selenium Mặc dù IDE không hiển thị cảnh báo thực tế, nhưng nó vẫn có thể truy xuất được thông báo.

Bước 1) In Selenium IDE, thiết lập Base URL đến http://jsbin.com. Toàn bộ URL Đây là http://jsbin.com/usidix. Các đoạn mã jsbin này có từ... Firefox-Lỗi này đã lỗi thời và có thể không còn khắc phục được; bất kỳ trang nào có nút hiển thị thông báo đều cho kết quả tương tự.

Bước 2) Hãy tạo đoạn mã như hình bên dưới. Lệnh click nhắm mục tiêu vào nút Go!, lệnh storeAlert thu thập thông báo vào biến alertMessage, và lệnh echo in ra thông báo đó.

Selenium Tập lệnh IDE với các lệnh click, storeAlert và echo đối với trang demo cảnh báo jsbin.

Bước 3) Hãy chạy đoạn mã, nhưng đừng mong đợi sẽ thấy thông báo thực tế. Khung nhật ký bên dưới hiển thị thông báo đã được ghi lại mặc dù hộp thoại chưa bao giờ được hiển thị.

Selenium Nhật ký IDE hiển thị văn bản cảnh báo được lấy bởi storeAlert sau khi phát lại.

Xác nhận

Thông báo xác nhận là các cửa sổ bật lên hiển thị nút OK và HỦY, trái ngược với thông báo chỉ hiển thị nút OK. Các lệnh bạn có thể sử dụng để xử lý thông báo xác nhận tương tự như các lệnh trong thông báo.

  • assertConfirmation / assertNotConfirmation
  • assertConfirmationPresent / assertConfirmationNotPresent
  • cửa hàngXác nhận
  • cửa hàngXác nhậnHiện tại
  • Xác nhận xác thực / Xác nhận không xác thực
  • verifyConfirmationPresent / verifyConfirmationNotPresent

Ngoài ra, các lệnh này cho biết Selenium Nên chọn nút nào, OK hay HỦY?

  • chooseOkOnNextConfirmation / chooseOkOnNextConfirmationAndWait
  • chọnHủyBậtTiếp theoXác nhận

Đặt các lệnh này trước lệnh kích hoạt hộp thoại xác nhận, để Selenium IDE biết trước tùy chọn nào cần chọn. Một lần nữa, bạn sẽ không thấy hộp thoại xác nhận thực tế trong quá trình thực thi kịch bản.

Chúng ta hãy thử nghiệm một trang web có nút được lập trình để báo cáo xem người dùng đã nhấn OK hay HỦY.

Bước 1) In Selenium IDE, thiết lập Base URL đến http://jsbin.com. Toàn bộ URL Đây là http://jsbin.com/enifaf.

Bước 2) Hãy tạo kịch bản như hình bên dưới. Lần này chúng ta sẽ nhấn nút OK trước.

Selenium Đoạn mã IDE đặt hàm `chooseOkOnNextConfirmation` trước thao tác nhấp chuột mở hộp thoại.

Bước 3) Chạy đoạn mã và bạn sẽ thấy không có thông báo xác nhận thực tế, nhưng trang web vẫn hiển thị nút nào đã được nhấn. Selenium IDE đã được nhấn.

Trang kiểm tra thông báo rằng nút OK trong hộp thoại xác nhận đã được nhấn.

Bước 4) Thay thế lệnh chooseOkOnNextConfirmation bằng chooseCancelOnNextConfirmation và chạy lại tập lệnh. Trang web giờ đây sẽ hiển thị lựa chọn ngược lại.

Selenium Đã chỉnh sửa tập lệnh IDE để sử dụng chooseCancelOnNextConfirmation thay vì chooseOkOnNextConfirmation.

nhiều Windows

Nếu bạn nhấp vào một liên kết mở ra một cửa sổ riêng biệt, trước tiên bạn phải hướng dẫn Selenium Trong IDE, bạn cần chọn cửa sổ đó trước khi có thể truy cập các phần tử bên trong. Trong các IDE cũ, bạn sử dụng tiêu đề của cửa sổ làm định vị.

Chúng ta sử dụng lệnh selectWindow để chuyển đổi giữa các cửa sổ.

Chúng ta sẽ sử dụng liên kết http://jsbin.com/ocinaj/1, có tiêu đề là “Cửa sổ đầu tiên”. Liên kết “ở đây” trên trang đó sẽ mở Facebook trong một cửa sổ mới, sau đó chúng ta sẽ hướng dẫn Selenium IDE để thực hiện những việc sau:

  • Chuyển quyền điều khiển từ cửa sổ chính sang cửa sổ Facebook mới được mở bằng lệnh selectWindow, sử dụng tiêu đề cửa sổ làm tham số định vị.
  • Kiểm tra tiêu đề của cửa sổ mới.
  • Chọn lại cửa sổ ban đầu bằng lệnh selectWindow với mục tiêu là “null”.
  • Kiểm tra tiêu đề của cửa sổ hiện đang được chọn.

Kế hoạch trên được thể hiện qua chuỗi bốn bước như sau.

Sơ đồ minh họa quá trình chuyển đổi từ cửa sổ chính sang cửa sổ mới và ngược lại.

Bước 1) Đặt cơ sở URL đến http://jsbin.com.

Bước 2) Tạo tập lệnh như hiển thị bên dưới.

Selenium Đoạn mã IDE sử dụng selectWindow, pause và verifyTitle để di chuyển giữa hai cửa sổ.

Chúng ta cần lệnh tạm dừng để đợi cửa sổ mới được mở tải xong trước khi có thể đọc tiêu đề của nó.

Bước 3) Thực thi kịch bản. Lưu ý rằng trường hợp thử nghiệm Đã vượt qua, nghĩa là chúng tôi có thể chuyển đổi giữa các cửa sổ và xác minh tiêu đề của chúng một cách thành công.

Kết quả chuyền bóng xanh Selenium IDE sau khi cả hai tiêu đề cửa sổ đã được xác minh

Hãy luôn nhớ rằng việc đặt mục tiêu selectWindow thành “null” sẽ tự động chọn cửa sổ cha — trong trường hợp này là cửa sổ chứa phần tử “link=here”.

Lưu ý: Facebook đã thay đổi tiêu đề trang của họ kể từ khi hướng dẫn này được tạo ra. Hãy sửa đổi tiêu đề dự kiến ​​trong đoạn mã cho phù hợp.

hiện đại Selenium Các lệnh tương đương trong IDE

Firefox- Plugin IDE đã bị ngừng hoạt động khi Firefox đã chuyển sang kiến ​​trúc WebExtensions, và Chrome hiện tại, Firefox Và tiện ích mở rộng Edge đã đổi tên hầu hết các lệnh Selenese thành dạng có khoảng trắng. Hành vi không thay đổi, vì vậy bảng bên dưới là tất cả những gì bạn cần để đọc các tập lệnh ở trên đối với bản cài đặt hiện tại.

Lệnh cũ trong hướng dẫn này Current Selenium Lệnh IDE
hàng hàng
bỏ lỡ bỏ lỡ
storeText lưu trữ văn bản
storeElementPresent Lưu trữ phần tử hiện có (hoặc khẳng định phần tử hiện có)
assertAlert / verifyAlert khẳng định cảnh báo / xác minh cảnh báo
chọnOkOnNextConfirmation Chọn OK ở bước xác nhận tiếp theo
chọnHủyBậtTiếp theoXác nhận Chọn hủy ở lần xác nhận tiếp theo
selectWindow (title as target) Chọn cửa sổ có tay cầm=${handle}

Có hai điểm khác biệt đáng chú ý. Các lời nhắc, điều mà bài viết cũ không đề cập đến, giờ đây đã có các lệnh riêng: Trả lời ở câu hỏi tiếp theo lập kế hoạch trả lời trước khi hộp thoại xuất hiện, và webdriver trả lời khi có lời nhắc hiển thị Nhập vào cửa sổ nhắc lệnh đã mở sẵn. Và việc chuyển đổi cửa sổ không còn phụ thuộc vào tiêu đề trang nữa. Chạy tay nắm cửa sổ cửa hàng Trước tiên hãy bắt lấy một tay cầm, sau đó mới chuyển tiếp. handle=${yourHandle} để chọn cửa sổ. Thay đổi đó loại bỏ lỗi được mô tả trong ghi chú ở trên, trong đó một trang web chỉ đơn giản là đổi tên trang của nó và tập lệnh ngừng tìm kiếm cửa sổ. Chính thức Selenium Trang web dự án IDE Liệt kê toàn bộ tập lệnh hiện tại.

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

Đúng vậy. ${myVariable} và ${myvariable} tham chiếu đến hai biến khác nhau, và việc tham chiếu đến một biến chưa từng được lưu trữ sẽ trả về một chuỗi rỗng thay vì báo lỗi. Hãy duy trì một quy ước đặt tên nhất quán trong toàn bộ bộ kiểm thử để tránh các khoảng trắng không được ghi nhận.

Đúng vậy. Cú pháp ${ } được mở rộng trong bất kỳ Target hoặc trường Giá trị, vì vậy nó hoạt động bên trong một lệnh đang mở, một XPath hoặc một bộ chọn CSS. Đó là cách một kịch bản đã ghi được chuyển đổi thành một kịch bản được điều khiển bởi dữ liệu đã thu thập được trước đó trong quá trình chạy.

Selenese không có toán tử toán học. Hãy sử dụng lệnh thực thi tập lệnh với một số ít JavaBiểu thức kịch bản đọc biến và trả về kết quả, sau đó lưu trữ giá trị trả về đó. Hãy nhớ rằng mọi giá trị được lưu trữ đều ở dạng chuỗi, vì vậy hãy chuyển đổi nó trước.

Hãy coi chúng như các biến cục bộ chỉ thuộc về một bài kiểm tra duy nhất. Việc dựa vào giá trị được thiết lập bởi một bài kiểm tra trước đó sẽ làm cho thứ tự thực thi của bộ kiểm tra trở nên phụ thuộc vào bài kiểm tra và khó gỡ lỗi, vì vậy hãy lưu trữ những gì một bài kiểm tra cần bên trong bài kiểm tra đó, hoặc đọc nó từ một tệp dữ liệu ngay từ đầu.

Một hộp thoại cần có văn bản, không chỉ là lựa chọn nút bấm. Hãy chạy hàm trả lời ở hộp thoại tiếp theo với câu trả lời trong trường Giá trị trước lệnh mở hộp thoại, hoặc sử dụng hàm trả lời của trình điều khiển web trên hộp thoại hiển thị khi hộp thoại đã xuất hiện trên màn hình.

Các công cụ học máy có thể đề xuất một chuỗi lệnh từ mô tả bằng ngôn ngữ thông thường về một tình huống và đề xuất các bộ định vị mạnh mẽ hơn so với bộ ghi tạo ra. Việc sửa chữa bộ định vị có sự hỗ trợ của AI cũng rất hữu ích, vì việc đổi tên một phần tử thường là lý do khiến giá trị được lưu trữ trả về trống rỗng.

Vâng. Xuất bài kiểm tra sang Java or PythonSau đó, hãy để Copilot tái cấu trúc danh sách lệnh phẳng thành các đối tượng trang và các lệnh chờ có thể tái sử dụng. Kiểm tra thủ công việc xử lý cảnh báo, vì mã được tạo thường giả định một hộp thoại hiển thị mà IDE đã đóng lại.

Việc lựa chọn dựa trên tiêu đề trở nên mơ hồ và có thể chọn nhầm cửa sổ. Đây chính là lý do tại sao IDE hiện tại ưu tiên sử dụng handle: hãy bắt lấy một handle bằng cách lưu handle cửa sổ ngay sau khi cửa sổ mở, sau đó chuyển đổi bằng handle=${yourHandle}.

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