UI自动化-下拉元素被隐藏无法直接进行select选择情况解决

问题:由于display: none属性隐藏了下拉选择,导致无法被select选中

方法一:直接点击的方式避开,这个方法最粗暴快捷,但是如果无法成功则选择方法二

python 复制代码
# 选择省-北京市
driver.find_element(By.XPATH,'/html/body/div[1]/form/div[4]/div[1]/a/span').click()
driver.find_element(By.XPATH,'/html/body/div[1]/form/div[4]/div[1]/div/ul/li[2]').click()
# 选择城市-东城区
driver.find_element(By.XPATH,'/html/body/div[1]/form/div[4]/div[2]/a/span').click()
driver.find_element(By.XPATH,'/html/body/div[1]/form/div[4]/div[2]/div/ul/li[2]').click()
# 选择区县-东四街道
driver.find_element(By.XPATH,'/html/body/div[1]/form/div[4]/div[3]/a/span').click()
driver.find_element(By.XPATH,'/html/body/div[1]/form/div[4]/div[3]/div/ul/li[3]').click()

方法二:JS直接赋值,绕过前端交互

python 复制代码
# 省份选择
province_select = driver.find_element(By.NAME, "province") #省
# 1. 赋值+触发带冒泡的change + 强制刷新Chosen显示
driver.execute_script("""
    // 给原生select赋值
    arguments[0].value = "3";
    // 带冒泡的change事件(让前端监听到)
    arguments[0].dispatchEvent(new Event('change', {bubbles: true}));
    // 强制刷新Chosen组件,如果有没有Chosen组件则不需要这一步(如何判断:元素定位后查看元素属性,是否有chosen关键字出现)
    $(arguments[0]).trigger('chosen:updated');
""", province_select)

# sleep(3) #等待数据加载
# 或用显式等待
from selenium.webdriver.support.wait import WebDriverWait
wait = WebDriverWait(driver, 10)
wait.until(lambda d: len(d.find_elements(By.XPATH, '//select[@name="city"]/option[@value="73"]')) > 0)

# 城市选择
city_select = driver.find_element(By.NAME, "city") #市
driver.execute_script("""
    arguments[0].value = "73";
    arguments[0].dispatchEvent(new Event('change', {bubbles: true}));
    $(arguments[0]).trigger('chosen:updated');
""", city_select)
# sleep(3)
wait.until(lambda d: len(d.find_elements(By.XPATH, '//select[@name="county"]/option[@value="1126"]')) > 0)

# 区县选择
city_select = driver.find_element(By.NAME, "county") #市
driver.execute_script("""
    arguments[0].value = "1126";
    arguments[0].dispatchEvent(new Event('change', {bubbles: true}));
    $(arguments[0]).trigger('chosen:updated');
""", city_select)
相关推荐
南篱3 分钟前
从回调地狱到优雅异步:JavaScript 异步编程的完整演进之路
前端·javascript·面试
陆枫Larry6 分钟前
折叠屏“窗口化”导致的背景图错位:一次小程序样式问题的排查与修复
前端
米丘7 分钟前
vue 3.x 关于 provide 与 inject 实现原理
前端
rmst8 分钟前
列表的拖动排序动画原理
javascript·react.js·动效
进击的雷神8 分钟前
无分页一次性加载、多级CSS类名定位、动态User-Agent轮换、断点本地备份——意大利塑料展爬虫四大技术难关攻克纪实
前端·css·爬虫·python
天才熊猫君8 分钟前
Vue 3 v-for key 原理核心笔记
前端
zhedream9 分钟前
环境监测 CMMS 的表单 DSL 实践:从逐一开发到声明式生成,工单交付效率提升 10 倍
前端
天若有情67311 分钟前
一款极简且实用的本地 NPM 包目录管理方案(个人原创设计)
前端·npm·node.js
JamesYoung797111 分钟前
第七部分 — 存储 chrome.storage(本地/同步/会话)+ 配额
前端·chrome
武汉禹力自动化科技14 分钟前
ABB火检与火焰检测系统全解析 | 禹力自动化科技有限公司
运维·科技·自动化·abb火检