Selenium:如何验证用户无法向下拉框输入文本
嘿,这个问题我太熟了!要验证下拉框只能选不能输入,得分两种常见场景来处理——一种是原生HTML的<select>标签,另一种是现在很多网站用的自定义下拉组件(比如用div、ul模拟的那种),下面分别给你说具体的实现方法:
1. 验证原生
<select>下拉框不可输入 原生的<select>标签默认就不支持手动输入文本,只能选择选项,但为了确保没有被开发者做特殊修改,我们可以通过尝试输入文本后检查选中值是否变化来验证:
from selenium import webdriver from selenium.webdriver.common.by import By # 初始化浏览器驱动 driver = webdriver.Chrome() driver.get("你的目标页面URL") # 定位到原生select元素(这里用ID举例,你可以换成自己的定位方式) select_element = driver.find_element(By.ID, "target-select") # 先记录初始的选中值和文本 initial_value = select_element.get_attribute("value") initial_text = select_element.find_element(By.CSS_SELECTOR, "option:checked").text # 尝试向select元素输入一段测试文本 select_element.send_keys("我是测试输入的文本") # 获取输入后的选中值和文本 current_value = select_element.get_attribute("value") current_text = select_element.find_element(By.CSS_SELECTOR, "option:checked").text # 断言:输入后的内容和初始内容一致,说明无法输入 assert current_value == initial_value, f"原生select可以输入文本!初始值是{initial_value},现在变成了{current_value}" assert current_text == initial_text, f"原生select可以输入文本!初始文本是{initial_text},现在变成了{current_text}" # 额外验证:确认元素确实是select标签 assert select_element.tag_name.lower() == "select", "该元素不是原生select标签,需按自定义下拉框处理" # 关闭浏览器 driver.quit()
2. 验证自定义下拉框不可输入
现在很多网站会用自定义组件模拟下拉框(比如用input显示选中值,点击弹出ul选项列表),这种情况下我们要重点验证显示值的input框无法手动输入:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("你的目标页面URL") # 定位到自定义下拉框的输入框(这里用类选择器举例,替换成你的定位方式) dropdown_input = driver.find_element(By.CSS_SELECTOR, ".custom-dropdown-input") # 记录初始值 initial_value = dropdown_input.get_attribute("value") # 尝试输入测试文本 dropdown_input.send_keys("测试输入内容") # 获取输入后的当前值 current_value = dropdown_input.get_attribute("value") # 断言:输入前后值一致,说明无法输入 assert current_value == initial_value, f"自定义下拉框的输入框可编辑!初始值是{initial_value},现在变成了{current_value}" # 额外验证:检查输入框是否设置了readonly或disabled属性(这是常见的不可输入设置) readonly_attr = dropdown_input.get_attribute("readonly") disabled_attr = dropdown_input.get_attribute("disabled") assert (readonly_attr is not None and readonly_attr != "false") or disabled_attr is not None, \ "输入框未设置readonly或disabled属性,存在可输入风险!" driver.quit()
小提示
- 如果遇到输入框被遮罩层挡住的情况,还可以检查元素的
style属性里的display或visibility是否为隐藏状态,或者用dropdown_input.is_enabled()辅助判断(不过is_enabled()有时候会受其他因素影响,还是以输入后值是否变化为核心验证逻辑) - 有些自定义下拉框可能会做输入搜索功能,但如果需求是仅可选择不能输入,那还要验证输入后不会触发搜索,选项列表不会出现匹配输入内容的结果
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

