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比较多,另外还有 ...
随机推荐
- NSString与NSMutableString的浅拷贝与深拷贝
浅拷贝:指针拷贝,指针与原指针地址相同,没有创建新的对象. 深拷贝:内容拷贝,创建了新的对象,指针地址与原对象的指针地址不同. NSString测试代码如下 打印结果如下(后面打印出的两个NSCFCo ...
- KM算法的应用
HDU2255 模板 难度x HDU2282 思维 难度XXx HDU3722 模板 难度X HDU3395 模版 HDU1533 最小值模型 难度x HDU2853 HDU3 ...
- 原生API实现拖拽上传文件实践
功能: 拖拽上传文件.图片,上传的进度条,能够同时上传多个文件. 完整的demo地址:https://github.com/qcer/FE-Components/tree/master/QDrag 涉 ...
- Django REST framework 中文教程1:序列化
建立环境 在我们做任何事情之前,我们将使用virtualenv创建一个新的虚拟环境.这将确保我们的包配置与我们正在开展的任何其他项目保持良好的隔离. virtualenv envsource env/ ...
- Java常见异常处理
Exception类: 在java中用类的形式对不正常情况进行了描述和封装对象,异常就是java通过面向对象的思想将问题封装成了对象. 异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据. ...
- wpf GifBitmapDecoder 解析 gif 格式
在网上有很多图片都是gif,那么如何在 wpf 解析 gif? 本文告诉大家如何使用 GifBitmapDecoder 把gif分开为一张一张,获得他的信息. 如果需要把一个 gif 分开,使用的代码 ...
- C语言第一次实验报告
一.实验题目,设计思路,实现方法 7-7 计算火车运行时间(15 分) 4-5 求简单交错序列前N项和(15 分) 4-2-7 装睡(10 分) 思路:7-7须将时间统一单位,化为以分钟计算再将两者相 ...
- 用 eclipse 创建一个简单的 meaven spring springMvc mybatis 项目
下面是整体步骤: 1: 先创建一个Maven 项目: 选择跳过骨架: 因为要搭建的是 web 项目 所以这个地方选择 war 包; 点击完成 这样就完成 Maven项目的搭建: 接下俩 先把 Mav ...
- 用 Eclipse 搭建一个简单的 Maven spring mybatis 项目(包含测试用例)
1: 先搭建一个Maven项目: 创建好后的目录: 2: 配置pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0& ...
- 03Vue事件
Vue提供了事件的绑定,方法写在methods对象中. 绑定dom中有两种方法: 方法一:v-on:click/dblclcick/mouseOver/mouseOut="方法名" ...