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的用例截图