Cách chọn giá trị từ danh sách thả xuống trong Selenium

⚡ Tóm tắt thông minh

Chọn giá trị từ menu thả xuống trong Selenium Sử dụng lớp Select chuyên dụng để điều khiển các phần tử HTML SELECT. Lớp này cung cấp các phương thức selectByVisibleText, selectByValue và selectByIndex giúp chọn các tùy chọn một cách chính xác và hỗ trợ các menu thả xuống chọn nhiều mục.

  • 📦 Nhập gói: Hãy sử dụng org.openqa.selenium.support.ui.Select và bọc WebElement trước khi gọi bất kỳ phương thức chọn nào.
  • 🎯 Chọn phương pháp phù hợp: Hãy chọn selectByVisibleText, selectByValue hoặc selectByIndex dựa trên việc văn bản hiển thị, thuộc tính giá trị hay vị trí nào ổn định nhất.
  • 🔁 Xử lý các menu thả xuống chọn nhiều mục: Sử dụng isMultiple để phát hiện chúng, và dùng deselectAll hoặc deselectByVisibleText để xóa các lựa chọn trước đó.
  • ✅ Xác nhận lựa chọn: Gọi phương thức getFirstSelectedOption để xác nhận xem quá trình kiểm tra có thực sự thay đổi trạng thái của menu thả xuống hay không.
  • 🤖 Sử dụng công cụ định vị AI: Bộ định vị AI tự phục hồi sẽ sửa chữa các XPath chọn phần tử bị lỗi sau khi thay đổi giao diện người dùng, giữ cho...ping Các bài kiểm tra menu thả xuống ổn định trên các phiên bản khác nhau.

Chọn giá trị từ menu thả xuống trong Selenium

Lớp Select trong Selenium?

Chọn lớp trong Selenium là một lớp trợ giúp từ org.openqa.selenium.support.ui Gói này cho phép WebDriver tương tác với HTML. <select> Nó cung cấp các phương thức để chọn và bỏ chọn các tùy chọn dựa trên văn bản hiển thị, giá trị hoặc chỉ mục, và để phát hiện xem menu thả xuống có chấp nhận nhiều lựa chọn hay không.

Bởi vì Select là một thường xuyên Java trong lớp, bạn tạo một thể hiện với new từ khóa và truyền WebElement trỏ đến <select> gắn thẻ trên trang.

Cách chọn thả xuống trong Selenium

Trước khi xử lý menu thả xuống trong SeleniumCần thực hiện hai bước:

  1. Nhập gói org.openqa.selenium.support.ui.Select.
  2. Khởi tạo menu thả xuống dưới dạng Select đối tượng trong Selenium WebDriver.

Ví dụ, hãy mở Mercury Trang đăng ký tour (https://demo.guru99.com/test/newtours/register.php) và tìm mục thả xuống “Quốc gia”.

Chọn thả xuống trong Selenium

Bước 1) Nhập gói Select.

import org.openqa.selenium.support.ui.Select;

Bước 2) Khai báo phần tử thả xuống làm phiên bản của lớp Chọn. Trong ví dụ bên dưới, đối tượng được đặt tên là drpCountry.

Select drpCountry = new Select(driver.findElement(By.name("country")));

Bước 3) Bắt đầu điều khiển menu thả xuống. Sử dụng bất kỳ phương thức Chọn nào để chọn một tùy chọn. Ví dụ bên dưới chọn “NAM CỰC”:

drpCountry.selectByVisibleText("ANTARCTICA");

Chọn phương pháp trong Selenium

Lớp Select cung cấp một số phương thức để tương tác với các tùy chọn trong menu thả xuống. Năm phương thức phổ biến nhất được mô tả bên dưới.

1) selectByVisibleText() và deselectByVisibleText()

  • Chọn hoặc bỏ chọn tùy chọn có văn bản hiển thị khớp với tham số.
  • Thông số: Văn bản chính xác được hiển thị cho tùy chọn đó.

Ví dụ:

drpCountry.selectByVisibleText("ANTARCTICA");

2) selectByValue() và deselectByValue()

  • Chọn hoặc bỏ chọn tùy chọn có value Thuộc tính khớp với tham số.
  • Lưu ý rằng văn bản được hiển thị và value Các thuộc tính thường khác nhau, như được minh họa bên dưới.
  • Thông số: quyền chọn value thuộc tính.

selectByValue và deselectByValue

Ví dụ:

drpCountry.selectByValue("234");

3) selectByIndex() và deselectByIndex()

  • Chọn hoặc bỏ chọn tùy chọn tại vị trí chỉ định. Chỉ số được đánh số từ 0.
  • Thông số: Chỉ số nguyên của tùy chọn.

Ví dụ:

drpCountry.selectByIndex(0);

4) isMultiple()

  • Hoàn trả TRUE Nếu menu thả xuống cho phép chọn nhiều mục cùng lúc, ngược lại thì không. FALSE.
  • Thông số: không ai.

Ví dụ:

if (drpCountry.isMultiple()) {
    // do something here
}

5) deselectAll()

  • Xóa tất cả các tùy chọn đã chọn. Chỉ có hiệu lực đối với các menu thả xuống chọn nhiều mục.
  • Thông số: không ai.

Ví dụ:

drpCountry.deselectAll();

Hoàn thành Code của các phương pháp được lựa chọn trong Selenium

Sau đây Java Chương trình này minh họa lớp Select trên cả hộp chọn đơn và hộp chọn đa.

package newpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.By;

public class accessDropDown {
    public static void main(String[] args) {
        System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
        String baseURL = "https://demo.guru99.com/test/newtours/register.php";
        WebDriver driver = new FirefoxDriver();
        driver.get(baseURL);

        // Single-select drop-down
        Select drpCountry = new Select(driver.findElement(By.name("country")));
        drpCountry.selectByVisibleText("ANTARCTICA");

        // Multi-select drop-down
        driver.get("http://jsbin.com/osebed/2");
        Select fruits = new Select(driver.findElement(By.id("fruits")));
        fruits.selectByVisibleText("Banana");
        fruits.selectByIndex(1);
    }
}

Chọn các mục trong phần tử Chọn nhiều (Multiple SELECT)

selectByVisibleText() Phương pháp này cũng hoạt động trên các menu thả xuống chọn nhiều mục. Ví dụ, hãy sử dụng https://jsbin.com/osebed/2 như là cơ sở URLNó hiển thị một menu thả xuống cho phép chọn nhiều mục cùng một lúc.

Chọn các mục trong phần tử Chọn nhiều mục

Đoạn mã bên dưới chọn hai tùy chọn đầu tiên bằng cách sử dụng selectByVisibleText():

Chọn các mục trong mã phần tử Chọn nhiều mục

Bảng tham chiếu phương pháp

Bảng này tóm tắt tất cả các phương thức của lớp Select đã được đề cập ở trên để tra cứu nhanh.

Lệnh Mô tả Chi tiết
selectByVisibleText() / deselectByVisibleText() Chọn hoặc bỏ chọn một tùy chọn dựa trên văn bản hiển thị của nó.
selectByValue() / deselectByValue() Chọn hoặc bỏ chọn một tùy chọn dựa trên thuộc tính của nó. value thuộc tính.
selectByIndex() / deselectByIndex() Chọn hoặc bỏ chọn một tùy chọn dựa trên chỉ số 0 của nó.
isMultiple() Trả về TRUE nếu menu thả xuống cho phép chọn nhiều mục, ngược lại trả về FALSE.
bỏ chọn tất cả() Bỏ chọn tất cả các tùy chọn đã chọn trước đó trong menu thả xuống đa lựa chọn.

Để điều khiển các hộp thả xuống, hãy nhập org.openqa.selenium.support.ui.Select Trước tiên hãy đóng gói, sau đó tạo một thể hiện của lớp Select và gọi bất kỳ phương thức nào ở trên.

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

Lớp Select là một Selenium Công cụ hỗ trợ cho các phần tử HTML SELECT. Nó bao bọc một WebElement và cung cấp các phương thức selectByVisibleText, selectByValue, selectByIndex, isMultiple và deselectAll để tự động hóa menu thả xuống một cách gọn gàng.

Nên ưu tiên sử dụng selectByValue khi thuộc tính value ổn định, vì nhãn thường thay đổi tùy theo bản địa hóa. Sử dụng selectByVisibleText khi văn bản là chính thức và tránh sử dụng selectByIndex khi thứ tự các tùy chọn có thể thay đổi.

Lớp Select chỉ hoạt động trên các thẻ SELECT HTML thực sự. Nếu WebElement là một thẻ div, ul hoặc widget tùy chỉnh được tạo kiểu giống như menu thả xuống, bạn phải nhấp vào các tùy chọn thông qua WebElement.click() hoặc API Actions.

Gọi phương thức getFirstSelectedOption() trên thể hiện Select và xác nhận giá trị getText() của nó. Đối với các hộp chọn thả xuống nhiều lựa chọn, hãy lặp lại phương thức getAllSelectedOptions() và so sánh danh sách trả về với các lựa chọn dự kiến.

Đúng vậy. Hãy sử dụng isMultiple() để xác nhận rằng menu thả xuống cho phép nhiều giá trị, sau đó gọi selectByVisibleText nhiều lần hoặc deselectAll() để đặt lại. Menu thả xuống chọn nhiều giá trị yêu cầu phần tử HTML SELECT phải khai báo thuộc tính multiple.

Hãy sử dụng WebDriverWait với ExpectedConditions.numberOfElementsToBeMoreThan trên bộ định vị tùy chọn. Điều này đảm bảo các hộp thả xuống được điền dữ liệu bất đồng bộ đã sẵn sàng trước khi khởi tạo lớp Select và gọi bất kỳ phương thức chọn nào.

Các bộ định vị tự phục hồi được hỗ trợ bởi AI phát hiện khi ID, tên hoặc XPath của phần tử SELECT thay đổi và chuyển sang một phương án thay thế hoạt động được. Chúng giúp giảm thiểu các lỗi không ổn định của menu thả xuống trong quy trình sau khi thiết kế lại giao diện người dùng.

Đúng vậy. Các trợ lý lập trình AI sẽ chuyển đổi một yêu cầu bằng tiếng Anh thông thường như “chọn quốc gia ANTARCTICA trên trang đăng ký” thành một câu lệnh Select hoàn chỉnh với bộ định vị chính xác, lệnh selectByVisibleText và một xác nhận kiểm chứng.

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