高等信息填写页面,有三个时间控件,分别是出生日期、入学日期和毕业日期对应的前端代码分别是:
通过在网上查询知道,针对时间控件有readonly属性的主要有两种操作方法:
- 一种是直接对value赋值
- 另一种是删除readonly属性,然后再通过send_key()方法输入时间。
出生日期的输入通过第二种方法删除readonly,然后在输入时间,运行时直接通过。代码如下:
jscsrq='document.getElementByID("csrq").removeAttribute("readonly")' driver.execute_script(jscsrq) driver.find_element_by_id("csrq").send_keys("1987-03-04") ActionChains(driver).move_by_offset(0,0).click().perform() #getElementByID()是js中的一种定位方式,返回对拥有指定ID的第一个对象的引用 #removeAttribute()删除指定的属性
但是在在操作入学日期时,一直提示readonly for null,换了其他的定位方法,都无法通过,最后才发现是定位方法使用错误。因为入学日期没有id,只有name所有当时复制代码后没有getElementByID方法,导致定位失败,无法找到readonly属性。
然后将getElementByID修改成getElementsByName方法,运行结果又报错。经过查询得知getElementsByName返回的是一个元素数组,解决方法就是在后边加上索引[0],定位到第一个对象。最终的方法就是:
jsrxrq='document.getElementsByName("rxrq")[0].removeAttribute("readonly")' driver.execute_script(jsrxrq) driver.find_element_by_name("rxrq").send_keys("2010-09") ActionChains(driver).move_by_offset(0,0).click().perform()
直接对value赋值的方法,其实也挺简单。依旧是通过js定位到日期控件,然后直接对value赋值即可。
jscsrq='document.getElementById("csrq").value="1987-03-04"'
通知此次学习过程遇到的问题,得到的经验就是:代码运行过程中不要怕出错,但是一定要够认真。