【自动化】RobotFramework自动化测试指导说明书

提示:仅作参考


先安装RIDE工具

1、安装python,建议3.8
2、修正环境变量及镜像库地址
3、安装RIDE
pip install wxpython
pip install selenium
pip install robotframework
pip install robotframework-ride(python3.8及以上版本不兼容,需额外安装Beta版【如下倾斜部分】):
pip install psutil
pip install -U --pre robotframework-ride

pip install robotframework-seleniumlibrary

一、创建第一个自动化脚本

1.创建测试项目

选择菜单栏 file---->new Project
在这里插入图片描述
Name 输入项目名称
Type 选择 Directory

2.创建测试套件

右键点击”测试项目“选择new Suite选项
在这里插入图片描述
Name 输入项目名称
Type 选择 File

3.创建测试用例

右键点击”测试套件“选择new Test Case
在这里插入图片描述
只需要输入用例name,点击OK即可。

4.导入selenium2library库

因为RF框架编写基于WEB的测试用例,所以我们需要selenium库的支持,我们在使用的过程中需要加载selenium2library库。
在这里插入图片描述
在”测试套件“的Edit标签页,点击”Library“按钮,弹出输入框,Name输入:Selenium2Library,点击OK完成。
如果导入的库显示为红色表示导入的库不存在,如果是黑色表示导入成功。

5.编写测试用例

下面就可以开始写测试用例了,可是怎么写呢?我们可以通过F5快捷键来查询脚本的关键字。
在这里插入图片描述
自动化脚本从打开浏览器开始。如上图,想要打开一个浏览器,想的是”open“关键字,进行搜索,找到一个”Open Browser“关键字,点击这个关键字,可以显示它的用法和说明。根据说明,来尝试创建打开浏览器的操作:
在这里插入图片描述
”Open Browser“变蓝了,说明它是合法的关键字,后面的一个方框是红色的,表示这个参数是必填的。通过说明信息,了解到需要填URL地址,还需要指定browser(默认不填时为Firefox)。
更多关键字的使用,请参考相关API文档。
按照上面的方法,创建登录设备Web用例如下:
在这里插入图片描述

6.运行测试用例

勾选当前需要运行的测试用例,点击工具栏运行按钮,如果只运行单个用例,可以切换到用例的Run标签页,点击”start“按钮。
在这里插入图片描述

运行结果:
在这里插入图片描述
运行信息显示会生成三个文件:Output.xml、Log.html、Report.html
重点查看Log.html和Report.html,Log.html更关注脚本执行过程的记录,Report.html更关注脚本执行结果的展示。
快打开你的测试报告看看效果吧!
在这里插入图片描述

二、Selenium元素定位

1.id和name定位

假如把一个元素看作一个人,id和name可以看作这个人的身份证号和姓名。当然,这些属性值未必是唯一的,要看前端工程师是如何设计的。
例如一个登录页面:

......//省略
<Input class="m-wrap placeholder-no-flx required text_lang placeholder" type="text" autofocus autocomplete="off" id="user_name" name="user_name" placeholder="Username">
<Input class="m-wrap placeholder-no-flx text_lang placeholder" type="password" autocomplete="off" id="password" name="password" placeholder="Password">
......//省略
<button id="login_button" type="submit" class="btn login-btn">
	<span class="text_lang">Login</span>
</button>
......//省略

根据上面的例子,登录页面可以取id或name进行定位。前提是id和name的值在当前页面上唯一。
用户名输入框:id=user_name name=user_name
密码输入框:id=password name=password
在Robot framework中是这样写的:

Input Textid=user_nameadmin
Input Textname=password12345678

Input Text用于输入框的关键字,”admin“、”12345678“是要给输入框的内容。
登录按钮只id数据可以利用:
登录按钮 id=login_button

Click Buttonid=login_button

Click Button是按钮点击的关键字。

2.xpath定位

假如一个人没有身份证号没有名字怎么找?想想你的朋友,你想要找他吃饭,手机不通,电话不回,可以直接上他家去找,那你一定有他家的地址,xx市xx区xx路xx号。Xpath就可以通过这种层级关系找到元素。
来看看下面页面输入框在整个页面上的位置:

<html>
	<head>
	<body >
		<div  id="wrapper" style="display: block;">
			<div  id="debug"></div>
			<div  id="u"></div>
			<div  id="head"></div>
			<div  id="content" style="display: block;">
				<div  id="u1" style="display: block;"> </div>
				<div  id="m">
					<p  id="lg">
					<p  id="nv">
					<div  id="fm">
						<form  id="form1" class="fm" action="/s" name="f1">
							<span  class="bg s_ipt_wr">
								<input  id="kw1" class="s_ipt" type="text" maxlength="100" name="wd"
autocomplete="off">
							</span >
						</form >
					</div>
				</div>
			</div>
		</div>
	</body>
<html>

(1).xpath的绝对路径:
Xpath = /html/body/div[1]/div[4]/div[2]/div/form/span[1]/input
我们可以从最外层开始找,html 下面的body 下面的div 下面的第4 个div 下面的…input 标签。通过一级一级的锁定就找到了想要的元素。

提示:不推荐使用绝对路径,一旦代码层级结构进行调整,测试用例就要随着改动。

(2).xpath的相对路径:
绝对路径的用法往往是在我们迫不得已的时候才用的。大多时候用相对路径更简便。
a.元素本身:
Xpath 同样可以利用元素自身的属性:
Xpath = //[@id=’kw1’]
//表示某个层级下,*表示某个标签名。@id= user_name 表示这个元素有个id 等于user_name 。
当然,一般也可以制定标签名:
Xpath = //input[@id=’kw1’]
元素本身,可以利用的属性就不只局限为于id 和name ,如:
Xpath = //input[@type=’text’]
Xpath = //input[@autocomplete=’off’]
但要保证这些元素可以唯一的识别一个元素。

b.找上级:
当我们要找的一个人是个刚出生的婴儿,还没起名子也没有身份证号,但是你的父亲是有唯一的名字和身份证号的,这样我们可以先找到你父亲,自然就可以找到你。
元素的上级属性为:

<form id="form1" class="fm" action="/s" name="f1">
<span class="bg s_ipt_wr">
<input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd"
autocomplete="off">

找爸爸:
xpath = //span[@class=’bg s_ipt_w’]/input
如果爸爸没有唯一的属性,可以找爷爷:
xpath = //form[@id=’form1’]/span/input
这样一级一级找上去,直到html ,就是一个绝对路径了。

c.布尔值写法:
如果一个人的姓名不是唯一的,身份证号也不是唯一的,但是同时叫张三并且身份证号为
123 的人却可以唯一的确定一个人。那么可以这样写:
Xpath = //input[@id=’kw1’ and @name=’wd’]
可以and ,当然也可以or :
Xpath = //input[@id=’kw1’ or @name=’wd’]
但or 的实际意义不太。我们一般不需要说,一个人的名字或者叫张三,或者身份证号是123。

Input Textxpath = //*[@id=’kw1’’]admin
Input Textxpath = //span[@class=’bg s_ipt_w’]/inputadmin
Input Textxpath = //input[@id=’kw1’ and @name=’wd’]admin

3.CSS定位

css定位更灵活,因为它用到更多的匹配符和规格。

选择器例子例子描述
.class.intro选择class="intro"的所有元素
#id#firstname选择id="firstname"的所有元素

同样以上面输入框的代码,我们来看看CSS 如何定位。

<form id="form1" class="fm" action="/s" name="f1">
<span class="bg s_ipt_wr">
<input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd"
autocomplete="off">

id 定位:css=#kw1
class 定位:css=.s_ipt
其它属性:
css=[name=wd]
css=[type=text]
css=[autocomplete=off]
父子定位:
css=span > input
css=form > span > input
根据标签名定位:css=input
Robot framework 中的写法:

Input Textcss=#kw1admin
Input Textcss=.s_iptadmin
Input Textcss=[name=wd]admin

同样一个元素,CSS 的不同规则,可能有几十上百种写法。CSS 更灵活强大,但是相比path 的学习成本为更高。但是css 和xpath 两种定位方式是一定要学会一种,不然你的自动化工作无法开展。

三、Robot FrameWork API

提示:此文档只是将最常用的UI操作列出。更多方法请查找selenium关键字库。

在这里插入图片描述

1.浏览器驱动

通过不同的浏览器执行脚本

Open Browserhttp://192.1.1.1Chrome

浏览器对应的关键字:

firefox/ffFireFox
Internetexplorer/ieInternet Explorer
googlechrome/gc/chromeGoogle chrome
operaOpera
androidAndroid
iphoneiPhone
safariSafari

提示:要想通过不同的浏览器打开URL地址,一定要安装浏览器对应的驱动。如chrome驱动chromerdriver.exe等。
浏览器默认为空时启动FireFox。

2.关闭浏览器

关闭当前的浏览器:
Close Browser
关闭所有打开的浏览器,并将浏览器缓存重置:
Close All Browsers

3.浏览器最大化

使当前打开的浏览器全屏:
Maximinze Browser Window

4.设置浏览器宽、高

Set Windows Size800600

以像素为单位,第一个参数800表示宽度,第二个参数600表示高度

5.文本输入

Input Textxpath=//*[@]输入信息

xpath=//*[@]表述元素定位,定位文本输入框

6.点击元素

Click Elementxpath=//*[@]
Click Buttonxpath=//*[@]

7.注释

Comment注释说明
#注释说明

除了使用Comment关键字进行注释,Robot Framework框架是基于python语言开发的,所以提供了python语言的注释“#”方式。

8.固定休眠时间

sleep42或1.5或2minutes 10seconds

sleep表示执行到当前行固定休眠多长时间,以秒为单位
42表示42秒
1.5表示1.5秒
2minutes 10seconds表示2分10秒

9.等待元素出现在当前页面

a.等待元素出现在当前页面:

Wait Until Page Contains Elementxpath=//*[@]42error

xpath=//*[@]表示元素定位,这里定位出现的元素
42表示最长等待时间
Error表示错误提示,自定义错误提示,如“元素不能正常显示”

b.等待元素文本出现在当前页面:

Wait Until Page Containstext30error

text表示这里出现的文本
30表示最长等待时间
Error表示错误提示,自定义错误提示,如“元素不能正常显示”

c.判断元素出现在当前页面:

Page Should Contain Elementxpath=//*[@]admin

xpath=//*[@]表示元素定位,这里定位出现的文本
admin表示元素的值

10.获取title

获取当前浏览器窗口的title信息:
Get Title
这里只获取title是没有意义的,我们通常会将取的title传递给一个变量,然后与预期结果进行比较。从而判断当前脚本是否执行成功。

11.获取文本信息

Get Textxpath=//*[@]

xpath定位文本信息的元素

12.获取元素属性值

Get Element Attributeid=kw@name

id=kw@name :id=kw表示定位的元素。@name表示获取这个元素的name属性值。

13.cookie处理

关键字参数1参数2解释
get cookies获取当前浏览器的所有cookie
get cookie valuekey_name获取cookie的值,key_name表示一对cookie中key的name
delete cookiekey_name删除key为name的cookie信息
delete all cookies删除当前浏览器的所有cookie
add cookiekey_namevalue_name添加一对cookie(key:value)

14.声明变量

${a}Set Variablehello

定义变量a为hello。

${a}${b}Set Variablehelloworld

定义变量a为hello,b为world。

15.日志(输出)

${a}Set VariableHello World
log${a}

在测试报告中输出a变量的值hello world。
在这里插入图片描述

16.下拉框选择和去选择

关键词定位器
Select From List By Valuexpath=//*[@]value
Unselect From List By Valuexpath=//*[@]value

xpath=//*[@]定位下拉框
value选择下拉框里的属性值

17.IF分支语句

${a}Set variable
电脑

首先定义两个变量a ,b 分别为2和5 。
If 判断a大于等于1 ,满足条件log 输出“a 大于1 ”;
不满足上面的条件,接着else if 判断b 小于等于5 ,满足条件log 输出“b 小于等于5”;
上面两个条件都不满足,else log 输出“上面两个条件都不满足”。

提示:注意else if 和else 前面的三个点点点(…)

在这里插入图片描述

18.For循环语句

循环1:

:FOR${i}in range10
-log${i}

查看结果:
在这里插入图片描述
循环变量i从0到9循环10次。
循环2:

@{a}create listaaabbb
:FOR${i}in@{a}
-----------------------
-log${i}

@{a}定义一个字符串列表
通过in可以遍历非整型(in range):
在这里插入图片描述
说明:
log、if分支、for循环并非selenium关键字库提供的方法,是由BuiltIn包提供的。

四、Robot FrameWork 分层设计

谈到Robot Framework 分层的思想,就不得不提“关键字驱动”。
关键字驱动: 通过调用的关键字不同,从而引起测试结果的不同。
在上一节的selenium API 中所介绍的方法其实就是关键字,如“open browser” 就是一个关键字。从底层去看就是通过编程去现实的一个方法。
def open_browser(url,browser):
#通过browser 找到相应的浏览器驱动,调用浏览器,借助python 的httplib、urllib 模块将url 传递给浏览器。从而实现open brwoser 的目的。
通过上面的伪代码表述的“关键字”的底层其实还是程序定义的方法。
回到分层的思想上,在程序设计的讲究设计模式,设计模式其实就是根据需求使用抽象与封装,其实就是分层思想。把一个实现过程分成不同多层。提高的灵活性,从而达到可扩展性和可维护性。
再回到自动化的话题上,我们可以把操作步骤封装一个一个的方法(关键字),通过调用关键字来实
现测试用例。
对于点击Web导航菜单,只是一级与二级目录的内容不同,脚本步骤是完全一样的。这样做无疑增加的脚本的冗余,而且不便于维护。我们可以过创建关键字的方式,从而使用分层的思想来解决这个问题。

1.创建用户关键字

Robot Framework创建关键字步骤:
(1).创建资源
右键“导航菜单”选择“new resource”创建资源:
在这里插入图片描述
输入资源名称:
在这里插入图片描述
(2).创建关键字
右键“导航菜单”选择“new User Keyword”来创建用户关键字:
在这里插入图片描述
输入关键字的名称:
在这里插入图片描述
(3).编辑关键字
在这里插入图片描述
分析:
对于一个测试用例来说,用户关心的是输入什么内容,得到什么结果。
对于“导航”关键字来说,需要创建两个接口变量$ {firstmenu}和${secondmenu} ,用于指定要点击的目录。
在这里插入图片描述

2.添加调用关键字

(1).添加创建的资源
切换到测试套件(设备信息)页面,添加资源(导航菜单.robot)
在这里插入图片描述

(2).调用关键字
现在就可以在测试用例中使用创建的关键字了(导航):
在这里插入图片描述

五、全局变量

一般在资源文件中定义全局变量,通过给全局变量赋不同的值,从而引起测试结果的不同。如同一个项目的测试用例,需要在不同设备运行。那么将ip地址、用户名、密码定义成全局变量放到资源文件。

1.创建资源

Robot Framework创建全局变量步骤:
(1).创建资源
右键“测试项目”选择“new resource”创建资源:
在这里插入图片描述
输入资源名称:
在这里插入图片描述
(2).创建全局变量
右键“Resource”选择“new Scalar”创建资源:
在这里插入图片描述
输入变量名称:
在这里插入图片描述
(3).给变量赋值
在这里插入图片描述

2.添加创建的资源

切换到测试套件(登录)页面,添加资源(Resource.txt)
在这里插入图片描述

3.调用全局变量

在测试用例需要使用变量值的地方,填写定义的全局变量名称。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值