You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计下拉框未选中选项数量?Selenium代码问题排查

Selenium多选下拉框:正确区分选中/未选中选项并统计数量

任务要求

  • 选中水果下拉框中的指定选项(Banana、Orange)
  • 统计并输出未选中选项(Apple、Grape)的数量

问题描述

现有代码能够打印选中的选项,但会重复输出所有选项,无法正确区分并统计未选中的选项,输出结果不符合预期。

当前代码

public class Ques12 {
    public static void main(String[] args) throws AWTException {
        ChromeOptions options = new
        ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver driver = new ChromeDriver(options);
        driver.manage().window().maximize();
        Robot robot = new Robot();
        driver.get("http://output.jsbin.com/osebed/2");
        WebElement Fruits = driver.findElement(By.id("fruits"));
        Select select = new Select(Fruits);
        select.selectByIndex(0);
        select.selectByValue("orange");

        List < WebElement > list = select.getOptions();
        List < WebElement > selectedOptions = select.getAllSelectedOptions();

        for (WebElement i: selectedOptions) {
            for (WebElement j: list) {

                if ((j.getText()).equals(i.getText())) {
                    System.out.println("Selected option " + j.getText());
                } else {
                    System.out.println("Not selected option " + j.getText());
                }
            }
        }
    }
}

当前异常输出

Selected option Banana
Not selected option Apple
Not selected option Orange
Not selected option Grape
==========================
Not selected option Banana
Not selected option Apple
Selected option Orange
Not selected option Grape

问题根源

原代码使用嵌套循环,遍历每个选中选项时都要和所有选项逐一对比,导致每个选项被重复判断多次,输出冗余且无法准确统计未选中数量。

修正方案

直接遍历所有选项,通过isSelected()方法判断每个选项的选中状态,同时统计未选中选项的数量:

修正后的代码

public class Ques12 {
    public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver driver = new ChromeDriver(options);
        driver.manage().window().maximize();
        driver.get("http://output.jsbin.com/osebed/2");
        
        WebElement fruitsDropdown = driver.findElement(By.id("fruits"));
        Select select = new Select(fruitsDropdown);
        // 选中目标选项
        select.selectByIndex(0); // Banana
        select.selectByValue("orange"); // Orange

        List<WebElement> allOptions = select.getOptions();
        int unselectedCount = 0;

        // 遍历所有选项,区分选中/未选中状态
        for (WebElement option : allOptions) {
            if (option.isSelected()) {
                System.out.println("选中的选项:" + option.getText());
            } else {
                System.out.println("未选中的选项:" + option.getText());
                unselectedCount++;
            }
        }

        // 输出统计结果
        System.out.println("\n未选中选项的数量:" + unselectedCount);

        // 关闭浏览器释放资源
        driver.quit();
    }
}

预期输出

选中的选项:Banana
未选中的选项:Apple
选中的选项:Orange
未选中的选项:Grape

未选中选项的数量:2

关键优化点

  1. 移除不必要的Robot实例,简化代码
  2. 使用isSelected()直接判断选项状态,避免冗余的文本对比
  3. 新增计数逻辑,直接统计未选中选项数量
  4. 优化输出格式,结果更清晰可读
  5. 增加driver.quit(),确保浏览器正常关闭

内容的提问来源于stack exchange,提问作者Deepak Venkatesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:32:45