1、如何去掉readonly属性

前端对于时间控件的设置,有时是为了限制用户不能进行手动输入方式进行选择时间,避免在手动输入的时候超限或者输入格式不正确,导致一些不必要的验证麻烦,这是前端开发工程师就会在前端代码中加入readonly属性,但是对于手动测试来说的话,这种只能进行点击控件进行选择时间,而对于自动测试来说,这样的方式可能是行不通,因为这个需要认证时间控件的有效性很多个选择,自动化变得更加麻烦, 是不是就没有办法进行了呢?答案是否点的,例如:

那该怎么进行设置呢?这个是前人踩过的坑,后来推荐去看robotframework论坛中一篇文档,正好能对该方式正式解决,第一需要进行设置临时id,第二使用临时id进行重新赋值,第三进行删除readonly属性

 这是个不可以输入的日历控件,下面讲解如何变可输入
1.通过Assign Id To Element 关键字配临时ID。
例如:Assign Id To Element | loactor | 临时ID
2.用Execute JavaScript 方法:
window.document.getElementById('临时ID').value='2016-12-19' 经过实践:下面直接去除readonly属性再输入OK
window.document.getElementById('临时ID').removeAttribute("readonly")
 [Setup]    登录
询价打开模块公共方法
询价高级查询按钮
Comment Click Element xpath=.//*[@id='CreatedDate1']
sleep 5
Comment Unselect Frame
Comment Select Frame id=InquiryAndProject_Residential
Comment ${a} Get Text /html/body/div[9]/div[1]/div[3]
Comment log ${a}
Comment Input Text xpath=//div[@class='date-picker-wrapper no-shortcuts no-gap two-months' and contains(@style,'display: block')]//div[@class='normal-top']/b[1] 2017-01-20
Comment Input Text xpath=.//*[@id='CreatedDate1'] 2017-01-20 至 2017-02-18
Assign Id To Element xpath=.//*[@id='CreatedDate1'] new_time
Assign Id To Element xpath=.//*[@id='CreatedDate1From'] new_time1
Assign Id To Element xpath=.//*[@id='CreatedDate1To'] new_time2
Execute JavaScript window.document.getElementById('new_time').value='2017-01-15 至 2017-01-20'
Execute JavaScript window.document.getElementById('new_time1').value='2017-01-15'
Execute JavaScript window.document.getElementById('new_time1').value='2017-01-15'
Execute JavaScript window.document.getElementById('new_time2').value='2017-01-20'
Execute JavaScript window.document.getElementById('new_time').removeAttribute("readonly")
询价查询按钮

2、进行自动化手动选择控件

 按盖章时间查询
Set Selenium Speed 0.5
登录
点击我的项目
点击项目盖章
Select Frame id=ProjectAllot_Seal
等待列表加载完成 1
点击已盖章
等待列表加载完成 2
Comment 按输入时间查询 2015-5-28 2019-6-9
${start_date} Set Variable 2016-12-1
${end_date} Set Variable 2017-1-10
按单个时间查询 ${start_date} //td[@id='sealTime']/span/span
按单个时间查询 ${end_date} //td[@id='sealTime2']/span/span
${min_stamp} Get Stamp ${start_date}
${max_stamp} Get Stamp ${end_date}
点击查询 2
${no} get总页数 2
${no} Run Keyword If ${no}<10 Set Variable ${no}
... ELSE Set Variable 10
: FOR ${i} IN RANGE 10
\ Wait Until Element Is Visible //div[@id='tabs']/div[2]/div[2]//div[@class='datagrid-view2']/div[2]//tbody/tr[${i+1}] 10
\ ${result} Get Text //div[@id='tabs']/div[2]/div[2]//div[@class='datagrid-view2']/div[2]//tbody/tr[${i+1}]/td[8]/div
\ ${list} Evaluate '${result}'.split(' ')
\ ${date} Evaluate ${list}[0]
\ ${arr} Evaluate '${date}'.split('/')
\ ${current_date} Evaluate '-'.join(${arr})
\ ${current_stamp} Get Stamp ${current_date}
\ Should Be True ${current_stamp}>=${min_stamp} and ${current_stamp}<=${max_stamp} 已盖章页面按照盖章时间查询不正确
 按单个时间查询
[Arguments] ${input_date} ${DropBtn_xpath}
[Documentation] 输入:
...
... 1、${input_date}:输入的日期参数,格式为2016-2-3 ,个位数不补0,不能写为2016-02-03
...
... 2、${dropBtn_xpath}:日期控件的下拉按钮xpath路径
Set Selenium Speed 0.5
${prevAndAfter} Set Variable 0 #0表示向前翻,1表示向后翻
${base_path} Set Variable //div[@class='panel combo-p' and contains(@style,'display: block')]
${dict} Create Dictionary 1=一月 2=二月 3=三月 4=四月 5=五月
... 6=六月 7=七月 8=八月 9=九月 10=十月 11=十一月
... 12=十二月
${prev_month} Set Variable ${base_path}//div[contains(@class,'calendar-prevmonth')] #点击上一个月
${prev_year} Set Variable ${base_path}//div[contains(@class,'calendar-prevyear')]
${next_year} Set Variable ${base_path}//div[contains(@class,'calendar-nextyear')]
${next_month} Set Variable ${base_path}//div[contains(@class,'calendar-nextmonth')]
${input_date} Set Variable '${input_date}'.split('-')
${start_abbr} Evaluate ','.join(${input_date}) #匹配要点击开始哪天的abbr属性
${s_year} Evaluate ${input_date}[0]
${s_month} Evaluate ${input_date}[1]
${s_day} Evaluate ${input_date}[2]
${startDayPath} Set Variable ${base_path}//td[text()=${s_day} and @abbr='${start_abbr}'] #需要点击的开始day
${s_year} Evaluate int('${s_year}')
${s_month} Evaluate int('${s_month}')
${s_day} Evaluate int('${s_day}')
Click Element ${DropBtn_xpath} #点击开始时间下拉按钮
${current_ym} Set Variable ${base_path}//div[contains(@class,'calendar-title')]/span #当前年月
${yearAndMonthStr} Get Text ${current_ym}
${yearAndMonthArr} Evaluate u'${yearAndMonthStr}'.split(' ')
${current_year} Evaluate ${yearAndMonthArr}[1]
${current_month} Evaluate ${yearAndMonthArr}[0]
${year_no} Evaluate int('${current_year}') #当前年份
${keys} Get Dictionary Keys ${dict}
${values} Get Dictionary Values ${dict}
${v_len} Evaluate len(${values})
: FOR ${i} IN RANGE ${v_len}
\ ${temp} Evaluate ${values}[${i}]
\ ${month_no} Run Keyword If '${current_month}'=='${temp}' Evaluate ${keys}[${i}]
\ Exit For Loop If '${current_month}'=='${temp}'
${month_no} Evaluate int('${month_no}') #当前月份
#确定要翻几年
${yearTurnCount} Evaluate ${s_year}-${year_no}
${prevAndAfter1} Run Keyword If ${yearTurnCount}>0 Set Variable 1
... ELSE Set Variable 0
${yearTurnCount} Evaluate abs(${yearTurnCount})
#确定要翻几月
${monthTurnCount} Evaluate ${s_month}-${month_no}
${prevAndAfter2} Run Keyword If ${monthTurnCount}>0 Set Variable 1
... ELSE Set Variable 0
${monthTurnCount} Evaluate abs(${monthTurnCount})
: FOR ${i} IN RANGE ${yearTurnCount}
\ Run Keyword If ${prevAndAfter1}==0 Click Element ${prev_year}
\ ... ELSE Click Element ${next_year}
: FOR ${i} IN RANGE ${monthTurnCount}
\ Run Keyword If ${prevAndAfter2}==0 Click Element ${prev_month}
\ ... ELSE Click Element ${next_month}
Click Element ${startDayPath}
 清空选择的日期
[Arguments] ${dropBtn_xpath}
[Documentation] 输入:
... 1、${dropBtn_xpath}:日期控件的下拉按钮xpath路径
Click Element ${dropBtn_xpath}
${base_path} Set Variable //div[@class='panel combo-p' and contains(@style,'display: block')]
Click Element ${base_path}//a[text()='清空']

rf对时间控件的操作的更多相关文章

  1. robotframework 时间控件的操作的几种方法总结。

  2. RobotFramework教程使用笔记——时间控件的相关操作

    在web测试过程中,我们可能会遇到时间控件,有的是支持直接输入的,有的为了保证输入时间格式的一致性是只支持点击选择的,那么这个时候如何用robotframework来操作呢? 看下面这个例子: 这个是 ...

  3. [Xcode 实际操作]八、网络与多线程-(20)时间控件Timer定时功能

    目录:[Swift]Xcode实际操作 本文将演示时间控件Timer定时功能的使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit cl ...

  4. JSP页面中的精确到秒的时间控件

    技术:Struts1+jsp+MSql 需求:ncmgt网络监控系统中显示用户的操作日志,并且根据操作时间查询用户的详细操作记录.时间精确到秒 大致效果如下.上图! 大家可以清晰的看到.红色画线部分就 ...

  5. angluar1时间控件,在浏览器里是没有问题的,但是真机时间报错NAN

    因为是老项目并且用的angluar1有时也会很头疼没法直接打包和手机联调,所以浏览器上测试的多但是真机和浏览器还是不一样的,废话不说了,看图吧 我的时间插件代码是这样的 后台返回的数据格式是这样的 , ...

  6. C# 时间控件 竖直进度条 饼图显示 仪表盘 按钮基础控件库

    Prepare 本文将使用一个NuGet公开的组件来实现一些特殊的控件显示,方便大家进行快速的开发系统. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台 ...

  7. 日期与时间控件QDate, QTime, QDateTime

    QDate类用于处理公历日期.QTime类用于处理时间.QDateTime类将QDate对象和QTime对象整合为一个对象 QDate: from PyQt5.QtCore import QDate, ...

  8. android 时间控件概述

    android的自带时间选择控件,是一个让用户既能输入的又能选择的样子.这本来没有太大的问题了. 但是,坑爹的android是开源的.自带的时间控件在某些机型上,早已经是面目全非了,在用以一个普通用户 ...

  9. angularjs 整合bootstrap 时间控件

    一.引入js <link href="${basePath}/static/plugin/bootstrap/css/bootstrap-datetimepicker.min.css& ...

随机推荐

  1. css3的box-sizing--从此不用担心盒模型的不兼容

    前段时间阿里的面试问了关于盒模型的东西,众所周知,ie和标准盒模型是有着区别的.面试官问有没有什么办法可以改变盒模型的显示效果.答案是css3的box-sizing: 其可以取三个值: 1.值cont ...

  2. Android Quick Tip - ADB over WiFi

    http://stuffandtech.blogspot.jp/2012/03/android-quick-tip-adb-over-wifi.html   MAR 26 Android Quick ...

  3. Spring自学教程-声明式事务处理(六)

    Spring事务处理分两种: 一.编程式事务:在程序中控制事务开始,执行和提交: 1.1 使用TransactionTemplate, 使用回调函数执行事务,不需要显示开始事务,不需要显示提交事务,但 ...

  4. UVA 11149 Power of Matrix

    矩阵快速幂. 读入A矩阵之后,马上对A矩阵每一个元素%10,否则会WA..... #include<cstdio> #include<cstring> #include< ...

  5. mysql 大树据表update很慢

    问题描述: 数据表千万量级,update  where gid="adadfadsfasdf",返回结果显示耗时70ms到1s之间 分析: 表很大,那么update,可能先要取索引 ...

  6. windows下查找指定端口被哪个程序占用

    在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用. eg.查看端口号为61078被哪个程序占用 1.查看端口号为61079被哪个PID所占用:Netstat –an ...

  7. [转]Go语言(golang)开源项目大全

    内容目录 Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发工具 分布式/网格计算 文档 编辑 ...

  8. paper资料

    1.Ycbcr  RGB空间转换 :http://www.cnblogs.com/Imageshop/archive/2013/02/14/2911309.html 2.抠图:http://www.c ...

  9. TFS2013 升级至TFS2015及项目的创建

    TFS2015已发布想体验下新特性 由于现有数据库已经是SQLSERVER2012 SP1 开发工具VS2013 都符合升级要求 现在体验下吧 1.先下载TFS2015 运行安装向导一路NEXT 直至 ...

  10. HTTP协议快速入门

    一.定义 The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborativ ...