日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题。

基本思路:先用js去掉readonly属性,然后直接输入日期文本内容

一、日历控件

1.打开12306的车票查询界面,在出发日期输入框无法直接输入时间

2.常规思路是点开日历控件弹出框,从日历控件上点日期,这样操作比较烦躁,并且我们测试的重点不在日历控件上,只是想输入个时间,做下一步的操作

3.用firebug查看输入框的属性:readonly="readonly",如下:

<input id="train_date" class="inp-txt" type="text" value="" name="leftTicketDTO.train_date" autocomplete="off" maxlength="10" readonly="readonly">

二、去掉readonly属性

1.很明显这种元素的属性是readonly,输入框是无法直接输入的,这时候需要先去掉元素的readonly属性,然后就可以输入啦。

2.点左下角firebug的“编辑按钮”,找到对应元素,直接删除readonly="readonly",然后回车。

3.在页面出发日位置输入:yoyoketang 试试,嘿嘿,有没发现可以输入成功。当然这里只是为了验证可以输入内容,测试时候还是输入测试的日期。

三、用js去掉readonly属性

1.用js去掉元素属性基本思路:先定位到元素,然后用removeAttribute("readonly")方法删除属性。

2.出发日元素id为:train_date,对应js代码为:'document.getElementById("train_date").removeAttribute("readonly");'

四、输入日期

1.输入日期前,一定要先清空文本,要不然无法输入成功的。

2.这里输入日期后,会自动弹出日历控件,随便点下其它位置就好了,接下来会用js方法传入日期,就不会弹啦!

五、js方法输入日期

1.这里也可以用js方法输入日期,其实很简单,直接改掉输入框元素的value值就可以啦

参考源码:

# coding:utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("https://kyfw.12306.cn/otn/index/init")
# 处理开始时间
# js去掉readonly属性
js = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js)
# js添加时间
js_value = 'document.getElementById("train_date").value="2017-12-10"'
driver.execute_script(js_value) # 处理返程时间
js2 = 'document.getElementById("back_train_date").removeAttribute("readonly");'
driver.execute_script(js2)
js2_value = 'document.getElementById("back_train_date").value="2017-12-25"'
driver.execute_script(js2_value) time.sleep(5)
driver.close()

  执行结果如下图:

  

  

最新文章

  1. 从SQLite获取数据完成一个产品信息展示
  2. SHLVL 和 BASH_SUBSHELL 两个变量的区别
  3. EBS中配置OAF
  4. python 登陆接口
  5. C#线程模型脉络
  6. Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50
  7. WebGIS基础复习笔记
  8. jQuery—一些常见方法(3)【width(),innerWidth(),outerWidth()】
  9. acl操作记录
  10. 引用 mkimage使用详解
  11. WEB 表格测试点
  12. Linux环境变量与文件查找
  13. MyBatis学习笔记(二)——使用MyBatis对表执行CRUD操作
  14. leetcode916
  15. yocto-sumo源码解析(三):oe-setup-builddir
  16. JavaScript高级 面向对象(12)--引用类型值类型作为参数传递的特性
  17. 罗伯特•盖洛博士(Dr. Robert Charles Gallo)是世界著名的美国生物医学家,他以共同发现了人类免疫缺陷病毒(HIV)――这一导致获得性免疫缺陷综合症(AIDS)的致病源而闻名于世。
  18. 12-[数据库]--图形工具Navicat
  19. MatLab角点检測(harris经典程序)
  20. poj 3653(最短路)

热门文章

  1. hbase项目
  2. 16、Semantic-UI之模态窗口
  3. redis整理の持久化机制
  4. Asp.net MVC 自定义路由
  5. HBase介绍(4)---常用shell命令
  6. Win RT Webview获取cookie
  7. Ado.NET SqlDataReader详解
  8. 将整个文件读入string中
  9. 【maven】---初识
  10. mysqli扩展库---事务控制