如何从下拉列表中选择值 Selenium

⚡ 智能摘要

从下拉列表中选择值 Selenium 使用专用的 Select 类来控制 HTML SELECT 元素。该类公开了 selectByVisibleText、selectByValue 和 selectByIndex 方法,可以精确地选择选项并支持多选下拉列表。

  • 📦 导入软件包: 引入 org.openqa.selenium.support.ui.Select 并包装 WebElement,然后再调用任何选择方法。
  • 🎯 选择正确的方法: 根据显示文本、值属性或位置哪个最稳定,选择 selectByVisibleText、selectByValue 或 selectByIndex。
  • 🔁 处理多选下拉菜单: 使用 isMultiple 来检测它们,并使用 deselectAll 或 deselectByVisibleText 来清除之前的选择。
  • 确认选择: 调用 getFirstSelectedOption 来确认测试是否实际更改了下拉列表状态。
  • 🤖 使用人工智能定位器: 自愈式 AI 定位器可在 UI 更改后修复损坏的选择元素 XPath,保持ping 下拉菜单测试在不同版本中保持稳定。

从下拉列表中选择值 Selenium

什么是 Select 类 Selenium?

选择课程 Selenium 是来自 org.openqa.selenium.support.ui 允许 WebDriver 与 HTML 交互的软件包 <select> 它提供了按可见文本、值或索引选择和取消选择选项的方法,以及检测下拉列表是否接受多项选择的方法。

计划 Select 是常规的 Java 类,您可以使用以下方式创建实例: new 关键字并传递指向 WebElement 的 WebElement <select> 标签。

如何选择下拉菜单 Selenium

在处理下拉菜单之前 Selenium需要两个步骤:

  1. 导入包 org.openqa.selenium.support.ui.Select.
  2. 将下拉菜单实例化为 Select 对象在 Selenium WebDriver。

例如,打开 Mercury 旅游注册页面 (https://demo.guru99.com/test/newtours/register.php)并找到“国家/地区”下拉菜单。

选择下拉菜单 Selenium

步骤 1)导入 Select 包。

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

步骤2)将下拉元素声明为Select类的实例。 在下面的示例中,实例名为 drpCountry.

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

步骤 3)开始控制下拉菜单。 使用任意选择方法选择一个选项。以下示例选择“南极洲”:

drpCountry.selectByVisibleText("ANTARCTICA");

选择方法 Selenium

Select 类提供了多种与下拉选项交互的方法。下面介绍其中最常用的五种方法。

1) selectByVisibleText() 和 deselectByVisibleText()

  • 选中或取消选中显示文本与参数匹配的选项。
  • 参数: 选项的准确显示文本。

计费示例:

drpCountry.selectByVisibleText("ANTARCTICA");

2) selectByValue() 和 deselectByValue()

  • 选择或取消选择该选项 value 属性与参数匹配。
  • 请注意显示的文本和 value 属性通常各不相同,如下所示。
  • 参数: 该选项的 value 属性。

按值选择和按值取消选择

计费示例:

drpCountry.selectByValue("234");

3) selectByIndex() 和 deselectByIndex()

  • 选中或取消选中指定索引处的选项。索引从零开始。
  • 参数: 选项的整数索引。

计费示例:

drpCountry.selectByIndex(0);

4) isMultiple()

  • Returns & Exchanges TRUE 如果下拉菜单允许同时选择多个选项,否则 FALSE.
  • 参数: 没有。

计费示例:

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

5) 取消选择所有()

  • 清除所有已选选项。仅适用于多选下拉菜单。
  • 参数: 没有。

计费示例:

drpCountry.deselectAll();

完成: Code 选择方法 Selenium

下列 Java 该程序演示了单选和多选下拉列表中的 Select 类。

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);
    }
}

在多选下拉列表中选择项目

selectByVisibleText() 该方法也适用于多选下拉列表。例如,使用 https://jsbin.com/osebed/2 作为碱 URL它会显示一个下拉菜单,允许一次选择多个选项。

在多选元素中选择项目

以下代码片段使用以下方式选择前两个选项 selectByVisibleText():

在多选元素代码中选择项目

方法参考表

下表总结了上面提到的所有 Select 类方法,以便快速查找。

命令 描述
selectByVisibleText() / deselectByVisibleText() 通过显示的文本选择或取消选择选项。
selectByValue() / deselectByValue() 通过其选择或取消选择某个选项 value 属性。
selectByIndex() / deselectByIndex() 根据从零开始的索引选择或取消选择选项。
是多个() 如果下拉菜单允许多选,则返回 TRUE,否则返回 FALSE。
取消全部选择() 取消选择多选下拉菜单中所有先前已选择的选项。

要控制下拉框,请导入 org.openqa.selenium.support.ui.Select 首先打包,然后创建 Select 实例并调用上述任何方法。

常见问题

Select 类是一个 Selenium 用于 HTML SELECT 元素的辅助函数。它封装了一个 WebElement,并公开了 selectByVisibleText、selectByValue、selectByIndex、isMultiple 和 deselectAll 等方法,以实现简洁的下拉列表自动化。

当值属性稳定时,建议使用 selectByValue,因为标签经常会因本地化而改变。当文本具有权威性时,请使用 selectByVisibleText;当选项顺序可能改变时,请避免使用 selectByIndex。

Select 类仅适用于真正的 HTML SELECT 标签。如果 WebElement 是 div、ul 或自定义样式的下拉列表控件,则必须通过 WebElement.click() 或 Actions API 来点击选项。

对 Select 实例调用 getFirstSelectedOption() 方法并断言其 getText() 值。对于多选下拉列表,遍历 getAllSelectedOptions() 方法并将返回的列表与预期选择进行比较。

是的。使用 `isMultiple()` 确认下拉列表允许选择多个值,然后多次调用 `selectByVisibleText` 或使用 `deselectAll()` 重置选择。多选下拉列表需要 HTML 的 `SELECT` 元素声明 `multiple` 属性。

在选项定位器上使用带有 ExpectedConditions.numberOfElementsToBeMoreThan 的 WebDriverWait。这可以确保在实例化 Select 类并调用任何选择方法之前,异步填充的下拉列表已准备就绪。

AI驱动的自愈定位器能够检测SELECT元素的id、名称或XPath何时发生更改,并切换到可用的替代方案。它们可以减少UI重新设计后流程中下拉列表不稳定导致的故障。

是的。AI 编码助手可以将“在注册页面上选择国家/地区 ANTARCTICA”之类的纯英文请求转换为包含正确定位器、selectByVisibleText 调用和验证断言的完整 Select 实例。

总结一下这篇文章: