web元素定位之------日历控件的定位

一、日历控件本质:
1、input输入标签
2、type是text类型的输入框
3、输入框为readonly类型,手动不能输入的时间,也不能通过send_keys()方法输入
4、删除readonly属性,就可以进行输入。

二、传统定位方法:
进行多次定位、点击,分贝选择年月日
麻烦、易出错、不稳定

三、新定位方法:
1、先删除readonly属性
2、想输入框进行send_keys()

但是:
selenium没有提供删除readonly属性的方法。不可以删除元素属性

然而:
javascript可以删除属性。

那么:
关于javascript:
打开开发者选项,在sources标签下,有很多js类型的文件。我们在百度时,查询出几万条数据,无法在同一个网页显示,一页只显示十几条,就会用到分页功能。大多数分页功能,都是由javascript写的,通过javascript可以删除日历控件中的readonly属性

四、问题解决的技术试验:
通过在控制台里写javascript代码,找到id为data的文本,删除readonly属性。网页本身就是一个文件,document是整个文件类型,相当于driver

通过代码:

document.getElementById('date')

回车打印出id为date的代码。能看到readonly属性

再执行以下代码:

document.getElementById('date').removeAttribute('readonly')

回车会打印出undefined,那么来验证一下,是否删除成功。重新打印页面元素【document.getElementById(‘date’)】会发现readonly属性,已经被删除


五、在python文件里可以这样写:
python里javascript需要作为一个字符串去执行

#执行javascript脚本
script = 'document.getElementById("date").removeAttribute("readonly")'
driver.execute_script(script)

#如果原来输入框里有默认的日期,需要先清空内容
chromeDriver.find_element_by_id('date1').clear()
通过sendkeys()方法,输入日期
chromeDriver.find_element_by_id('date1').send_keys('2019-01-01')#日期

你可能感兴趣的:(四,selenium)