rf对时间控件的操作
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对时间控件的操作的更多相关文章
- robotframework 时间控件的操作的几种方法总结。
- RobotFramework教程使用笔记——时间控件的相关操作
在web测试过程中,我们可能会遇到时间控件,有的是支持直接输入的,有的为了保证输入时间格式的一致性是只支持点击选择的,那么这个时候如何用robotframework来操作呢? 看下面这个例子: 这个是 ...
- [Xcode 实际操作]八、网络与多线程-(20)时间控件Timer定时功能
目录:[Swift]Xcode实际操作 本文将演示时间控件Timer定时功能的使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit cl ...
- JSP页面中的精确到秒的时间控件
技术:Struts1+jsp+MSql 需求:ncmgt网络监控系统中显示用户的操作日志,并且根据操作时间查询用户的详细操作记录.时间精确到秒 大致效果如下.上图! 大家可以清晰的看到.红色画线部分就 ...
- angluar1时间控件,在浏览器里是没有问题的,但是真机时间报错NAN
因为是老项目并且用的angluar1有时也会很头疼没法直接打包和手机联调,所以浏览器上测试的多但是真机和浏览器还是不一样的,废话不说了,看图吧 我的时间插件代码是这样的 后台返回的数据格式是这样的 , ...
- C# 时间控件 竖直进度条 饼图显示 仪表盘 按钮基础控件库
Prepare 本文将使用一个NuGet公开的组件来实现一些特殊的控件显示,方便大家进行快速的开发系统. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台 ...
- 日期与时间控件QDate, QTime, QDateTime
QDate类用于处理公历日期.QTime类用于处理时间.QDateTime类将QDate对象和QTime对象整合为一个对象 QDate: from PyQt5.QtCore import QDate, ...
- android 时间控件概述
android的自带时间选择控件,是一个让用户既能输入的又能选择的样子.这本来没有太大的问题了. 但是,坑爹的android是开源的.自带的时间控件在某些机型上,早已经是面目全非了,在用以一个普通用户 ...
- angularjs 整合bootstrap 时间控件
一.引入js <link href="${basePath}/static/plugin/bootstrap/css/bootstrap-datetimepicker.min.css& ...
随机推荐
- 利用fiddler给android模拟器抓包
启动模拟器 setting---wireless&networks----mobile networks----access pointnames -------------------- 然 ...
- IMapControl3 Interface(1) Properties属性
IMapControl3 Interface Provides access to members that control the MapControl. Note: the IMapControl ...
- HTTP缓存控制总结
引言 通过网络获取内容既缓慢,成本又高.大的相应需要在客户端和服务器之间多次往返通信,这拖延了浏览器可以使用和处理内容的时间,同时也增加了通信的成本.因此,缓存和重用以前获取到的资源的能力成为性能优化 ...
- Linux的iptables常用配置范例(2)
iptables -F #清除所有规则 iptables -X #清除所有自定义规则 iptables -Z #各项计数归零 iptables -P INPUT DROP #将input链 ...
- openstack controller ha测试环境搭建记录(五)——配置rabbitmq集群
配置rabbitmq集群的步骤非常简单,因为其本身含集群功能,参考openstack官网文档:http://docs.openstack.org/ha-guide/controller-ha-rabb ...
- 使用node-livereload自动刷新页面
1. 安装node 2. 安装python 3. 安装connect, serve-static和node-livereload (以下都假设命令行当前目录为e:\WebSite) e:\WebSit ...
- WIN32动态链接库设计与使用
WINDOWS动态链接库技术能很好地实现代码的分模块,综合来说,windows动态链接库分为三种WIN32动态链接库,使用WINDOWS api函数调用设计,贴近底层,体积小,是最初Windows程序 ...
- Keil STM32调试,使用ST-Link下载程序时提示“flash timeout.reset the target and try it again”
参考: 很郁闷,买来没多久的 STM32F4-DISCOVERY 就挂了? STM32F103RB Jlink调试的时候出现flash timeout.reset the target and t ...
- UVA 10518 How Many Calls?
题意:一个递推式第n项%b是多少. 递推式: 构造矩阵: #include<cstdio> #include<cstring> #include<cmath> #i ...
- JdbcTemplate的主要用法
JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...