之前已经完成了登录、新增和修改的操作流程,这一节主要说明删除操作流程以及自动化的过程中出现的问题,算是对这个项目自动化的一个总结。

删除操作流程

对于系统账号管理中删除功能,删除的测试点主要如图所示

而账号管理的页面显示如图



在管理页面中可以看出,删除操作物理删除且没有批量操作功能。但是这里有一点需要主要,每个新注册的账号会默认监管所属机构下所有的用户,所以这里为了用例的健壮性,我们删除正常的用例的具体操作步骤如下

  1. 新增一个账号信息
  2. 取消新增账号的监管用户
  3. 定位到该新增账号页面中的删除按钮,点击删除操作
  4. 根据删除提示确认删除操作
  5. 断言页面中账号不存在

说明

  1. 这里必须先把账号的监管用户取消,否则无法进行删除操作

根据步骤信息,之前已经封装好了新增账号的关键字,这里主要是取消监管用户操作步骤和关键字的封装。

取消监管用户操作步骤

  1. 取得新增账号id并打开取消监管用户的url地址
  2. 在打开的取消监管用户中取消所有的监管用户
  3. 鼠标滚动到浏览器底端,点击保存完成操作

操作步骤已然了解,接下来就是步骤的关键字封装

第一步:得到id,获取url代码如下

封装账号新增id分配监管用户的url
${gradeU.value} Get Element Attribute xpath = .//*[@id='tb_guardian']/tbody/tr[1]/td[1]/input@value
log ${gradeU.value}
${AccountAllotModify} Catenate SEPARATOR= ${toEditGuardianUser} ${gradeU.value}
[Return] ${AccountAllotModify}

取消监管用户关键字封装如图所示

第二步:打开分配监管用户,取消全部监管用户

全部取消按钮的定位代码如下

点击账号监管用户的全部取消
click element deselAll

第三步:鼠标滚动到底端,点击保存操作

封装的关键字代码如下

点击账号监管用户的保存按钮
click element xpath = html/body/div[1]/div/div/div/div[2]/div[3]/div/button[1]

这样关键字封装完成之后,我们只需要根据操作步骤,编写操作用例即可完成删除的正常用例,具体代码如下所示

账号管理删除确认
[Documentation] 用例目的:删除一个没有监管用户的账号信息
... 操作步骤
... 1.新增一个账号信息
... 2.取消新建账号的所有监管用户
... 3.删除新建的账号
... 4.确认提示中选择“确认删除”
... 断言
... 1.当前页面是否是 http://192.168.1.6/guardian/query
... 2.当前页面中的是否包含新建的账号信息
... 存在的问题:
... Location Should Be ${GuardianQuery}
... 断言当前页面无法通过,需要查看问题
[Tags] doubtfula
[Setup] login
账号新增封装
${AccountTestName} 账号名称检查
#首先取消所有监管用户
${AccountAllotModify} 封装账号新增id分配监管用户的url
打开页面 ${AccountAllotModify}
#跳转到新打开的窗口,否则会停留在新增之后的窗口,元素无法定位 #说明跳转这里使用的是第二次,无法成功,具体原因待查
goto ${AccountAllotModify}
Take Screenshot guardian
点击账号监管用户的全部取消
sleep 5
Take Screenshot guardian
Execute Javascript window.scrollTo(0, document.body.scrollHeight) #滚动到底部
点击账号监管用户的保存按钮
sleep 5
Take Screenshot guardian
确认保存
log hello1
#首先取消所有监管用户
打开页面 ${GuardianQuery}
#页面跳转
goto ${GuardianQuery}
Take Screenshot guardian
sleep 5
log hello2
点击账号删除按钮
sleep 3
log hello3
确认保存
Take Screenshot guardian
#断言当前页面的url
log hello4
Comment Location Should Be ${GuardianQuery}
page should not contain ${AccountTestName}
[Teardown] close

删除用例rf格式显示如图

到这里,删除操作正常用例已经完成,接下来就是运行测试(≧▽≦)/

而到此,针对测试中常用的增删改查已经基本上完成了,这样参考账号管理的用例编写方法,其他模块的用例完成rf的用例编写,自动化已经部署完成,这样下次我们进行回归测试的之后,直接使用jenkins只要鼠标轻轻一点就可以运行具体模块或所有模块的测试用例,下次再也不会为项目着急上线所有模块没有回归测试而感到惶惶了,这样就可以轻松滴等着开发改着bug坐等项目上线了呢,瞬间觉得很happy(o)/~......

总结

项目自动化到这里就基本完成了,这里主要是用例rf中的分层思想,这样就算开发修改了代码元素的位置,我们也只需要修改元素的具体定位方法就好了。rf自动化从刚刚接触到现在把一个项目所有操作流程的用例都建立起来,中间遇到了不少问题,非常感谢强大的互联网,才能把一个项目完成的自动化流程建立起来。这里总结一下自动化中遇到的坑吧,也算给前一个阶段的总结。

问题1

自动化中尽可能减少用例之间的关联,能使用url的地方最好使用url;所以对于许多的新增、修改和其他操作我们尽可能的使用一个相对固定的url访问打开此页面进行元素的定位和输入,如图所示



此页面账号管理页面中,对于新增或修改操作,我们需要先打开账号管理这个页面,然后再次点击新增或修改按钮打开新增或修改页面;但是如果系统中账号管理的树形结构更换或新增、修改按钮的位置变换那么我们就需要重新定位变换的元素的位置。实际上我们可以不用这么麻烦,我们首先找到账号管理的页面url,查看该页面是否是固定的url,在图中显示的/guardian/query我们把浏览器的地址192.168.1.6拼接起来,打开了账号管理主页面的地址,如图



问题2

robotframework运行测试用例时提示gckodriver相关信息,如图所示

提示代码如下

Starting test: Open.Suit.open
20170802 08:42:08.000 : INFO : Opening browser 'FireFox' to base url 'http://www.baidu.com'
20170802 08:42:08.015 : FAIL : No browser is open
20170802 08:42:08.016 : WARN : Keyword 'Capture Page Screenshot' could not be run on failure: No browser is open
20170802 08:42:08.017 : FAIL :
WebDriverException: Message: 'geckodriver' executable needs to be in PATH. Ending test: Open.Suit.open

提示说明需要在路径path中添加geckodriver,当然解决办法就是,下载一个geckodriver.exe并将存放的路径添加在path中,简单点就直接放python的根目录下即可,下载地址 https://github.com/mozilla/geckodriver/releases,另外需要注意下,geckodriver分32及64位的版本,版本需与浏览器对应。

问题3

问题背景:利用robotframework在写自动化脚本的时候, 有些场景下需要新建一个浏览器窗口,但是又需要共享原窗口的session,这时候只需要在浏览中新打开一个tab页就可以。比如以上面的新增账号为例,我打开登录页面,登录成功之后,需要再次打开新增账号页面,而新增账号页面和登录成功的页面是共用session的,这个如何实现的呢?脚本如下:

Execute JavaScript    window.open('addGuardian');

或者可以使用robotframework中的关键字goto实现,代码如图

 goto    ${AccountAllotModify}

goto的用法可以在robotframework中查看该关键字如何使用,如图

问题4

robotframework运行用例时,只第一次运行用例的时候有日志显示,之后不会显示该日志信息,日志信息显示如图



解决方法:这里使用的是火狐浏览器,每次第一次运行测试用例的时候电脑中会启动一个进行geckodriver.exe,所以在每次运行完用例后,在最后的teardown中增加一个关闭进程的操作即可,代码如图

close
Close Browser
Comment ${Runoutput} OperatingSystem.Run taskkill /f /im geckodriver.exe
OperatingSystem.Run taskkill /f /im geckodriver.exe

这样修改之后,每次运行都可以看到日志信息了。

问题5

随机选择下拉框选项:

背景:如账号添加的时候我们需要选择账号所属机构,如果想选择每次添加的账号是随机的,那么该如何操作呢?可以看一下之前的robotframework随机选择下拉框

问题6

新增或修改用例中用户名、姓名、身份证号、手机号等这些字段中,有唯一性验证,所以为了测试的严谨性,我们需要每次添加或修改的信息是唯一的,该如何实现呢?

解决方法:这里使用了QTLibrary的一个关键字,安装和使用参考 https://github.com/qitaos/Robotframework-QTLibrary

这样安装完成之后,直接加入Library即可使用该关键字信息

随机姓名代码如下

${username}=    gen chars    10
输入用户名 ${username}

其他随机英文或数字或身份证以及生日使用请参考QTLibrary的使用关键字。

而这里的随机手机号使用的是robotframework中强大的关键字Evaluate来实现操作的,代码如下

${phone}    Evaluate    random.choice(['139','188','185','136','158','151'])+"".join(random.choice("0123456789") for i in range(8))    random
手机号码 ${phone}

robotframework中如图所示

问题7

在项目自动化用例编写完成之后,我们每次运行用例如果一个个点击运行的话会非常繁琐,而jenkins给自动化构建提供了一种解决办法。在使用jenkins运行测试用例的时候,无法打开浏览器如图所示

主要原因是jenkins安装的时候注册成windos的服务了,所以这里如果是tomcat启动或直接使用命令启动的jenkins则不会出现这个问题滴!那么如果不想重新安装jenkins该如何操作呢?

解决办法:

  1. 打开windows服务窗口(win+r 输入‘services.msc’)
  2. 找到Jenkins服务

    a). 停止此服务

    b). 将启动类型由自动->手动
  3. 找到Jenkins安装目录里的jenkins.war,在cmd窗口运行 java -jar x:/youfilepath/jenkins.war

问题8

在使用jenkins运行测试用例之后,我们可以打开运行的测试报告或log查看具体的日志信息,可是在这个最后即将胜利的时刻,竟然无法查看日志信息,瞬间感觉整个世界都不好了,(⊙_⊙?)

解决办法:使用命令java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar D:\Jenkins\jenkins.war,在命令启动jenkins中增加-Dhudson.model.DirectoryBrowserSupport.CSP= 再次重新打开jenkins重新运行用例,这下日志终于可以看到......





这样重新打开jenkins,再次运行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自动化系统:登录 robotframework对于编程能力比较弱的测试人员而言,真的是雪中送炭!我们可以使用robotframework根据之前完成的测试用例,一步步完善自 ...

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

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

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

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

  9. 从零学习基于Python的RobotFramework自动化

    从零学习基于Python的RobotFramework自动化 一.        Python基础 1)      版本差异 版本 编码 语法 其他 2.X ASCII try: raise Type ...

随机推荐

  1. 项目常见函数封装,基于Jquery

    /// <reference path="jquery-1.8.0.min.js" /> /* * DIV或元素居中 * @return */ jQuery.fn.mC ...

  2. LinearGradientBrush,RadialGradientBrush的样式说明

    LinearGradientBrush 使用线性渐变绘制区域.线性渐变沿直线定义渐变.该直线的终点由线性渐变的 StartPoint 和 EndPoint 属性定义.LinearGradientBru ...

  3. Opencv处理鼠标事件-OpenCV步步精深

    在图片上双击过的位置绘制一个 圆圈 鼠标事件就是和鼠标有关的,比如左键按下,左键松开,右键按下,右键松开,双击右键等等. 我们可以通过鼠标事件获得与鼠标对应的图片上的坐标.我们通过以下函数来调用查看所 ...

  4. SAP文件的上传下载 SMW0,二进制文件

    TCODE: SMW0 选择:二进制数据 输入包名和对象名 新建 维护文件类型 文件参数信息 下载: DATA: LS_WWWDATA_ITEM LIKE WWWDATATAB, " LV_ ...

  5. BAT级别分类

    阿里的级别:P为技术岗,M为管理岗.P7是技术专家级别. 阿里级别对应薪资:  百度使用的T系列及对应薪资: 腾讯的T系列及对应薪资:

  6. 即时通信系统Openfire分析之七:集群配置

    前言 写这章之前,我犹豫了一会.在这个时候提集群,从章节安排上来讲,是否合适?但想到上一章<路由表>的相关内容,应该不至于太突兀.既然这样,那就撸起袖子干吧. Openfire的单机并发量 ...

  7. Node Inspector 代理实现

    本文首发于 https://github.com/whxaxes/blog/issues/9 背景 平时做 node 开发的时候,通过 node inspector 来进行断点调试是一个很常用的 de ...

  8. Python学习笔记(四)

    Python学习笔记(四) 作业讲解 编码和解码 1. 作业讲解 重复代码瘦身 # 定义地图 nav = {'省略'} # 现在所处的层 current_layer = nav # 记录你去过的地方 ...

  9. JavaScript HTML Dom改变HTML

    本人为小白,首次写博客  有不正确的地方望多多指点与见谅!! 一,改变HTML的内容 语法: document.getElementById(id).innerHTML=new HTML: 具体用法: ...

  10. java统计英文字母、空格、数字和其它字符的数目

    package tes; import java.util.Scanner; //java统计英文字母,空格,数字和其它字符的数目 public class ZiFuTongJi { public s ...