# 9U WebDriver – 通过两种方式选择项目(下拉菜单和多项选择) > 原文: [https://javabeginnerstutorial.com/selenium/9u-webdriver-select-items-two-ways/](https://javabeginnerstutorial.com/selenium/9u-webdriver-select-items-two-ways/) 嗨呀摇滚明星(虽然不包括吉他和音乐)! 在本文中,我们将深入研究下拉菜单以及如何以两种方式选择项目。 是的,我们还讨论了多个选择! 所有概念都将与[演示站点](https://chandanachaitanya.github.io/selenium-practice-site/)中的示例一起进行说明。 # 方法 1: 使用可用定位策略之一使用相同年代的传统元素定位方法。 首先,我们找到下拉列表元素,然后找到需要选择的项目。 由于选项没有唯一的标识符,因此这并不困难。 **示例**:让我们通过 ID 查找“编程语言”下拉列表。 要从可用的下拉菜单中找到“C++”,我们将必须找到标记名称为“`options`”的所有元素,并将其放在列表中。 遍历列表,或者如果知道其索引,则相应地检索元素并执行单击操作。 右键单击所需元素,然后选择检查元素,将给出相应的 HTML 代码,如下所示, ```java `标签的 Web 元素。* 下面是`Select`类中所有可用方法的快照。 ![Select class methods](img/c29b9a3b5bbe6b3e73ca7d1d07f4720b.png) 这里有很多要讨论和讨论的要点。 让我们通过示例和代码片段介绍一些常用的方法。 **注意:** *如果找不到匹配的选项,则所有`select`和`deselect`方法可能会碰到`NoSuchElementException`。* ### 1\. `selectByVisibleText(String arg0)`和`deselectByVisibleText(String arg0)` 这些方法选择和取消选择一个显示的文本与传递的`String`参数完全匹配的选项。 **语法**:`selectObject.selectByVisibleText("displayed_option_text")` `selectObject.deselectByVisibleText("displayed_option_text")` **示例**:让我们从“编程语言”下拉菜单中选择“JavaScript”。 *代码:*(选择) ```java // Locate 'Programming Languages' dropdown using id WebElement languagesDD = driver.findElement(By.id("programming-languages")); // Create an instance of 'Select' class by passing the dropdown web element Select languages = new Select(languagesDD); // Select 'JavaScript' language by its visible text languages.selectByVisibleText("JavaScript"); ``` (取消选择) ```java languages.deselectByVisibleText("JavaScript"); ``` ### 2\. `selectByValue(String arg0)`和`deselectByValue(String arg0)` 这些方法选择和取消选择其`value`属性与传递的`String`参数匹配的选项。 **语法**:`selectObject.selectByValue("value_attribute_text")` `selectObject.deselectByValue("value_attribute_text")` **示例**:让我们从 Selenium 工具套件多选选项中选择“Selenium RC”。 右键单击所需的 Web 元素,然后选择检视元素,将给出相应的 HTML 代码,如下所示, ```java `标签应具有值为“`multiple`”的`multi`属性。 否则抛出`NotImplementedError`。* **语法**:`selectObject.deselectAll()` **示例**:让我们取消选择在 Selenium 工具套件多重选择框中选择的所有选项。 *Code:* ```java multiSelect.deselectAll(); ``` ### 5\. `isMultiple()` 当您想知道 Web 元素是否允许多选时,此方法很方便。 它返回`true`或`false`。 没有传递参数。 **语法**:`selectObject.isMultiple()` ### 6\. `getOptions()` 此方法作为 Web 元素返回在多重选择框中可用的所有选项的列表。 **语法**:`selectObject.getOptions()` *Code:* ```java List allOptions = multiSelect.getOptions(); ``` ### 7\. `getFirstSelectedOption()` 此方法在多重选择框中返回第一个选定的选项。 如果在仅允许单个选择的下拉菜单中使用此选项,则将所选选项作为 Web 元素返回。 **语法**:`selectObject.getFirstSelectedOption().getText()` 这将返回所选的选项文本。 ### 8\. `getAllSelectedOptions()` 此方法返回作为多选框的一部分而被选择为 Web 元素的所有选项的列表。 **语法**:`selectObject.getAllSelectedOptions()` *Code:* ```java List allSelectedOptions = multiSelect.getAllSelectedOptions(); ``` ## 概览 让我们来看一个测试案例,该案例实现了迄今为止本文中涵盖的所有操作, *场景* 1. 打开 Firefox 浏览器 2. 导航到[演示站点](https://chandanachaitanya.github.io/selenium-practice-site/) 3. 使用 ID 找到“编程语言”下拉菜单 4. 为`Select`类创建一个对象 5. 通过可见的文本选择“JavaScript”语言 6. 将选定的选项打印到控制台 7. 检查“编程语言”下拉列表是否支持多项选择并将相应消息打印到控制台 8. 使用名称找到“Selenium Tool Suite”多选框 9. 使用多选 Web 元素创建`Select`类的实例 10. 根据其值选择“Selenium RC”和“优势” 11. 通过索引取消选择“Selenium RC” 12. 通过可见的文本选择“Selenium WebDriver” 13. 在列表中获取所有选定的选项,并将它们打印到控制台 14. 验证 Eclipse IDE 控制台输出屏幕和 JUnit 窗格是否成功 此方案的 JUnit 代码是, ```java package com.blog.junitTests; import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.Select; public class SelectItems { // Declaring variables private WebDriver driver; private String baseUrl; @Before public void setUp() throws Exception { // Selenium version 3 beta releases require system property set up System.setProperty("webdriver.gecko.driver", "E:\\ Softwares\\" + "Selenium\\geckodriver-v0.10.0-win64\\geckodriver.exe"); // Create a new instance for the class FirefoxDriver // that implements WebDriver interface driver = new FirefoxDriver(); // Implicit wait for 5 seconds driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); // Assign the URL to be invoked to a String variable // baseUrl = "https://chandanachaitanya.github.io/selenium-practice-site/"; baseUrl = "file:///E:/Chandu/My%20Blog/githubDemoSite/index.html"; } @Test public void testPageTitle() throws Exception { // Open baseUrl in Firefox browser window driver.get(baseUrl); // Locate 'Programming Languages' dropdown using id WebElement languagesDD = driver.findElement(By.id("programming-languages")); // Create an instance of 'Select' class by passing the dropdown web element Select languages = new Select(languagesDD); // Select 'JavaScript' language by its visible text languages.selectByVisibleText("JavaScript"); // Prints the selected option to console System.out.println("Selected programming language is: " + languages.getFirstSelectedOption().getText()); // Check if languages dropdown supports multiple selection and print the result to console if(languages.isMultiple()){ System.out.println("Languages dropdown supports multiple selection"); }else { System.out.println("Languages dropdown does not support multiple selection"); } // Locate multi select element using name WebElement toolSuite = driver.findElement(By.name("selenium_suite")); // Create an instance of 'Select' class by passing the multi select element Select multiSelect = new Select(toolSuite); // Select 'Selenium RC' by its value multiSelect.selectByValue("RC"); // Select 'Advantages' by its value multiSelect.selectByValue("Adv"); // De-select 'Selenium RC' by its index multiSelect.deselectByIndex(2); // Select "Selenium WebDriver" by its visible text multiSelect.selectByVisibleText("Selenium WebDriver"); // Get all selected options in a list List suiteItems = multiSelect.getAllSelectedOptions(); // Prints all selected options System.out.println("Options selected under 'Selenium Tool Suite' are:"); for (WebElement option : suiteItems) { System.out.println(option.getText()); } } // End of @Test @After public void tearDown() throws Exception { // Close the Firefox browser driver.close(); } } ``` *执行结果:* 每行代码都带有不言自明的注释,并且部分代码作为帖子中涉及的每个概念的一部分进行了说明。 在 JUnit 窗口中,绿色条显示测试用例已成功执行。 控制台窗口显示没有任何错误。 它还按预期显示所有打印的消息。 ![select items eclipse output](img/fa9d2b65b4ab5173d953ac4dd65f06ca.png) 下图显示了成功执行测试脚本后获得的 Firefox 输出。 ![select items firefox output](img/cd461c9703ed2d8df5413dd7dfa2a536.png) 这个概念并不难缠您的头。 因此,开始大量练习。 我很快会在另一篇文章中再见。 祝你有美好的一天!