在上一小节中,新增流程操作已经完成。那么接下来就是修改的流程操作了,对于一个页面的修改如何操作呢?

针对修改修改操作是在一个已经存在的账号直接修改还是新添加一个账号再修改呢?从用例设计健壮性出发,我们先新增一个账号,然后再修改这个账号,这样用例和用例之间的不会存在因果关系,不会因为不存在这个账号而造成此修改用例失败!

接下来就说明一下修改用例的思路:

  1. 新增一个账号信息,新增后的操作要返回此新增账号的账号id
  2. 找到修改页面的不变的url地址,把此url封装成一个变量
  3. 根据第一步返回的账号id和第二步查出的url两者封装成一个具体账号的修改页面的url
  4. 在浏览器中打开此修改页面的url地址,页面切换到此url中
  5. 定位修改页面的元素,并封装成关键字信息
  6. 根据新增账号用例的测试点进行账号修改用例的操作
  7. 断言修改账号成功

这里需要注意两点

  1. 账号修改用例中,为了用例的健壮性,每次修改操作的时候,都会先新增账号,所以这里的新增账号用例此处需要进行封装

  2. 针对自动化中,页面中出现的新增、修改等操作,能使用具体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我们已经找到,那么接下来就是修改流程中的下面操作步骤

  1. 在浏览器中打开此修改页面的url地址,页面切换到此url中
  2. 定位修改页面的元素,并封装成关键字信息
  3. 根据新增账号用例的测试点进行账号修改用例的操作
  4. 断言修改账号成功

这里修改页面的元素定位和新增账号页面的元素定位是一致的,所以我们可以直接使用新增账号页面中的定位关键字进行操作。

代码如下

账号修改
[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

说明

  1. 因为修改页面中的所属机构是树形结构展示,右侧出现滚动条,必须滚动到底部才能点击修改账号页面中的保存按钮,所以这里使用了js函数滚动到底部的操作,代码如下Execute Javascript window.scrollTo(0, document.body.scrollHeight) #滚动到底部
  2. 对于自动化而言最我们经常遇到打开url的操作,有时候打开多个url,但是页面定位元素的时候一直提示元素找不到,除了是因为页面响应时间过短,元素没有出现之后,还有一种可能就是定位元素的页面url仍停留在上一个url的页面中,这个时候我们需要用到切换url的操作,而robotframework框架中可以使用goto ${GuardianAccEdit}select window title= 账号管理 select window url=${organizationModify} #此方法也可以实现 具体关键字的使用方法可以按F5,查找关键字的使用,如图

而修改账号中断言有2点

  1. 页面url跳转正确
  2. 页面显示的账号用户名和修改的用户名是一致的

到这里修改账号的正常的用例已经编写完成(o)/~

接下来就是根据用例编写其他修改账号的用例喽,这里就不费笔墨了,展示一下账号修改页面的测试点和robotframework的用例截图



robotframework自动化系列:修改流程的更多相关文章

  1. robotframework自动化系列:随机下拉框

    robotframework自动化系列:随机下拉框 随着项目自动化不断推进,在下拉框定位的时候出现些问题,每次下拉框选择都是相同的下拉选项,如果想每次选择的选项不一样,该如何实现呢,查找了很多资料,没 ...

  2. robotframework自动化系列:新增流程

    刚接手项目的时候,要求所有流程在上线之前必须确保正向操作是正确的:这个时候又有新的模块需要测试,所以引入自动化测试是非常有必要的!通过对比,尝试使用RF进行自动化的回归测试. 测试中最常见的操作就是增 ...

  3. robotframework自动化系列:删除操作流程以及总结

    之前已经完成了登录.新增和修改的操作流程,这一节主要说明删除操作流程以及自动化的过程中出现的问题,算是对这个项目自动化的一个总结. 删除操作流程 对于系统账号管理中删除功能,删除的测试点主要如图所示 ...

  4. robotframework自动化系列:文本类型的下拉框

    对于下拉框定位和输入,这里主要遇到有两种类型的下拉选择. 其中一个类型是select-options格式,如图 这种方式的定位可以使用select from list by value或select ...

  5. robotframework自动化系列:操作mysql数据库

    随着项目自动化深入和不断完善,大部分功能都已经能完成了自动化的操作:但是在设备添加的时候,遇到了难题.添加设备的时候mac必须是服务器设备管理中已经存在的mac地址,且是没有关联或绑定用户的设备信息. ...

  6. Robotframework自动化系列:筛选结果数量统计

    Robotframework自动化系统:筛选结果数量统计 上一个节点已经可以随机选中某一个下拉框的值,我们在使用evaluate随机数的时候需要计算下拉选项总数,这时候我们是手工计算输入的:这时候如果 ...

  7. robotframework自动化系列:登陆操作

    robotframework自动化系统:登录 robotframework对于编程能力比较弱的测试人员而言,真的是雪中送炭!我们可以使用robotframework根据之前完成的测试用例,一步步完善自 ...

  8. RobotFrameWork自动化系列:安装配置

    1.   RobotFrameWork安装配置 1.1. 安装环境 64位win10家庭中文版 网上很多这方面的教程,但是比较零散,这里是自己安装配置的一个简单的笔记. 1.2. 安装说明 由于Rob ...

  9. 运维与自动化系列④自动化部署基础与git

    运维与自动化系列④自动化部署基础与git 自动化部署基础与git 一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有 ...

随机推荐

  1. MyBatis Generator代码自动生成工具的使用

    MyBatis Generator MyBatis Generator有三种使用方式,分别是maven插件形式.命令行形式以及eclipse插件形式.我在这里使用的是命令行的形式(主要是命令行形式比较 ...

  2. DotNetCore跨平台~一起聊聊Microsoft.Extensions.DependencyInjection

    写这篇文章的心情:激动 Microsoft.Extensions.DependencyInjection在github上同样是开源的,它在dotnetcore里被广泛的使用,比起之前的autofac, ...

  3. IDL 矩阵运算

    矩阵相乘,A#B表示A的列乘以B的行,要求A的行数必须跟B的列数一致 IDL> A=[[0,1,2],[3,4,5]] IDL> B=[[0,1],[2,3],[4,5]] IDL> ...

  4. html加载时事件触发顺序

    一般情况下页面的响应加载顺序时,域名解析-加载html-加载js和css-加载图片等其他信息. jq ready()的方法就是Dom Ready,他的作用或者意义就是:在DOM加载完成后就可以可以对D ...

  5. c# Linq操作XML,查找节点数据

    /*查找XML*/ var filePath = Server.MapPath("~/xml/sample.xml"); XDocument doc = XDocument.Loa ...

  6. MySql5.7安装及配置

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS ...

  7. Appium python自动化测试系列之Android知识讲解(三)

    ​3.1 ADB工具讲解 3.1.1 什么是ADB呢? 我们不去解释官方语言的翻译,给大家说一个通熟易懂的说法,ADB我理解为他就是电脑和手机连接的桥梁.此连接不是充电的连接,大家不要混淆,说他是一个 ...

  8. PHP 页面静态化/纯静态化/伪静态化

    个人博客迁移至独立博客:https://blog.plcent.com/,欢迎大家访问 概念 PHP静态化分为:纯静态化 和 伪静态化:纯静态化又分为:局部静态化 和 完全静态化 纯静态化:是把PHP ...

  9. Servlet 笔记-过滤器

    Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet.Servlet 过滤 ...

  10. Git相关操作一

    1.将目录变为Git项目: 输入git init将当期目录变为Git项目 git init git项目可以被认为分为三个区域,Working Directory,Staging Area,Reposi ...