Selenium2+python自动化25-js处理日历控件(修改readonly属性)

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

前言

    日历控件是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
driver = webdriver.Firefox()
driver.get("https://kyfw.12306.cn/otn/index/init")
# 去掉元素的readonly属性
js = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js)

# 用js方法输入日期
js_value = 'document.getElementById("train_date").value="2016-12-25"'
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")

 小伙伴们学会了,也可以尽快抢票啦!!!

 在学习过程中有遇到疑问的,可以加selenium(python+java) QQ群交流:646645429

《selenium+python高级教程》已出书:selenium webdriver基于Python源码案例

(购买此书送对应PDF版本)

 

 

相关文章
|
29天前
|
JSON JavaScript 前端开发
在Python中调用和执行JavaScript
在Python中调用和执行JavaScript主要通过`PyExecJS`库实现。安装库后,可以使用`execjs.compile`编译JS代码并用`eval`或`call`执行。此外,还能加载JavaScript库和框架,调用外部JS文件,处理返回值,以及在两者间传递数据。Python和JavaScript各有优劣,适用于不同场景,结合使用可增强项目功能和灵活性。
27 0
|
1天前
|
Python
在Python中,类的属性可以分为公有属性和私有属性
Python类包含公有和私有属性。公有属性可直接外部访问,如`person.name`,而私有属性如`_name`需通过getter/setter方法访问,如`person.getName()`和`person.setName()`。私有属性用于封装数据、隐藏实现细节,增强代码可维护性和安全性。封装能灵活修改内部实现,不影响外部;安全性防止外部非法修改数据;一致性确保所有数据操作在类内完成,简化代码并减少错误。
17 10
|
1天前
|
Python
python属性错误(AttributeError)
【5月更文挑战第2天】python属性错误(AttributeError)
4 1
|
1天前
|
JavaScript
js多维数组去重并使具有相同属性的对象数量相加
js多维数组去重并使具有相同属性的对象数量相加
6 1
|
2天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)
【5月更文挑战第1天】该文介绍了使用Selenium自动化测试网页日历控件的方法。首先,文章提到在某些Web应用中,日历控件常用于选择日期并筛选数据。接着,它提供了两个实现思路:一是将日历视为文本输入框,直接输入日期;二是模拟用户交互,逐步选择日期。文中给出了JQueryUI网站的一个示例,并展示了对应的Java代码实现,包括点击日历、选择日期等操作。
11 0
|
9天前
|
Python
Python常见的魔术方法和魔术属性(二)
Python常见的魔术方法和魔术属性(二)
|
9天前
|
数据库 Python
Python常见的魔术方法和魔术属性(一)
Python常见的魔术方法和魔术属性(一)
|
14天前
|
机器学习/深度学习 Python
python自定义日历库,与对应calendar库函数功能基本一致
python自定义日历库,与对应calendar库函数功能基本一致
36 0
|
15天前
|
JavaScript
js Array map映射对象多个属性
js Array map映射对象多个属性
5 0
|
15天前
|
前端开发 测试技术 C++
Python自动化测试面试:unittest、pytest与Selenium详解
【4月更文挑战第19天】本文聚焦Python自动化测试面试,重点讨论unittest、pytest和Selenium三大框架。unittest涉及断言、TestSuite和覆盖率报告;易错点包括测试代码冗余和异常处理。pytest涵盖fixtures、参数化测试和插件系统,要注意避免过度依赖unittest特性。Selenium的核心是WebDriver操作、等待策略和测试报告生成,强调智能等待和元素定位策略。掌握这些关键点将有助于提升面试表现。
23 0