# Python selenium下拉选择框实战应用详解

> 作者/来源: UCloud 运营管理员
> 发布时间: 2022-11-05T04:00:00.000Z
> 分类: 其他
> 标签: AI, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/2221

---

# Python selenium下拉选择框实战应用详解

> 来源: https://www.ucloud.cn/yun/128247.html
> 作者: 89542767
> 发布日期: 发布于2022-11-05 12:00

小编写这篇文章的主要目的，主要是给大家做出一个解答，解答内容包括一些Python常用的技能，包括Python selenium下拉选择框实战应用，那么，具体的一个内容是什么呢？下面就给大家详细的解答下。

**一、前言**

　　selenium的下拉选择框。我们通常会遇到两种下拉框，一种使用的是html的标签select，另一种是使用input标签做的假下拉框。

　　后者我们通常的处理方式与其他的元素类似，点击或使用JS等。而对于前者，selenium给了有力的支持，就是Select类。

　　进行测试的网站：http://sahitest.com/demo/selectTest.htm

　　网页及对应源码：

![01.png](https://ucloud-blog.cn-bj.ufileos.com/articles/128247/images/128247_000.png)

**二、关于导入方式**

　　两种导入方式：

```
　　from selenium.webdriver.support.ui import Select
　　#或者直接从select导入
　　from selenium.webdriver.support.select import Select
```

**三、选择、反选、选项的实战应用例子**

　　话不多说，直接上代码：

```
　　#-*-coding:utf-8-*-
　　"""
　　author:lucas
　　Function:
　　file:selectStudy.py
　　time:2021/8/20 1:27下午
　　"""
　　import unittest
　　import time
　　from selenium import webdriver
　　from selenium.webdriver.support.ui import Select
　　class SelectStudy(unittest.TestCase):
　　def setUp(self):
　　#创建一个Chrome WebDriver的实例
　　self.driver=webdriver.Chrome()
　　#选择页面第一个下拉框，依次选择值O1-O3
　　def test_selectO1ToO3(self):
　　driver=self.driver
　　driver.get('http://sahitest.com/demo/selectTest.htm')
　　#实例化Select
　　s1=Select(driver.find_element_by_id('s1Id'))
　　#查看选择框的默认值
　　print s1.first_selected_option.text
　　#选择第二个选项o1
　　s1.select_by_index(1)
　　time.sleep(3)
　　#为了方便查看效果，可以加上等待时间
　　time.sleep(3)
　　#选择value="o2"的项，value是option标签的一个属性值，并不是显示在下拉框中的值
　　s1.select_by_value("o2")
　　#查看选中选择框的默认值
　　print s1.first_selected_option.text
　　time.sleep(3)
　　#选择text="o3"的值，即在下拉时我们可以看到的文本，visible_text是在option标签中间的值，是显示在下拉框的值
　　s1.select_by_visible_text("o3")
　　time.sleep(3)
　　#反选操作，包括取消某个值和全部取消
　　def test_cancel_select(self):
　　driver=self.driver
　　driver.get('http://sahitest.com/demo/selectTest.htm')
　　s4=Select(driver.find_element_by_id('s4Id'))
　　#全选
　　for option in s4.options:
　　if not option.is_selected():
　　print option.text
　　s4.select_by_visible_text(option.text)
　　time.sleep(3)
　　#根据index取消选中
　　s4.deselect_by_index(0)
　　time.sleep(3)
　　#根据value取消选中
　　s4.deselect_by_value("o1val")
　　time.sleep(5)
　　#根据标签文本选中
　　s4.deselect_by_visible_text("o2")
　　time.sleep(5)
　　#全选
　　for option in s4.options:
　　if not option.is_selected():
　　s4.select_by_visible_text(option.text)
　　time.sleep(3)
　　#取消选中所有选项
　　s4.deselect_all()
　　#查看选中项目
　　"""
　　输出结果为：
　　o1
　　o2
　　With spaces
　　With nbsp
　　"""
　　def test_view_selection(self):
　　driver=self.driver
　　driver.get('http://sahitest.com/demo/selectTest.htm')
　　s4=Select(driver.find_element_by_id('s4Id'))
　　#查看选择框的默认值
　　s4.select_by_index(1)
　　s4.select_by_value("o2val")
　　s4.select_by_visible_text("With spaces")
　　s4.select_by_value("o4val")
　　for select in s4.all_selected_options:
　　print select.text
　　def tearDown(self):
　　self.driver.close()
　　if __name__=="__main__":
　　unittest.main()
```

　　注意：

　　反选（deselect）取消操作只适用于添加了multiple的下拉框，否则会报错

　　raise NotImplementedError("You may only deselect options of a multi-select")

　　NotImplementedError:You may only deselect options of a multi-select

　　四、总结

　　1、Select提供了三种选择方法：

```
　　select_by_index(index)——通过选项的顺序，第一个为0
　　select_by_value(value)——通过value属性
　　select_by_visible_text(text)——通过选项可见文本
```

　　2、Select提供了四种方法取消选择：

```
　　deselect_by_index(index)
　　deselect_by_value(value)
　　deselect_by_visible_text(text)
　　deselect_all()
```

　　3、Select提供了三个属性方法给我们必要的信息：

```
　　options——提供所有的选项的列表，其中都是选项的WebElement元素
　　all_selected_options——提供所有被选中的选项的列表，其中也均为选项的WebElement元素
　　first_selected_option——提供第一个被选中的选项，也是下拉框的默认值
```

　　补充：三种定位方法如下

　　1.select\_by\_visible\_text()：选项的文本内容

```
　　from selenium.webdriver.support.select import Select
　　from time import sleep
　　from selenium import webdriver
　　dr=webdriver.Chrome()
　　dr.get('url')
　　dr.maximize_window()
　　#先定位到下拉框,通过text文本定位
　　Select(find_element_by_id('q')).select_by_visible_text('苍井空')
　　sleep(2)
　　dr.quit()
```

　　2.select\_by\_value()：value属性定位

```
　　from selenium.webdriver.support.select import Select
　　from time import sleep
　　from selenium import webdriver
　　dr=webdriver.Chrome()
　　dr.get('url')
　　dr.maximize_window()
　　#先定位到下拉框,通过value属性定位
　　Select(find_element_by_id('q')).select_by_value('3')
　　sleep(2)
　　dr.quit()
```

　　3.select\_by\_index()：索引定位（0开始）

```
　　from selenium.webdriver.support.select import Select
　　from time import sleep
　　from selenium import webdriver
　　dr=webdriver.Chrome()
　　dr.get('url')
　　dr.maximize_window()
　　#先定位到下拉框,通过索引定位
　　Select(find_element_by_id('q')).select_by_index('1')
　　sleep(2)
　　dr.quit()
```

　　到此为止，这篇文章就给大家介绍到这里了，希望可以给大家带来更多帮助。