selenium操做日历控件

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

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

1、日历控件web

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

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

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

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

 

2、去掉readonly属性blog

    1.很明显这种元素的属性是readonly,输入框是没法直接输入的,这时候须要先去掉元素的readonly属性,而后就能够输入啦。ip

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

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

3、用js去掉readonly属性

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

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

4、输入日期

    1.输入日期前,必定要先清空文本,要否则没法输入成功的。

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

5、js方法输入日期

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

参考源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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()
相关文章
相关标签/搜索