robotframework自动化系列:修改流程
在上一小节中,新增流程操作已经完成。那么接下来就是修改的流程操作了,对于一个页面的修改如何操作呢?
针对修改修改操作是在一个已经存在的账号直接修改还是新添加一个账号再修改呢?从用例设计健壮性出发,我们先新增一个账号,然后再修改这个账号,这样用例和用例之间的不会存在因果关系,不会因为不存在这个账号而造成此修改用例失败!
接下来就说明一下修改用例的思路:
- 新增一个账号信息,新增后的操作要返回此新增账号的账号id
- 找到修改页面的不变的url地址,把此url封装成一个变量
- 根据第一步返回的账号id和第二步查出的url两者封装成一个具体账号的修改页面的url
- 在浏览器中打开此修改页面的url地址,页面切换到此url中
- 定位修改页面的元素,并封装成关键字信息
- 根据新增账号用例的测试点进行账号修改用例的操作
- 断言修改账号成功
这里需要注意两点
账号修改用例中,为了用例的健壮性,每次修改操作的时候,都会先新增账号,所以这里的新增账号用例此处需要进行封装
针对自动化中,页面中出现的新增、修改等操作,能使用具体url的建议直接使用url打开新的页面进行新增和修改的操作
这里就是在进行web自动化中,如图所示的一个展示页面

这里页面显示的新增和修改操作,我们会想到有2种思路,一种思路是直接定位到该url页面中,在页面中,点击新增按钮,打开新增页面进行用例的编写;另外一种思路是直接找出新增页面的url地址,然后定位到该url地址中,进行用例的编写;这两种思路都能够实现新增账号的操作,但是相对来说更推荐第二种操作方法,这样如果页面中的新增或修改按钮的位置发生变化,我们不用再次去修改新增或修改按钮的定位方法,相对来说提高了工作效率~ o( ̄▽ ̄)ブ
因为修改账号的用例中,我们每次操作都要新增账号操作,这里我们把之前的新增账号中一个正常的用例封装成关键字,(添加账号有疑问的,可以参考 http://www.cnblogs.com/LOVEYU/p/7825173.html)
封装的新增账号关键字,如图所示

根据之前的修改思路,新增账号已经完成,我们先看一下修改页面具体的url,进行对比分析出url中不变的元素和变化的元素,具体的URL地址如图所示

通过url对比分析,确定前半部分 192.168.1.6/page/view/guardian/edit.html?id=是不变的元素,而后面的140则是根据新增账号生成的不同的id号,那么接下来就是找到新增账号的id信息,我们先来看一下query页面的源码如图

截图中,name="ids" value= "490"就是新增账号产生的id号,接下来就是将这两部分元素进行拼接,而robotframework中的Catenate关键字可以实现字符的拼接,具体代码如下
封装账号新增id的url
${gradeU.value} Get Element Attribute xpath = .//*[@id='tb_guardian']/tbody/tr[1]/td[1]/input@value
log ${gradeU.value}
${AccountModify} Catenate SEPARATOR= ${GuardianEdit} ${organid} ${gradeU.value}
[Return] ${AccountModify}
robotframework中关键字封装如图

这样修改账号页面的url我们已经找到,那么接下来就是修改流程中的下面操作步骤
- 在浏览器中打开此修改页面的url地址,页面切换到此url中
- 定位修改页面的元素,并封装成关键字信息
- 根据新增账号用例的测试点进行账号修改用例的操作
- 断言修改账号成功
这里修改页面的元素定位和新增账号页面的元素定位是一致的,所以我们可以直接使用新增账号页面中的定位关键字进行操作。
代码如下
账号修改
[Documentation] 账号信息修改;所有元素符合条件
... 用例目的
... 修改账号信息,所有信息符合
... 断言
... 1.页面显示正常
... 2.修改的账号名称显示正常
[Setup] login
账号新增封装
${GuardianAccEdit} 封装账号新增id的url
打开页面 ${GuardianAccEdit}
#跳转到新打开的窗口,否则会停留在新增之后的窗口,元素无法定位 #说明跳转这里使用的是第二次,无法成功,具体原因待查
goto ${GuardianAccEdit}
Take Screenshot guardian
${Accountame}= gen chars 20
输入用户名 ${Accountame}
Comment ${passwd} gen nums 22
Comment 输入密码 ${passwd}
Comment 再次输入密码 ${passwd}
${phone} Evaluate random.choice(['139','188','185','136','158','151'])+"".join(random.choice("0123456789") for i in range(8)) random
手机号码 ${phone}
邮箱 bill@163.com
选择用户组
用户所属机构 机构养老一
部分数据权限
Take Screenshot guardian
Execute Javascript window.scrollTo(0, document.body.scrollHeight) #滚动到底部
点击账号修改中的保存按钮
Comment Execute Javascript window.scrollTo(0,0) #滚动到顶部
sleep 10
#确认显示信息
角色确认
sleep 10
Take Screenshot guardian
Comment ${mes}= Confirm Action
Comment sleep 10
Comment Should Be Equal As Strings ${mes} 保存成功!
Comment 确认保存
Comment ${Auser} get text xpath=.//*[@id='tb_guardian']/tbody/tr[1]/td[2] #后期po
#断言当前页面的url
Location Should Be ${GuardianQuery}
${Auser} 账号名称检查
Take Screenshot guardian
Should Match ${Auser} ${Accountame}
log ${username}
[Teardown] close
说明
- 因为修改页面中的所属机构是树形结构展示,右侧出现滚动条,必须滚动到底部才能点击修改账号页面中的保存按钮,所以这里使用了js函数滚动到底部的操作,代码如下
Execute Javascript window.scrollTo(0, document.body.scrollHeight) #滚动到底部 - 对于自动化而言最我们经常遇到打开url的操作,有时候打开多个url,但是页面定位元素的时候一直提示元素找不到,除了是因为页面响应时间过短,元素没有出现之后,还有一种可能就是定位元素的页面url仍停留在上一个url的页面中,这个时候我们需要用到切换url的操作,而robotframework框架中可以使用
goto ${GuardianAccEdit}或select window title= 账号管理或select window url=${organizationModify} #此方法也可以实现具体关键字的使用方法可以按F5,查找关键字的使用,如图

而修改账号中断言有2点
- 页面url跳转正确
- 页面显示的账号用户名和修改的用户名是一致的
到这里修改账号的正常的用例已经编写完成(o)/~
接下来就是根据用例编写其他修改账号的用例喽,这里就不费笔墨了,展示一下账号修改页面的测试点和robotframework的用例截图


robotframework自动化系列:修改流程的更多相关文章
- robotframework自动化系列:随机下拉框
robotframework自动化系列:随机下拉框 随着项目自动化不断推进,在下拉框定位的时候出现些问题,每次下拉框选择都是相同的下拉选项,如果想每次选择的选项不一样,该如何实现呢,查找了很多资料,没 ...
- robotframework自动化系列:新增流程
刚接手项目的时候,要求所有流程在上线之前必须确保正向操作是正确的:这个时候又有新的模块需要测试,所以引入自动化测试是非常有必要的!通过对比,尝试使用RF进行自动化的回归测试. 测试中最常见的操作就是增 ...
- robotframework自动化系列:删除操作流程以及总结
之前已经完成了登录.新增和修改的操作流程,这一节主要说明删除操作流程以及自动化的过程中出现的问题,算是对这个项目自动化的一个总结. 删除操作流程 对于系统账号管理中删除功能,删除的测试点主要如图所示 ...
- robotframework自动化系列:文本类型的下拉框
对于下拉框定位和输入,这里主要遇到有两种类型的下拉选择. 其中一个类型是select-options格式,如图 这种方式的定位可以使用select from list by value或select ...
- robotframework自动化系列:操作mysql数据库
随着项目自动化深入和不断完善,大部分功能都已经能完成了自动化的操作:但是在设备添加的时候,遇到了难题.添加设备的时候mac必须是服务器设备管理中已经存在的mac地址,且是没有关联或绑定用户的设备信息. ...
- Robotframework自动化系列:筛选结果数量统计
Robotframework自动化系统:筛选结果数量统计 上一个节点已经可以随机选中某一个下拉框的值,我们在使用evaluate随机数的时候需要计算下拉选项总数,这时候我们是手工计算输入的:这时候如果 ...
- robotframework自动化系列:登陆操作
robotframework自动化系统:登录 robotframework对于编程能力比较弱的测试人员而言,真的是雪中送炭!我们可以使用robotframework根据之前完成的测试用例,一步步完善自 ...
- RobotFrameWork自动化系列:安装配置
1. RobotFrameWork安装配置 1.1. 安装环境 64位win10家庭中文版 网上很多这方面的教程,但是比较零散,这里是自己安装配置的一个简单的笔记. 1.2. 安装说明 由于Rob ...
- 运维与自动化系列④自动化部署基础与git
运维与自动化系列④自动化部署基础与git 自动化部署基础与git 一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有 ...
随机推荐
- Windows下memcached的安装配置
下载windows 32位或64位 memcached 下载 memcached_dll 1.将第一个包解压放某个盘下面,比如在c:\memcached.2.在终端(也即cmd命令界面)下输入 'c: ...
- Yii 2.0 数据库操作总结
1. 概述 操作数据库有2种方式: DAO(data access object),不安全 ORM(onject relational mapping) 2. DAO Yii::app()->d ...
- ubuntu中切换到root账号方法
ubuntu如何切换到root用户身份? 前面小编分享了ubuntu怎么开启root用户,下面小编来分享如何切到到root用户 方法/步骤 按照下面的方式打开终端工具,或者使用终端工具的快捷键Ctrl ...
- redis性能调优笔记(can not get Resource from jedis pool和jedis connect time out)
对这段时间redis性能调优做一个记录. 1.单进程单线程 redis是单进程单线程实现的,如果你没有特殊的配置,redis内部默认是FIFO排队,即你对redis的访问都是要在redis进行排队,先 ...
- 干了这杯Java之LinkedList
LinkedList和ArrayList一样实现了List接口 ArrayList内部为数组 LinkedList内外为双向链表 实现了Deque接口,双端列队的实现 图片来自Wiki 内部实现为No ...
- Iframe父子窗口之间的跨域事件调用和传值
实现方案1:location.hash传值 父页面:parent.html(所在域:www.parent.com) 子页面:child.html(所在域:www.child.com) 要实现父子页面双 ...
- 简单说下C#变量的作用域
变量的作用域分为局部变量和全局变量举个小例子 class Program { int i = 3;//这个变量i 需要实例化Program才能使用 static void Main(string[] ...
- 用 Eclipse 创建一个简单的web项目
Eclipse neon 汉化版 ; 1;右击新建 --> 选择 动态Web项目 2: 填写 项目名 项目位置 ; 选择 Dynamic web module version 和 tomca ...
- 顺序栈--Java实现
/*栈和队列:逻辑结构属于操作受限的线性表 *栈:特点先进后出,只允许在栈顶操作 *栈的实现方式:顺序栈和链栈 *常见的操作:进栈,出栈,获取栈顶,判空,判满,栈的容量 *栈的应用 *1.逆序相关操作 ...
- LeetCode 287. Find the Duplicate Number (找到重复的数字)
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...