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& ...
随机推荐
- GtkImageMenuItem
做了个工具条,每次点arrow出来的菜单都没图标,郁闷;查来查去,看源码,看css,最后知道GtkAction缺省就是对应GtkImageMenuItem,再一试,跟toolbar无关,换menu也不 ...
- PAT (Advanced Level) 1020. Tree Traversals (25)
递归建树,然后BFS一下 #include<iostream> #include<cstring> #include<cmath> #include<algo ...
- HDU 4408 Minimum Spanning Tree 最小生成树计数
Minimum Spanning Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hibernate---一对一单向主键关联(不重要)
比如, husband的id参考wife的id husband.java: package com.bjsxt.hibernate; import javax.persistence.Entity; ...
- 17.4.3 使用MulticastSocket实现多点广播(1)
http://book.51cto.com/art/201203/322560.htm <疯狂Java讲义(第2版)>本书深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法 ...
- 全文搜索之 Elasticsearch
概述 Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的. 特性 安装方便:没有其他依赖,下载 ...
- Spring--注入类型--setter
setter注入: package com.bjsxt.service; import com.bjsxt.dao.UserDAO; import com.bjsxt.model.User; publ ...
- ZOJ 3930 Dice Notation
简单模拟题.一个int写成了char,搞了4个多小时.真垃圾.. #include<stdio.h> #include<string.h> +],s[+]; +]; +]; i ...
- 25个Linux性能监控工具
一段时间以来,我们在网上向读者介绍了如何为Linux以及类Linux操作系统配置多种不同的性能监控工具.在这篇文章中我们将罗列一系列使用最频繁的性能监控工具,并对介绍到的每一个工具提供了相应的简介链接 ...
- memcached命令和配置
转自:http://www.tuicool.com/articles/VJzAvuB 安装配置 首先,编译.安装.配置libevent库,执行如下命令: wget https://github.com ...