Selenium Python解决时间控件输入问题:移除readonly属性与赋值技巧
本文针对Selenium Python自动化测试中时间控件无法直接输入的问题,分析了存在与不存在readonly属性的两种情况。通过JavaScript移除readonly属性后,结合clear()清空与直接赋值value的方法,解决了input元素不可编辑导致的报错,提供了经过测试的完整封装流程。
Selenium时间控件输入问题分析
在处理时间选择器时,常见的解决方案主要分为两类:
第一类是控件带有readonly属性的情况;

第二类是不带readonly属性的情况。
对于不带readonly属性的控件,通常可以直接使用send_keys()进行赋值操作。
在本次测试用例中,遇到的正是没有readonly属性的场景。

同时,由于无法定位到弹出的日期选择窗口(查阅资料可知,直接给时间控件的input属性赋值是最快捷的方式),因此尝试直接赋值。
起初按照第二种情况处理,但脚本一直运行失败,在赋值环节频繁报错。经过反复排查,确认不存在iFrame嵌套,句柄一致,且时间控件确为input类型并具备可编辑属性,但依然报错。
判断控件是否可编辑的指令如下:
flag=timeInput.is_enabled() print("时间控件是否可编辑: "+str(flag))
运行结果如下:

随后尝试采用第一种情况(即处理有readonly属性)的方法,但由于参考资料中的赋值语句存在瑕疵(可能不适用于当前用例),且未意识到语句本身的问题,导致最终仍卡在赋值步骤。幸运的是,在其他地方找到了正确的赋值语句,修改后问题得以解决。
移除readonly属性并赋值的完整步骤
具体分解步骤如下:
第一步:修改readonly属性
以下四种方法任选一种即可:
js = "document.getElementById('dateRange_w3').removeAttribute('readonly')" # 1.原生js,移除属性 #js = "$('input[id=dateRange_w3]').removeAttr('readonly')" # 2.jQuery,移除属性 #js = "$('input[id=dateRange_w3]').attr('readonly',false)" # 3.jQuery,设置为false #js="$(input[id=dateRange_w3]).attr('readonly','')"
第二步:执行JavaScript脚本
driver.execute_script(js)
第三步:清空时间输入框内容,调用clear()方法
第四步:进行赋值操作
jsValue= 'document.getElementById("dateRange_w3").value="2018-11-12 至 2018-11-13"'[/code][code]driver.execute_script(jsValue)
完整流程如下(已测试通过,为方便调用,部分逻辑已封装):


从运行结果可以看出,时间已成功正常输入。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









