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

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

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

  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. Windows+Apache2.4.10+PHP7.0+MySQL5.6.21安装

    一.安装包下载 apache2.4.10 http://www.apachelounge.com/download/win64/ PHP7.0.7 http://windows.php.net/dow ...

  2. PHP 两张图片合成一张图片(加水印)

    $dst_im = 'http://www.wangshangyou.com/content/uploadfile/201312/b3241386050881.png'; $src_im = 'htt ...

  3. Python数据可视化利器Matplotlib,绘图入门篇,Pyplot介绍

    Pyplot matplotlib.pyplot是一个命令型函数集合,它可以让我们像使用MATLAB一样使用matplotlib.pyplot中的每一个函数都会对画布图像作出相应的改变,如创建画布.在 ...

  4. bootstrap 轮播模板

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Nginx配置文件中文详解

    ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...

  6. Android Annotations(1)

    特性:   Android Annotations是一个开源的框架,用于加速 Android应用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性. 特性: 依赖注入: inject ...

  7. 通过xrdp服务实现windows远程桌面连接树莓派

    如题:通过xrdp服务实现windows远程桌面连接树莓派 受同学影响,最近接触到了树莓派,又加上自己技痒想试一下这个小东西究竟能做什么,所以开始了树莓派学习之旅. 正题开始-xrdp实现window ...

  8. 《剑指Offer》面试题5-替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"We are happy.",则输出"We%20are%20happy.&quo ...

  9. CentOS本地yum源配置

    现有一台处在局域网的linux服务器,无法ping通外网,本文是关于本地yum源的配置 环境 : CentOS 6.5 一 .挂载CentOS镜像文件 (1) 创建挂载文件夹,若此文件夹已存在可忽略 ...

  10. Tirp(状压DP)

    Description 有一个N*N的迷宫,其中有一些宝藏,现在,小A要从入口(1,1)出发,到达出口(N,N),每次,小A只能从当前的格子走到上下左右四个格子,为了不空手而归,小A决定要拿到所以的宝 ...