在使用Selenium做自动化测试的时候,难免会碰到下拉选择框,下面几种方式是比较常用的处理方式。
为了方便使用,我自己写了一个HTML的demo:
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>selenium 处理 下拉框</title>
</head>
<body bgcolor="#f0f8ff">
<h3 align="center">selenium下拉框处理方法</h3>
<hr />
<td align="center">下拉框demo</td>
<br />
<select id="selectdemo" class="select" name="selectdemo">
<option name="jiaolian" value="210101" selected="selected">教练人员</option>
<option name="pingpang" value="210102">乒乓球球员</option>
<option name="lanqiu" value="210103 ">篮球运动员</option>
<option name="zuqiu" value="210103 ">足球运动员</option>
<option name="youyong" value="210402">游泳运动员</option>
<option name="tiaoshui" value="210403">跳水运动员</option>
</select>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
1. 使用Webdriver提供的Select类的方法:
1)导入依赖
# 两种方法任选其一,都是指向同一个文件
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.select import Select
- 1
- 2
- 3
2)Select类提供了3个方法用于选择下拉选择框中的其一
select_by_value(value)
select_by_index(index)
select_by_visible_text(text)
- 1
- 2
- 3
比如选择篮球运动员选项:
# 实例化一个Select类的对象
selector = Select(driver.find_element_by_id("selectdemo"))
# 下面三种方法用于选择"篮球运动员"
selector.select_by_index("2") # 通过index进行选择,index从0开始
selector.select_by_value("210103") # 通过value属性值进行选择
selector.select_by_visible_text("篮球运动员") # 通过标签显示的text进行选择
- 1
- 2
- 3
- 4
- 5
- 6
- 7
主要使用select_by_index()的时候,如果option中有index属性,会优先通过index属性选择
3)Select类还提供了一些用于取消选中的方法
deselect_all() # 取消全选
deselect_by_value(value) # 通过value属性取消选择
deselect_by_index(index) # 通过index取消选择
deselect_by_visible_text(text) # 通过text取消选择
- 1
- 2
- 3
- 4
2. 先定位select 然后在定位option
# 定位到下拉选择框
selector = driver.find_element_by_id("selectdemo")
# selector = driver.find_element_by_xpath(".//*[@id='selectdemo']")
# 选择"篮球运动员"
selector.find_element_by_xpath("//option[@value='210103']").click()
# selector.find_elements_by_tag_name("option")[2].click()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3. 直接通过xpath层级标签定位
# 直接通过xpath定位并选择"篮球运动员"
driver.find_element_by_xpath(".//*[@id='selectdemo']/option[3]").click()
- 1
- 2
这是三种处理下拉选择框的思路,其他的就是定位元素的方法了。