为何使用Robot framework Selenium库输入Web应用文本框的值会消失
Robot Framework Selenium输入文本后内容自动消失解决方案
1 先确认元素定位准确性
你当前使用的xpath是向上回溯三级匹配input,很容易出现定位到错误元素的问题:
- 打开浏览器F12控制台,执行以下代码验证定位结果:
$x('//*[text()="Daily Order Limit"]/../../../input') - 检查返回的元素列表:确保只有1个匹配项,且该元素是可见可操作的目标输入框。如果存在多个匹配项,给xpath补充过滤规则,比如添加可见性过滤:
//*[text()="Daily Order Limit"]/../../../input[not(contains(@style,'display:none'))][1]
2 处理前端框架事件拦截问题
90%以上的此类问题都是Vue/React等前端框架的输入防抖、实时校验逻辑导致的:Robot默认的Input Text关键字是直接给输入框赋值,不会触发前端绑定的input/change原生事件,输入后会被框架逻辑自动清空。可以用以下两种方案解决:
方案1:模拟真实键盘输入
替换Input Text关键字为Press Keys,模拟人工敲击输入:
Press Keys //*[text()="Daily Order Limit"]/../../../input 150
方案2:强制赋值+主动触发事件
如果方案1无效,直接用JS强制赋值后主动触发前端所需事件,完全绕过关键字的输入逻辑:
Execute Javascript arguments[0].value = '150'; arguments[0].dispatchEvent(new Event('input')); arguments[0].dispatchEvent(new Event('change')); //*[text()="Daily Order Limit"]/../../../input
3 特殊场景兼容处理
- 如果输入框存在动态的
readonly/disabled属性,输入前先清除限制属性:
Execute Javascript arguments[0].removeAttribute('readonly');arguments[0].removeAttribute('disabled'); //*[text()="Daily Order Limit"]/../../../input
- 如果输入框在iframe内嵌页面中,操作前必须先用
Select Frame关键字切换到对应iframe上下文,操作完成后再用Unselect Frame切回主页面。
内容的提问来源于stack exchange,提问作者Naganandhini Ganesan
相关产品推荐
相关产品推荐

