求助:无法在Selenium中为指定元素设置值的问题
问题:无法修改自定义数字输入框的显示值
页面上的数字输入框是自定义的<div>元素(带有role="button"和tabindex="0"),默认显示值为5。尝试用send_keys和常规execute_script设置value属性均未生效,页面显示的数值无变化,且无报错信息。
页面元素结构
<div class="sc-brqgnP gbUepm"> <div role="button" tabindex="0" class="sc-cvbbAY jMSnje code ">5</div> <div role="button" tabindex="0" class="sc-cvbbAY jMSnje code ">5</div> <div class="sc-jWBwVP fyostQ"></div> <div role="button" tabindex="0" class="sc-cvbbAY jMSnje code ">5</div> <div role="button" tabindex="0" class="sc-cvbbAY jMSnje code ">5</div> <div role="button" tabindex="0" class="sc-cvbbAY jMSnje code ">5</div> <div class="sc-jWBwVP fyostQ"></div> <div role="button" tabindex="0" class="sc-cvbbAY jMSnje code ">5</div> <div role="button" tabindex="0" class="sc-cvbbAY jMSnje code ">5</div> <div role="button" tabindex="0" class="sc-cvbbAY jMSnje code ">5</div> <div role="button" tabindex="0" class="sc-cvbbAY jMSnje code ">5</div> </div>
已尝试的代码
self.wait.until(ec.visibility_of_element_located((By.XPATH, locator))) element = self.driver.find_element(By.XPATH, locator) # self.driver.execute_script("arguments[0].value='123456789';", element) element.send_keys('123456789')
解决方案
直接修改元素文本内容:这类自定义输入框依靠文本节点展示数值,而非
value属性,因此修改textContent或innerText即可更新显示:# 修改textContent self.driver.execute_script("arguments[0].textContent = '123456789';", element) # 或修改innerText self.driver.execute_script("arguments[0].innerText = '123456789';", element)同步组件内部状态:若页面使用React、Vue等前端框架,直接修改DOM文本可能无法同步组件状态,需触发组件的更新事件:
self.driver.execute_script(""" const el = arguments[0]; el.textContent = '123456789'; // 触发change事件同步状态 el.dispatchEvent(new Event('change', { bubbles: true })); """, element)模拟完整用户交互:部分组件需要先激活才能输入,可先点击元素,再清空原有内容并输入新值:
element.click() # 清空原有内容(若clear无效则用脚本清空) self.driver.execute_script("arguments[0].textContent = '';", element) element.send_keys('123456789')
内容的提问来源于stack exchange,提问作者Mojiz Mehdi
相关产品推荐
相关产品推荐

