selenium应对选中元素属性为隐藏的解决方案

本文探讨了在自动化测试中遇到的display:none元素无法通过Selenium输入内容的问题。通过对官方文档的分析,提出了三种解决方案:1) 使用JS直接设置元素值;2) 删除元素的style属性;3) 修改元素的display属性为inline。所有方案均经实测有效,此外还建议考虑切换自动化工具,如Playwright,以避免类似问题。

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

一、表现形式

可以看到在密码输入的位置,style对应的属性是style="display: none;" ,然后我们使用selenium去对应输入框send_keys()的时候就会发现,会报错输入不进去内容。

二、问题分析

官方文档:大白话讲的话意思就是,这个元素输入的内容将会被隐藏或者删除

display: none

Using a display value of none on an element will remove it from the accessibility tree. This will cause the element and all its descendant elements to no longer be announced by screen reading technology.

If you want to visually hide the element, a more accessible alternative is to use a combination of properties to remove it visually from the screen but keep it parsable by assistive technology such as screen readers.

三、解决方案

经过反复测试,我大体集合了三种解决方案均实测成功。

方案1:

我们可以通过js直接强制给该元素输入想要的value值

# getElementById 获取元素   q.vaule = "想要输入的值"
js = '''var q=document.getElementById(\"txtPwd\"); q.value="123";'''  # 输入密码driver.execute_script(js)

方案2:

通过js注入删除掉该元素的style属性

# d是先定位元素位置
d = driver.find_element_by_xpath('//*[@id="txtPwd"]')
# 然后通过传参remove删除掉该属性
driver.execute_script("arguments[0].removeAttribute(\"style\")", d)

 方案3:

通过注入将该元素的style="display: none;"  改成inline 意思是可见的

# d是先定位元素位置
d = driver.find_element_by_xpath('//*[@id="txtPwd"]')
# 然后通过传参remove删除掉该属性
driver.execute_script("arguments[0].style.display='inline';", d)

结束:

        本文中所讲述的3中方式均可以解决此类问题,还有另外的一个方案就是切换自动化工具。例如使用playwright进行测试的话就不会出现这类问题,直接可以正常步进接下来的操作。希望本文对你有所帮助!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值