Select多選框下拉列表
在做自動化的過程中,我們經常會遇到select標簽類型的多選框下拉列表。針對select標簽類型,selenium中有封裝好的API可以使用,接下來,我們一起看看關於select多選框下拉列表的操作方法吧。
操作方法簡介
1、選擇下拉列表方法
selectByIndex(index); // 根據索引選擇
selectByValue(value); // 根據value屬性選擇
selectByVisibleText(text); // 根據選項文本值選擇
注意:
index是從0開始的
Value是option標簽的一個屬性值,並不是顯示在下拉框中的值
VisibleText是在option標簽中間的值,是顯示在下拉框的值
2、取消方法
deselectByIndex(index); // 根據索引取消
deselectByValue(value); // 根據value屬性取消
deselectByVisibleText(Text); // 根據選項文本值取消
deselectAll(); // 取消所有選中
3、其他方法
getAllSelectedOptions(); // 獲取所有被選中的標簽元素對象集合
getFirstSelectedOption(); // 獲取第一個被選中的標簽元素對象
select.getOptions(); // 獲取所有選項的標簽元素對象集合
getWrappedElement(); // 獲取包裹具體選項的元素對象
isMultiple(); // 判斷該元素是否支持多個對下個,根據mutiple屬性來判斷,返回布爾值
被測HTML對象
測試用的丐版html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
用戶名: <input type="text" name=""/></br>
密 碼: <input type="password" name=""/></br>
愛好: <input type="checkbox" name="">籃球<input type="checkbox" name="">電影</br>
性別: <input type="radio" name="gender">男<input type="radio" name="gender">女</br>
頭像: <input type="file" name=""></br>
住址: <select id="select_province" name="select_name" class ="select_province_class">
<option value="0">安徽省</option>
<option value="1">江蘇省</option>
<option value="2">廣東省</option>
</select>
<select id="select_city" name="select_name" class ="select_city_class">
<option value="0">滁州市</option>
<option value="1">南京市</option>
<option value="2">廣州市</option>
</select></br>
博客: <a href="https://www.cnblogs.com/91boge" target="_blank">點擊進入</a></br>
備注信息: <textarea>社會人</textarea>
<form>
<table border="1">
<tr><td>姓名</td><td>年齡</td><td>分數</td></tr>
<tr><td>張三</td><td>28</td><td>100</td></tr>
<tr><td>李四</td><td>29</td><td>100</td></tr>
<tr><td>王二</td><td>29</td><td>100</td></tr>
<tr><td>麻子</td><td>29</td><td>100</td></tr>
</table>
<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.diydoutu.com%2Fbqb%2F8031.jpg&refer=http%3A%2F%2Fimg.diydoutu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1652796255&t=863287e1bacb29390dfefc705fa184ce">
</form>
</body>
</html>
頁面展示:
代碼操作
1、選擇下拉列表
@Test
public void testDemo1() throws InterruptedException {
WebDriver driver = new ChromeDriver();
driver.get("E:\\Notes\\Selenium\\select.html");
driver.manage().window().maximize();
Thread.sleep(3000);
WebElement element = driver.findElement(By.id("select_province"));
Select select = new Select(element);
// 選擇索引值為2,即第三個選項
select.selectByIndex(2);
Thread.sleep(5000);
// 選擇value屬性值為1的選擇
select.selectByValue("1");
Thread.sleep(5000);
// 選擇文本值為安徽省的選項
select.selectByVisibleText("安徽省");
Thread.sleep(5000);
}
2、取消方法
取消方法針對的select標簽是需要有multiple屬性的,沒有則拋異常。
在上面html中的select標簽中增加multiple="multiple"
<select id="select_province" name="select_name" class ="select_province_class" multiple="multiple">
<select id="select_city" name="select_name" class ="select_city_class" multiple="multiple">
@Test
public void testDemo2() throws InterruptedException {
WebDriver driver = new ChromeDriver();
driver.get("E:\\Notes\\Selenium\\select_mutiple.html");
driver.manage().window().maximize();
Thread.sleep(3000);
WebElement element = driver.findElement(By.id("select_city"));
Select select = new Select(element);
// 索引值為2的選擇后取消
select.selectByIndex(2);
Thread.sleep(3000);
select.deselectByIndex(2);
Thread.sleep(3000);
// value屬性值為1的選擇后取消
select.selectByValue("1");
Thread.sleep(3000);
select.deselectByValue("1");
Thread.sleep(3000);
// 選擇文本值為安徽省的選項,然后取消
select.selectByVisibleText("滁州市");
Thread.sleep(3000);
select.deselectByVisibleText("滁州市");
// 取消所有
select.deselectAll();
Thread.sleep(3000);
}
3、其他方法
@Test
public void testDemo() throws InterruptedException {
WebDriver driver = new ChromeDriver();
driver.get("E:\\Notes\\Selenium\\select.html");
driver.manage().window().maximize();
Thread.sleep(3000);
WebElement element = driver.findElement(By.id("select_province"));
Select select = new Select(element);
boolean multiple = select.isMultiple();
System.out.println("multiple is " + multiple);
System.out.println("================================================");
WebElement wrappedElement = select.getWrappedElement();
System.out.println("wrappedElement is " + wrappedElement.getText());
System.out.println("================================================");
List<WebElement> options = select.getOptions();
System.out.println("The size of allSelectedOptions is " + options.size());
for(int i=0;i<options.size();i++) {
System.out.println("第"+ i +"次:" + options.get(i).getText());
}
System.out.println("================================================");
WebElement firstSelectedOption = select.getFirstSelectedOption();
System.out.println("firstSelectedOption is " + firstSelectedOption.getText());
System.out.println("================================================");
List<WebElement> allSelectedOptions = select.getAllSelectedOptions();
System.out.println("The size of allSelectedOptions is " + allSelectedOptions.size());
for(int i=0;i<allSelectedOptions.size();i++) {
System.out.println("第"+ i +"次:" + allSelectedOptions.get(i).getText());
}
driver.quit();
}
打印結果:
com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.test.day02.SelectTest,testDemo
Starting ChromeDriver 96.0.4664.45 (76e4c1bb2ab4671b8beba3444e61c0f17584b2fc-refs/branch-heads/4664@{#947}) on port 37534
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
[1650212642.945][WARNING]: This version of ChromeDriver has not been tested with Chrome version 97.
四月 18, 2022 12:24:02 上午 org.openqa.selenium.remote.ProtocolHandshake createSession
信息: Detected dialect: W3C
multiple is false
================================================
wrappedElement is 安徽省
江蘇省
廣東省
================================================
The size of allSelectedOptions is 3
第0次:安徽省
第1次:江蘇省
第2次:廣東省
================================================
firstSelectedOption is 安徽省
================================================
The size of allSelectedOptions is 1
第0次:安徽省
Process finished with exit code 0