python3+selenium自动化测试-JS日历控件14

(14)JS处理日历控件
日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题。
基本思路:先用js去掉readonly属性,然后直接输入日期文本内容

查看日历输入框的属性:readonly="readonly",如下:

浏览器想修改时,需要手动删掉元素的readonly属性,然后就可以随便输入内容了。

用js去掉readonly属性
1.用js去掉元素属性基本思路:先定位到元素,然后用removeAttribute("readonly")方法删除属性。
2.出发日元素id为:train_date,对应js代码为:
js = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js)
3.输入日期前,一定要先清空文本,要不然无法输入成功的。
driver.find_element_by_id("train_date").clear()
4.这里输入日期后,会自动弹出日历控件,随便点下其它位置就好了,接下来会用js方法传入日期,就不会弹啦
driver.find_element_by_id("train_date").send_keys("2019-12-27")
或者用js方法输入日期
直接改掉输入框元素的value值
js_value = 'document.getElementById("train_date").value="2019-12-27"'
driver.execute_script(js_value)

参考代码:

# coding:utf-8
from time import sleep
from selenium import webdriver


driver = webdriver.Chrome()
driver.get("https://www.12306.cn/index/")
# 去掉元素的readonly属性
js = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js)
sleep(5)
# 用js方法输入日期
js_value = 'document.getElementById("train_date").value="2020-09-27"'
driver.execute_script(js_value)

# 清空文本后输入值
driver.find_element_by_id("train_date").clear()
driver.find_element_by_id("train_date").send_keys("2016-12-25")

参考链接
https://www.cnblogs.com/yoyoketang/p/6181121.html

你可能感兴趣的:(python3+selenium自动化测试-JS日历控件14)