Selenium Tiện ích mở rộng cốt lõi (User-Extensions.js)

⚡ Tóm tắt thông minh

Selenium Các phần mở rộng cốt lõi, còn được gọi là phần mở rộng người dùng, bổ sung các hành động, trình truy cập và chiến lược định vị tùy chỉnh cho Selenium IDE bằng cách đính kèm JavaCác hàm kịch bản cho Selenium và các đối tượng nguyên mẫu PageBot khi IDE khởi động.

  • 🔘 Ba trụ cột: Mỗi lệnh Selenese đều là một hành động, một truy cập hoặc khẳng định, hoặc một chiến lược định vị.
  • ☑️ Quy tắc đặt tên: Các thao tác bắt đầu bằng do, các thao tác truy cập bắt đầu bằng get hoặc is, và các thao tác định vị bắt đầu bằng locateElementBy.
  • ✅ Lệnh chờ miễn phí: Việc đăng ký doTextUpperCase sẽ giúp IDE tự động tạo textUpperCaseAndWait.
  • 🧪 Cơ chế tải: Môi trường phát triển tích hợp (IDE) đọc tệp user-extensions.js khi khởi động, vì vậy công cụ này phải được khởi động lại sau mỗi lần chỉnh sửa.
  • 🛠️ Trạng thái cũ: Selenium Cốt lõi và Firefox- Các IDE plugin đã bị ngừng hoạt động và Selenium 3 đã loại bỏ hỗ trợ mở rộng người dùng khỏi các gói jar.
  • 📊 Tuyến đường hiện đại: Môi trường phát triển tích hợp (IDE) hiện tại dành cho tiện ích mở rộng trình duyệt cung cấp một tệp kê khai plugin và một lệnh thực thi tập lệnh.

Selenium Các phần mở rộng cốt lõi và tệp user-extensions.js

Selenium Tiện ích mở rộng cốt lõi

Để hiểu về phần mở rộng, trước tiên chúng ta hãy tìm hiểu ba trụ cột của nó. Selenium IDEMỗi lệnh bạn ghi lại hoặc nhập vào IDE đều thuộc một trong ba loại dưới đây, và mỗi ảnh chụp màn hình cho thấy loại lệnh đó xuất hiện như thế nào trong danh sách lệnh của IDE.

  1. Hoạt động: Bạn đang thực hiện thao tác gì trên màn hình giao diện người dùng?

    Selenium Danh sách lệnh IDE hiển thị các lệnh hành động như nhấp chuột và gõ.

  2. Bộ truy cập / Khẳng định: Bạn thực hiện xác minh nào đối với dữ liệu nhận được từ giao diện người dùng?

    Selenium Các lệnh truy cập và xác nhận của IDE được đặt tiền tố bằng get, is, verify và assert

  3. Chiến lược định vị: Cách bạn tìm thấy phần tử đó trong giao diện người dùng.

    Selenium Các chiến lược định vị hộp mục tiêu IDE như id, name, css và xpath

Selenium IDE được tích hợp sẵn một thư viện hoàn thiện, đã bao gồm rất nhiều thao tác, phương thức truy cập, xác nhận và chiến lược định vị.

Tuy nhiên, đôi khi một dự án cần chức năng không có trong thư viện đó. Trong trường hợp đó, bạn có thể mở rộng thư viện bằng cách thêm phần mở rộng tùy chỉnh của riêng mình. Các phần mở rộng tùy chỉnh này được gọi là tiện ích mở rộng tùy chỉnh (custom extensions). tiện ích mở rộng người dùng.

Ví dụ, giả sử bạn cần một thao tác chuyển đổi văn bản thành chữ in hoa trước khi điền vào một phần tử web. Không có thao tác nào như vậy trong thư viện mặc định, vì vậy bạn cần tạo tiện ích mở rộng của riêng mình. Trong hướng dẫn này, bạn sẽ học cách xây dựng một tiện ích mở rộng người dùng để chuyển đổi văn bản thành chữ in hoa.

⚠️ Trước khi bắt đầu: Quy trình làm việc được mô tả ở đây thuộc về Selenium Cốt lõi và bản gốc Firefox-cắm vào Selenium IDE. Selenium Nhân hệ điều hành cốt lõi đã bị loại bỏ và tính năng hỗ trợ tiện ích mở rộng của người dùng cũng đã bị ngừng cung cấp. Selenium lọ trong Selenium 3. Các bước và đoạn mã bên dưới được giữ nguyên vì một số lượng lớn các bộ ứng dụng Selenese cũ vẫn phụ thuộc vào chúng; phương pháp thay thế hiện đại sẽ được mô tả sau trong bài viết này.

Yêu cầu tạo ra một Selenium Tiện ích mở rộng người dùng

Để tạo tiện ích mở rộng người dùng cho Selenium Bạn cần nắm vững các khái niệm cơ bản về IDE. JavaScript và đặc biệt, JavaĐối tượng nguyên mẫu kịch bản. Sơ đồ bên dưới hiển thị hai đối tượng nguyên mẫu mà tiện ích mở rộng của người dùng gắn vào.

Sơ đồ của Selenium nguyên mẫu và các đối tượng nguyên mẫu PageBot được sử dụng bởi tiện ích mở rộng của người dùng.

Để tạo tiện ích mở rộng người dùng của bạn, bạn viết JavaViết các phương thức kịch bản và thêm chúng vào. Selenium nguyên mẫu đối tượng và nguyên mẫu đối tượng PageBot.

Làm thế nào Selenium IDE nhận diện tiện ích mở rộng của người dùng

Sau khi tiện ích mở rộng người dùng được thêm vào Selenium IDE và khi IDE được khởi động, mọi chức năng được đăng ký trên đó đều được ghi lại. JavaCác nguyên mẫu kịch bản đã được tải và Selenium IDE nhận diện từng lệnh bằng tên của nó. Đó là lý do tại sao các tiền tố đặt tên trong phần tiếp theo không phải là lựa chọn về kiểu dáng — mà là cách IDE phân loại lệnh của bạn.

Cách tạo tiện ích mở rộng người dùng

Bước 1) Hành động – mọi hành động đều bắt đầu bằng doNếu thao tác chuyển đổi văn bản thành chữ hoa, tên của nó là... doTextUpperCaseKhi bạn thêm phương thức hành động này vào Selenium IDE tự nó tạo ra một phương thức chờ tương ứng, vì vậy doTextUpperCase cũng tạo ra hàm chờ textUpperCaseAndWaitPhương pháp này có thể chấp nhận hai tham số.

Ví dụ: Hành động văn bản viết hoa

Selenium.prototype.doTextUpperCase = function(locator, text) {
// Here findElement is itself capable to handle all type of locator(xpath,css,name,id,className), We just need to pass the locator text
var element = this.page().findElement(locator);

// Create the text to type
text = text.toUpperCase();

// Replace the element text with the new text
this.page().replaceText(element, text);
};

Bước 2) Bộ truy cập / Khẳng định – tất cả các thiết bị truy cập đã đăng ký trên Selenium Nguyên mẫu đối tượng được đặt tiền tố bởi được or isVí dụ như getValueFromCompoundTable hoặc isValueFromCompoundTable. Một phương thức truy cập có thể chấp nhận hai tham số, một cho mục tiêu và một cho trường giá trị trong trường hợp kiểm thử. Ảnh chụp màn hình bên dưới cho thấy các tiền tố đó xuất hiện như thế nào sau khi phần mở rộng được tải.

Selenium IDE hiển thị các lệnh get và is accessor được tạo từ tiện ích mở rộng của người dùng.

Đối với mỗi phụ kiện, Selenium IDE tạo ra các hàm xác minh tương ứng có tiền tố là xác minh và khẳng định, cộng thêm một hàm chờ có tiền tố là chờ đợi.

Ví dụ: Đối với trình truy cập văn bản viết hoa

Selenium.prototype.assertTextUpperCase = function(locator, text) {
// All locator-strategies are automatically handled by "findElement"
var element = this.page().findElement(locator);

// Create the text to verify
text = text.toUpperCase();

// Get the actual element value
var actualValue = element.value;

// Make sure the actual value matches the expected
Assert.matches(expectedValue, actualValue);
};

Selenium.prototype.isTextEqual = function(locator, text) {
return this.getText(locator).value===text;
};

Selenium.prototype.getTextValue = function(locator, text) {
return this.getText(locator).value;
};

Bước 3) Chiến lược định vị – Nếu bạn muốn tạo hàm riêng để định vị một phần tử, hãy mở rộng nguyên mẫu PageBot với một hàm có tiền tố là locateElementByHàm này nhận hai tham số: chuỗi định vị và tài liệu mà trong đó cần tìm kiếm phần tử.

Ví dụ: Đối với Trình định vị văn bản chữ hoa

// The "inDocument" is a document you are searching.
PageBot.prototype.locateElementByUpperCase = function(text, inDocument) {
// Create the text to search for
var expectedValue = text.toUpperCase();

// Loop through all elements, looking for ones that have
// a value === our expected value
var allElements = inDocument.getElementsByTagName("*");
// This star '*' is a kind of regular expression it will go through every element (in HTML DOM every element surely have a tag name like<body>,<a>,<h1>,<table>,<tr>,<td> etc. ). Here our motive is to find an element which matched with the Upper Case text we have passed so we will search it with all elements and when we get match we will have the correct web element.
for (var i = 0; i < allElements.length; i++) {
var testElement = allElements[i];
if (testElement.innerHTML && testElement.innerHTML === expectedValue) {
return testElement;
}
}
return null;
};

Lưu cả ba hàm vào một tệp duy nhất có tên là... user-extensions.jsTệp tin này đơn giản. JavaĐây là dạng kịch bản, vì vậy bất kỳ trình soạn thảo văn bản nào cũng đều phù hợp.

Hướng dẫn sử dụng tiện ích mở rộng Core mới được tạo

Việc tải tập tin là một quy trình gồm bốn bước trong phiên bản gốc. Firefox-plugin IDE. Mỗi ảnh chụp màn hình bên dưới tương ứng với bước được đánh số bên cạnh.

  1. Đến phần Selenium IDE và nhấp chuột Tùy chọn -> Tùy chọn…

    Selenium Menu Tùy chọn IDE được mở để truy cập hộp thoại Tùy chọn

  2. Trong tạp chí Tổng quan trong phần này, chọn vị trí của mục vừa tạo. Selenium Phần mở rộng cốt lõi.

    Selenium Hộp thoại Tùy chọn IDE, tab Chung với Selenium Trường đường dẫn tệp mở rộng cốt lõi

  3. Nhấp chuột OK và khởi động lại Selenium SDI.

    Thông báo xác nhận sẽ hiển thị khi Selenium IDE được khởi động lại để tải tệp mở rộng.

  4. Bạn sẽ tìm thấy phần mở rộng trong danh sách lệnh.

    Selenium Menu thả xuống lệnh IDE liệt kê lệnh textUpperCase mới từ user-extensions.js

Selenium Các phần mở rộng cốt lõi so với Selenium Tiện ích mở rộng IDE

Hai thuật ngữ này được sử dụng thay thế cho nhau trong các tài liệu cũ hơn, nhưng chúng mô tả các lớp khác nhau, và sự khác biệt này rất quan trọng khi bạn quyết định đặt logic tùy chỉnh ở đâu.

Yếu tố Selenium Phần mở rộng cốt lõi Selenium Tiện ích mở rộng IDE
Những gì nó mở rộng Thư viện lệnh Selenese được sử dụng trong quá trình phát lại. Chính ứng dụng IDE đó
Tệp đã được tải user-extensions.js user-extensions-ide.js trong IDE cũ, một tệp kê khai plugin trong IDE hiện tại.
Sử dụng điển hình Các hành động, truy cập và chiến lược định vị mới Các mục menu, bảng điều khiển, định dạng và hành vi của trình ghi mới
Các vật thể được chạm vào Selenium.prototype và PageBot.prototype API trình soạn thảo và ghi của IDE
Chạy trong Thực hiện kiểm tra Soạn thảo và ghi âm

Nói tóm lại, một tiện ích mở rộng Core thay đổi những gì một bài kiểm tra có thể làm, trong khi một tiện ích mở rộng IDE thay đổi những gì công cụ đó có thể làm.

Cách thức hiện đại Selenium IDE thay thế user-extensions.js

Firefox-cắm vào Selenium IDE ngừng hoạt động khi Firefox Đã chuyển sang kiến ​​trúc WebExtensions, và môi trường phát triển tích hợp (IDE) được viết lại thành Chrome. Firefox và tiện ích mở rộng trình duyệt Edge. Việc viết lại đó đã loại bỏ trường Tùy chọn được hiển thị ở trên, vì vậy không có chỗ nào để trỏ đến tệp user-extensions.js. Hai phương án thay thế được hỗ trợ đều bao quát cùng một vấn đề.

  • Lệnh thực thi tập lệnh. Chỉ áp dụng một lần JavaTập lệnh, thêm một thực thi kịch bản or thực thi tập lệnh bất đồng bộ Thực hiện trực tiếp bước kiểm thử và lưu kết quả vào một biến. Đây là cách gần nhất để thực hiện một hành động tùy chỉnh nhỏ.
  • Một plugin. Để sử dụng lại các lệnh, hãy xây dựng một tiện ích mở rộng trình duyệt đăng ký tệp kê khai với IDE. Tệp kê khai này khai báo mỗi lệnh mới với một ID, tên, kiểu dữ liệu tùy chọn và tài liệu hướng dẫn, đồng thời cũng có thể khai báo các bộ định vị mới.

Tệp kê khai được đăng ký bằng cách gửi một thông báo đến tiện ích mở rộng IDE, như được hiển thị trong tài liệu chính thức. Selenium Tài liệu plugin IDE.

browser.runtime.sendMessage(SIDE_ID, {
uri: "/register",
verb: "post",
payload: {
name: "Selenium IDE plugin",
version: "1.0.0",
commands: [
{ id: "textUpperCase", name: "text upper case" }
]
}
}).catch(console.error);

Nguyên tắc đặt tên vẫn được duy trì sau quá trình chuyển đổi: một lệnh plugin vẫn được khai báo một lần và sau đó được sử dụng lại trong mọi bài kiểm tra, giống hệt như một tiện ích mở rộng của Core.

Các tiện ích mở rộng và plugin phổ biến được sử dụng trong Selenium IDE

Các tiện ích bổ sung bên dưới là những tiện ích được sử dụng rộng rãi nhất trong IDE cũ. Một số trong số chúng, chẳng hạn như điều khiển luồng và chụp ảnh màn hình khi xảy ra lỗi, hiện đã được tích hợp vào IDE hiện tại hoặc có sẵn dưới dạng các plugin được duy trì.

Họ tên Mục đích
Yêu thích Đánh dấu bộ kiểm thử yêu thích và thực thi nó chỉ với một cú nhấp chuột.
Thí điểm Flex X Để tự động hóa dựa trên Flex
FlexMonkium Để ghi và phát lại dựa trên Adobe Flex thử nghiệm in Selenium IDE
Ghi nhật ký tệp Để lưu nhật ký vào một tập tin
Kiểm soát lưu lượng Để kiểm soát luồng thực hiện kiểm thử
Làm nổi bật các yếu tố Để đánh dấu một điều khiển web
Chờ đợi ngầm Chờ đợi một phần tử trong một khoảng thời gian nhất định.
Ảnh chụp màn hình không thành công Chụp ảnh màn hình khi thất bại
Kết quả kiểm tra Lưu trường hợp thử nghiệm kết quả cho một bộ thử nghiệm chỉ bằng một cú nhấp chuột

Các cũ SeleniumTrang tải xuống của HQ chứa các tập tin này hiện không còn tồn tại. Các plugin hiện tại và IDE được phân phối từ... Selenium Trang web dự án IDE và từ Chrome, Firefox và các cửa hàng tiện ích bổ sung của Edge.

Tải về Selenium Phần mở rộng cốt lõi được sử dụng trong Hướng dẫn này

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

Tên thông thường là user-extensions.js, còn các tiện ích bổ sung ở cấp độ IDE sử dụng user-extensions-ide.js. IDE cũ cho phép bạn trỏ đến bất kỳ đường dẫn nào, vì vậy tên này chỉ là quy ước chứ không phải là yêu cầu bắt buộc, nhưng vẫn giữ nguyên.ping Nó giúp dễ dàng nhận biết các phòng chung hơn.

Các hàm nguyên mẫu chỉ được đọc trong khi IDE đang tải, vì vậy bất kỳ chỉnh sửa nào được thực hiện sau khi khởi động sẽ bị bỏ qua. Hãy lưu tệp, đóng hoàn toàn IDE và mở lại. JavaLỗi cú pháp trong tập lệnh cũng khiến toàn bộ tập tin không thể tải một cách im lặng.

Mở bảng điều khiển trình duyệt và khởi chạy lại IDE, sau đó theo dõi lỗi phân tích cú pháp trên tệp. Thêm dòng `console.log` ở đầu tệp sẽ xác nhận xem tệp đã được tải thành công hay chưa trước khi bạn bắt đầu gỡ lỗi từng hàm riêng lẻ.

Bạn chỉ viết phiên bản có tiền tố "do". Selenium IDE sẽ tự động tạo biến thể AndWait cho bạn, biến thể này thực hiện cùng một thao tác và sau đó chờ cho đến khi trang tải xong. Hãy sử dụng dạng AndWait khi hành động kích hoạt điều hướng.

Các mô hình học máy có thể soạn thảo mã mẫu cho một lệnh mới và đề xuất chiến lược định vị từ ảnh chụp nhanh trang. Việc sửa lỗi định vị có sự hỗ trợ của AI cũng hữu ích ở đây, bởi vì hàm locateElementBy tùy chỉnh chính là đoạn mã bị lỗi khi cấu trúc đánh dấu thay đổi.

Một phần. Copilot tái tạo lại SeleniumCác mẫu .prototype và PageBot.prototype xuất hiện rộng rãi trong các kho lưu trữ cũ hơn, nhưng chúng có thể tạo ra các phương thức hỗ trợ chưa từng tồn tại. Hãy kiểm tra mọi lệnh gọi được đề xuất so với tài liệu tham khảo lệnh Selenese trước khi tin tưởng chúng.

Đúng vậy. Một tệp chỉ chứa hàm locateElementBy trên PageBot.prototype là hợp lệ. Chiến lược mới này sau đó sẽ khả dụng cho mọi lệnh hiện có, vì vậy click, type và assert đều có thể nhắm mục tiêu vào các phần tử thông qua nó.

Selenium RC đã chấp nhận tệp mở rộng người dùng thông qua bộ chuyển mạch máy chủ, nhưng RC và Selenium Các lõi đã được loại bỏ trong Selenium 3. WebDriver không có hook tương đương, vì vậy logic tương tự được viết dưới dạng một phương thức trợ giúp thông thường trong framework kiểm thử của bạn.

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