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. PAT (Advanced Level) 1022. Digital Library (30)

    简单模拟题. 写的时候注意一些小优化,小心TLE. #include<iostream> #include<cstring> #include<cmath> #in ...

  2. 【翻译】go语言中的map实战

    业余时间翻译,水平很差,如有瑕疵,纯属无能. 原文链接 http://blog.golang.org/go-maps-in-action go语言中的map实战 1. 简介 哈希表是计算机科学中最重要 ...

  3. 使用for循环输出空心的菱形的思路-还是没有办法理解

    之前已经成功写过一次代码,今天重新看这个题目时,一下子又没了思路,在草稿纸上比划了大概十分钟才想到实现的思路.思路跟上次实现的完全一样,发现时间长了就忘记了!真是好记性不如烂笔头,何况我这么差的记性呢 ...

  4. libconfig第一篇———使用指南

    官网:http://www.hyperrealm.com/libconfig/ 1 libconfig是什么? Libconfig是一个结构化的配置文件库,它可以定义一些配置文件,例如test.cfg ...

  5. MySQL索引背后的之使用策略及优化(高性能索引策略)

    为了讨论索引策略,需要一个数据量不算小的数据库作为示例.本文选用MySQL官方文档中提供的示例数据库之一:employees.这个数据库关系复杂度适中,且数据量较大.下图是这个数据库的E-R关系图(引 ...

  6. [无关IT]就这样在凌晨写一篇吧~

    由于新浪博客广告实在太嚣张,自己也都是转载,故决定搬家至此,一改只转不写的习惯T^T,争取记录一下自己的小成长~日后有时间把脑子里的小东西一点点写出来~(好可怕的说)... 好了,睡了!各位爷早睡~ ...

  7. FATFS外置UNICODE GBK双向转换码表(转)

    源:FATFS外置UNICODE GBK双向转换码表 将UtoG,GtoU双向码表放到存储卡里面实现长文件名,因为FATFS长文件名需要unicode支持, 首先将UtoG.sys,GtoU.sys两 ...

  8. MVC 5学习总结笔记1

    01.使用MVC自带的DataAnnotations实现数据验证 public class ExternalLoginConfirmationViewModel { [Required] [Displ ...

  9. label同时设置sizeToFit,NSTextAlignmentCenter不起作用

    问题:label要多行显示,按照这样子设置,iOS9以上work,iOS8无用 self.bookNameLabel.lineBreakMode = NSLineBreakByCharWrapping ...

  10. Android与JNI(三) ---- c++调用java(转载)

    源码下载:JniDemo JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活 ...