selenium之select下拉框处理

本文详细介绍了Selenium中Select模块的使用方法,包括处理下拉框的原理、函数列表及示例代码。适用于自动化测试中对HTML select标签生成的下拉框进行操作的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



一、什么场景需要我们可以使用Select模块

HTML中通过select标签生成的下拉框,就可以通过Select模块进行处理。


二、下拉框处理方法

  1. 基于Action Chains进行连贯操作,首先点击下拉框,然后移动到目标选中元素,最后再点击一次,代码量很大、复杂,不考虑代码量可以使用。
  2. 实际上Selenium给我们提供了处理select下拉框的模块(建议使用)

selenium.webdriver.support.select



三、select模块原理解析

select模块只支持HTML页面是通过select标签生成的。否则,直接失败抛出异常UnexpectedTagNameException。
普通的下拉框由两个标签组成,select标签与option标签,我们可以将select标签理解为下拉框的架子,option是里面每个参数,其中value则为option标签的一种属性。
如源码所示,select_by_value()函数,先通过css定位到目标option元素,然后再依次选中元素。其他函数原理类似。

class Select(object):

    def __init__(self, webelement):

		# 必须是select标签
        if webelement.tag_name.lower() != "select":
            raise UnexpectedTagNameException(
                "Select only works on <select> elements, not on <%s>" %
                webelement.tag_name)

	def select_by_value(self, value):
		# 使用css selector方式,option标签下的value属性,定位目标元素
		css = "option[value =%s]" % self._escapeString(value)
		opts = self._el.find_elements(By.CSS_SELECTOR, css)
		matched = False
		for opt in opts:  # 循环获取到的option元素,使用_setSelected方法选中元素
			self._setSelected(opt)
			if not self.is_multiple:
				return
			matched = True
		if not matched:
			raise NoSuchElementException("Cannot locate option with value: %s" % value)
			
	def _setSelected(self, option):
		if not option.is_selected():
			option.click()



四、select类中的函数列表

函数解析
options返回select元素所有的options
all_selected_options返回select元素中所有已选中的选项
first_selected_option返回select元素中选中的第一个选项
select_by_index(index)通过索引定位,index索引是从“0”开始
select_by_value(value)通过value属性值定位
select_by_visible_text(text)t通过文本值定位,visible_text是在option标签中间的值,即显示在下拉框的值;
deselect_all()取消全部的已选择项
deselect_by_index(index)取消已选中的索引项
deselect_by_value(value)取消已选中的value值
deselect_by_visible_text(text)取消已选中的文本值



五、举例


html如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是标题</title>
</head>
<body>
<!--select标签-->
<select name="city" size="5" multiple="multiple">
    <option value="1" tabindex="1">北京</option>
    <option value="2" tabindex="2" selected="selected">河南</option>
    <option value="3" tabindex="3">河北</option>
    <option value="4" tabindex="4">山东</option>
    <option value="5" tabindex="5">上海</option>
</select>

</body>
</html>

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time

driver = webdriver.Chrome(r"D:\browser\chromedriver\chromedriver.exe")
driver.get("http://localhost:63342/ui_test/select%E6%A0%87%E7%AD%BE.html")

driver.maximize_window()

ele = driver.find_element_by_name("city")
select = Select(ele)
select.select_by_value("3")  # 选中"河北"
time.sleep(3)
select.select_by_index(0)  # 选中"北京"
time.sleep(3)
select.deselect_by_value("3")  # 取消选中"河北"
time.sleep(3)
select.deselect_by_index(0)  # 取消选中"北京"
time.sleep(3)
driver.quit()



官方文档 module-selenium.webdriver.support.select

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值