Selenium结合VBA操作网页时出现赋值、交互类报错的排查解决
报错根因拆解
.Text属性的只读限制:Selenium VBA 封装的网页元素对象中,Text仅作为对外提供的文本读取接口实现,没有开放写入权限。所有直接对.Text执行赋值的操作本身就不符合API设计规则,自然触发“不允许给常量/只读对象赋值”的报错,不存在通过该属性直接修改页面文本的可能性。- 目标节点无交互能力:当前定位到的
.multiselect__single.per-page-text是vue-multiselect组件的纯展示层节点,仅用于渲染当前已选中的分页数值,本质是不支持聚焦、不接收键盘输入的普通<div>元素,完全不满足SendKeys要求的元素可交互前置条件,自然触发“element not interactive”报错。
可落地的操作方案
- 跳过纯展示节点,定位组件根交互容器:vue-multiselect 组件中,真正支持点击唤起下拉选项面板的是带有
.multiselect类名的根容器元素,直接对该元素执行点击操作即可展开可选值列表,不要直接操作仅承担展示功能的文本节点。 - 定位对应选项执行点击完成选择:下拉面板展开后,定位带有
.multiselect__option类名、文本值为“50”的选项元素,直接执行点击动作即可完成选中,对应参考代码片段:' 点击唤起下拉选择面板 driver.FindElementByCss(".multiselect").Click ' 定位并点击文本为50的选项 driver.FindElementByXPath("//div[contains(@class,'multiselect__option') and normalize-space(.)='50']").Click - 状态同步适配:如果点击选项后组件内部状态未更新,可通过Selenium执行JavaScript为对应组件节点派发
input、change事件,触发前端框架的状态校验逻辑,确保选择动作被组件正常捕获,避免出现UI显示选中但组件内部值未同步的问题。
内容的提问来源于stack exchange,提问作者Prabhakaran Karuppaih
相关产品推荐
相关产品推荐

