好久没有继续分享关于自动化测试相关的东西了,自动化在现今的测试领域已经越来越重要了,大部分公司在测试岗位招聘中都需要会相关的自动化测试知识。而 RobotFramework自动化测试框架 是自动化测试中
用的最多一个框架,基于Python编程语言设计的可扩展的关键字驱动模式的测试自动化框架,具备良好的可扩展性,可以通过xml-rpc服务扩展支持其它的常用编程语言,可以同时测试多种类型的客户端或者接口,可以支持进行分布式测试执行。
Robot Framework具有如下的特点:
- 易于使用,采用表格式输入语法,统一的测试用例格式。
- 重用性好,可以利用现有关键字来组合新的用户自定义关键字。
- 支持资源文件,支持多种变量类型,包括字符串变量,list列表变量,Dictionary字典变量等。
- 测试案例执行结果报告和日志采用HTML格式,易于阅读和邮件转发。
- 提供标签以分类来选择将被执行的测试用例,使得测试案例的执行选择更加灵活。
- 支持WEB界面测试,web接口服务测试、GUI 测试、多种终端测试。
- 支持多种数据库的操作,包括常用的关系型数据库,非关系型数据库。
- 易于扩展自定义的Lib库,可以通过python或者java等其他开发语言来动态扩展Lib库。
本文章节目录:
1、Input Text
2、Click Button
3、Click Element
4、Click Link
5、Add Cookie,Get Cookies 和Delete Cookie
6、Get All Links
7、Choose File(文件上传)
8、Get Text
9、Get Title
说明:我们这里是紧接着RobotFramework自动化测试框架-Selenium Web自动化(-)-Open Browser和Close Browser 这篇往后继续的。作者的原创文章,转载时请注明出处:作者为张永清,链接为https://www.cnblogs.com/laoqing/articles/11831022.html。
1、Input Text
Input Text关键字用于模拟向一个输入框中输入文字内容,该关键字接收两个参数[ locator | text ],locator参数指的定位界面元素的方式,text参数指的是需要输入的内容。
示例1:打开百度,向输入框中输入Robot FrameWork,这里采用id的方式来定位界面的输入框元素,可以采用谷歌浏览器自带的开发者工具查看该输入框的元素,如下图所示。
Open Browser http://www.baidu.com chrome
Input Text id=kw Robot FrameWork
执行结果如下:如下图中所示。
Starting test: RobotFrameworkTest1.TestSuite6.TestCase0002
20170529 15:44:23.918 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com'
20170529 15:44:32.068 : INFO : Typing text 'Robot FrameWork' into text field 'id=kw'
Ending test: RobotFrameworkTest1.TestSuite6.TestCase0002
2、Click Button
Click Button关键字用于模拟点击页面中的按钮,该关键字接收一个参数[ locator ]。
示例1:打开百度,向输入框中输入Robot FrameWork后,点击百度一下按钮,进行搜索。
这里通过id=su来定位百度一下这个按钮,如下图中所示。
Open Browser http://www.baidu.com chrome
Input Text id=kw Robot FrameWork
Click Button id=su
执行结果如下:如下图中所示。
Starting test: RobotFrameworkTest1.TestSuite6.TestCase0002
20170529 16:01:02.161 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com'
20170529 16:01:12.505 : INFO : Typing text 'Robot FrameWork' into text field 'id=kw'
20170529 16:01:12.917 : INFO : Clicking button 'id=su'.
Ending test: RobotFrameworkTest1.TestSuite6.TestCase0002
3、Click Element
Click Element关键字用于模拟点击一个通过locator定位到的具体元素,可以是通过id或者name,xpath等都可以。该关键字接收一个参数[ locator ]
示例1:这里我们继续访问百度的首页,通过id来定位一个元素,并且使用Click Element关键字来模拟点击这个元素定位到的按钮,如下图中所示。
Open Browser http://www.baidu.com chrome
Click Element id=su
Sleep 2
Close Browser
执行结果如下:
Starting test: RobotFrameworkTest1.TestSuite6.TestCase0003
20180728 09:59:02.582 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com'
20180728 09:59:14.272 : INFO : Clicking element 'id=su'.
20180728 09:59:17.158 : INFO : Slept 2 seconds
Ending test: RobotFrameworkTest1.TestSuite6.TestCase0003
4、Click Link
Click Link关键字用于模拟点击一个链接 。该关键字接收一个参数[ locator ]
示例1:这里我们继续访问百度的首页,通过模拟点击百度首页又上角的”地图”链接来说明此关键字的使用。我们通过href="http://map.baidu.com" 来模拟点击这个链接,如下图中所示。
Open Browser http://www.baidu.com chrome
Click Link http://map.baidu.com
Sleep 2
Close Browser
执行结果如下:
Starting test: RobotFrameworkTest1.TestSuite6.TestCase0004
20180728 10:10:37.328 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com'
20180728 10:10:47.171 : INFO : Clicking link 'http://map.baidu.com'.
20180728 10:10:53.170 : INFO : Slept 2 seconds
Ending test: RobotFrameworkTest1.TestSuite6.TestCase0004
示例2:Click Link关键字除了上面说到的直接通过href链接来定位元素外,也可以通过id或者name来定位,这里以name作为示例来进行示例。
Open Browser http://www.baidu.com
Click Link name=tj_trmap
Sleep 5
Close Browser
执行结果如下:
Starting test: RobotFrameworkTest1.TestSuite6.TestCase0005
20180728 10:22:35.467 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com'
20180728 10:22:44.921 : INFO : Clicking link 'name=tj_trmap'.
20180728 10:22:57.497 : INFO : Slept 5 seconds
Ending test: RobotFrameworkTest1.TestSuite6.TestCase0005
运行时可以看到正在加载百度地图的画面,如下图中所示。
5、Add Cookie,Get Cookies 和Delete Cookie
Add Cookie关键字用于模拟向本地浏览器中添加一个Cookie缓存,Cookie也是我们在做web自动化测试时,经常需要用到的一个概念。该关键字接收[ name | value | path=None | domain=None | secure=None | expiry=None ]这几个参数,如下表所示。
name |
Cookie的名称 |
Value |
Cookie的具体值 |
path |
Cookie对应的路径,如果不填的话,默认为None |
domain |
Cookie对应的域名,如果不填的话,默认为None |
secure |
Cookie的安全属性,这个属性是用来保证cookie的安全的,如果一个cookie被设置了Secure=true,那么这个cookie只能用https协议发送给服务器,用http协议是不发送的。 |
expiry |
Cookie的过期时间,如果不填的话,默认为空 |
这里我以登录到我的博客园后,浏览器中显示的cookie为示例,通过下图中所示。可以看到上面表格中对应的字段都可以在浏览器中的cookie中看到。
Get Cookie关键字用于获取浏览器中缓存的所有Cookie,这个关键字后面不需要加任何的参数。
Delete Cookie关键字用于删除浏览器中缓存的Cookie,该关键字接收一个参数[ name ],该参数用于标志需要删除的cookie的名称。
示例1:这里我们以访问百度首页为例,我们自己添加一个名称为book的cookie,并且将该cookie的值写为Robot Framework,secure属性设置为true,然后通过Get Cookies 关键字来获取所有的Cookie,然后删除我们自己添加的Cookie。
Open Browser http://www.baidu.com chrome
Add Cookie book Robot Framework / baidu.com true
${cookie} Get Cookies
log ${cookie}
Sleep 50
Delete Cookie book
${cookienew} Get Cookies
log ${cookienew}
Sleep 2
Close Browser
运行结果如下:
Starting test: RobotFrameworkTest1.TestSuite6.TestCase0006
20180728 11:02:14.076 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com'
20180728 11:02:24.488 : INFO : ${cookie} = H_PS_PSSID=26523_1443_26433_21112_26924_20930; BAIDUID=53A9ECC2223045BB4D28064D8CCC2428:FG=1; PSTM=1532746930; BIDUPSID=53A9ECC2223045BB4D28064D8CCC2428; delPer=0; BD_HOME=0; BD_UPN=12314353; book= Robot Framework
20180728 11:02:24.489 : INFO : H_PS_PSSID=26523_1443_26433_21112_26924_20930; BAIDUID=53A9ECC2223045BB4D28064D8CCC2428:FG=1; PSTM=1532746930; BIDUPSID=53A9ECC2223045BB4D28064D8CCC2428; delPer=0; BD_HOME=0; BD_UPN=12314353; book=Robot Framework
20180728 11:03:14.490 : INFO : Slept 50 seconds
20180728 11:03:15.772 : INFO : ${cookienew} = H_PS_PSSID=26523_1443_26433_21112_26924_20930; BAIDUID=53A9ECC2223045BB4D28064D8CCC2428:FG=1; PSTM=1532746930; BIDUPSID=53A9ECC2223045BB4D28064D8CCC2428; delPer=0; BD_HOME=0; BD_UPN=12314353
20180728 11:03:15.773 : INFO : H_PS_PSSID=26523_1443_26433_21112_26924_20930; BAIDUID=53A9ECC2223045BB4D28064D8CCC2428:FG=1; PSTM=1532746930; BIDUPSID=53A9ECC2223045BB4D28064D8CCC2428; delPer=0; BD_HOME=0; BD_UPN=12314353
20180728 11:03:17.775 : INFO : Slept 2 seconds
Ending test: RobotFrameworkTest1.TestSuite6.TestCase0006
从运行的日志结果看,通过Add Cookie book Robot Framework / baidu.com true,可以添加一个Cookie,并且可以将该Cookie的secure属性设置为true。在运行的过程,通过浏览器自带的开发者工具,也可以看到名称叫book的cookie已经成功添加完成,如下图中所示。
在使用Get Cookies关键字时,可以获取到浏览器打开后里面所有的cookie,除了获取到这里我们自己添加的cookie外,还获取到了访问百度首页时,百度首页在本地浏览器中保存的cookie。最后通过Delete Cookie关键字删除名称为book的cookie后,我们再通过Get Cookies关键字来获取所有的cookie时,就已经不能再获取到名称为book的cookie信息了。
6、Get All Links
Get All Links 关键字用来获取所有页面上所有的href链接的元素对应的id,链接对应的元素中没有id时,就以一个空字符串代替。
示例1:我们继续访问百度,找出百度首页中存在多少个链接数
Open Browser http://www.baidu.com/ chrome
${links} Get All Links
log ${links}
Sleep 2
Close Browser
运行结果如下:
Starting test: RobotFrameworkTest1.TestSuite6.TestCase0007
20180728 11:31:18.136 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com/'
20180728 11:31:28.558 : INFO : get_attribute id
20180728 11:31:28.566 : INFO : get_attribute id
20180728 11:31:28.574 : INFO : get_attribute id
20180728 11:31:28.582 : INFO : get_attribute id
20180728 11:31:28.592 : INFO : get_attribute id
20180728 11:31:28.599 : INFO : get_attribute id
20180728 11:31:28.607 : INFO : get_attribute id
20180728 11:31:28.617 : INFO : get_attribute id
20180728 11:31:28.624 : INFO : get_attribute id
20180728 11:31:28.633 : INFO : get_attribute id
20180728 11:31:28.640 : INFO : get_attribute id
20180728 11:31:28.648 : INFO : get_attribute id
20180728 11:31:28.657 : INFO : get_attribute id
20180728 11:31:28.664 : INFO : get_attribute id
20180728 11:31:28.673 : INFO : get_attribute id
20180728 11:31:28.682 : INFO : get_attribute id
20180728 11:31:28.690 : INFO : get_attribute id
20180728 11:31:28.699 : INFO : get_attribute id
20180728 11:31:28.706 : INFO : get_attribute id
20180728 11:31:28.716 : INFO : get_attribute id
20180728 11:31:28.723 : INFO : get_attribute id
20180728 11:31:28.732 : INFO : get_attribute id
20180728 11:31:28.740 : INFO : get_attribute id
20180728 11:31:28.747 : INFO : get_attribute id
20180728 11:31:28.756 : INFO : get_attribute id
20180728 11:31:28.764 : INFO : get_attribute id
20180728 11:31:28.775 : INFO : get_attribute id
20180728 11:31:28.782 : INFO : get_attribute id
20180728 11:31:28.790 : INFO : get_attribute id
20180728 11:31:28.798 : INFO : get_attribute id
20180728 11:31:28.806 : INFO : get_attribute id
20180728 11:31:28.814 : INFO : get_attribute id
20180728 11:31:28.822 : INFO : get_attribute id
20180728 11:31:28.831 : INFO : ${links} = [u'result_logo', u'quickdelete', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'setf', u'', u'', u'', u'', u'', u'jgwab']
20180728 11:31:28.833 : INFO : [u'result_logo', u'quickdelete', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'setf', u'', u'', u'', u'', u'', u'jgwab']
20180728 11:31:30.833 : INFO : Slept 2 seconds
Ending test: RobotFrameworkTest1.TestSuite6.TestCase0007
7、Choose File(文件上传)
做自动化测试时,我们经常遇到的就是上传文件了,这里我们可以使用Choose File 关键字就可以完成该操作,Choose File 关键字接收[ locator | file_path ]两个关键字,如下表5-1-3所示。
locator |
上传文件时,上传文件对应的输入框的输入字段,可以通过我们常见的元素定位的方式来定位到。 |
file_path |
这个参数指的是需要上传的文件的本地路径 |
表5-1-3
示例1:这里我们还是以百度首页为例,百度首页支持图片搜素,很多经常使用百度引擎进行搜索的朋友可能都用过,有点类似通过输入一张图片,然后找和这张图片的相似图片功能一样,在这个AI人工智能大热的时代,这个功能也越来越被很多电商进行商品搜索时使用。
如下的示例中,我们首先打开百度首页。然后通过我们上面介绍到的Click Element关键字来模拟点击输入框旁边的按钮,来切换到图片上传模式。切换完后,然后通过Choose File关键字来上传文件,这里我们的locator选择使用xpath来定位。之后就是选择我磁盘中的一张个人图片上传。
在获取xpath路径时,我们可以通过Chrom浏览器自带的开发者工具来直接复制到xpath路径,如下图中所示。
Open Browser http://www.baidu.com/ chrome
Click Element //*[@id="form"]/span[1]/span
Sleep 10
Choose File //*[@id="form"]/div/div[2]/div[2]/input E:\zhangyongqing.bmp
Sleep 10
Close Browser
运行结果如下(这里的运行结果,我们选择从自动化执行report中来查看):
SUITE RobotFrameworkTest1
javascript:expandAll('s1')javascript:collapseAll('s1')C:UsersyongqingAppDataLocalTempRIDExpjcyt.dlog.html - s1#s1
Full Name: |
RobotFrameworkTest1 |
Source: |
|
Start / End / Elapsed: |
20180728 11:52:36.817 / 20180728 11:53:08.127 / 00:00:31.310 |
Status: |
1 critical test, 1 passed, 0 failed |
00:00:31.284SUITE TestSuite6
javascript:expandAll('s1-s1')javascript:collapseAll('s1-s1')C:UsersyongqingAppDataLocalTempRIDExpjcyt.dlog.html - s1-s1#s1-s1
Full Name: |
RobotFrameworkTest1.TestSuite6 |
Source: |
F:projectRobotFrameworkTest1RobotFrameworkTest1TestSuite6.txt |
Start / End / Elapsed: |
20180728 11:52:36.841 / 20180728 11:53:08.125 / 00:00:31.284 |
Status: |
1 critical test,
1 passed, 0
failed |
00:00:31.108TEST TestCase0008
javascript:expandAll('s1-s1-t1')javascript:collapseAll('s1-s1-t1')C:UsersyongqingAppDataLocalTempRIDExpjcyt.dlog.html - s1-s1-t1#s1-s1-t1
Full Name: |
RobotFrameworkTest1.TestSuite6.TestCase0008 |
Start / End / Elapsed: |
20180728 11:52:37.016 / 20180728 11:53:08.124 / 00:00:31.108 |
Status: |
PASS (critical) |
00:00:09.825KEYWORD Selenium2Library . Open Browser http://www.baidu.com/, chrome
javascript:expandAll('s1-s1-t1-k1')javascript:collapseAll('s1-s1-t1-k1')C:UsersyongqingAppDataLocalTempRIDExpjcyt.dlog.html - s1-s1-t1-k1#s1-s1-t1-k1
Documentation: |
Opens a new browser instance to given URL. |
Start / End / Elapsed: |
20180728 11:52:37.017 / 20180728 11:52:46.842 / 00:00:09.825 |
11:52:37.017 |
INFO |
Opening browser 'chrome' to base url |
00:00:00.119KEYWORD Selenium2Library . Click Element //*[@id="form"]/span[1]/span
javascript:expandAll('s1-s1-t1-k2')javascript:collapseAll('s1-s1-t1-k2')C:UsersyongqingAppDataLocalTempRIDExpjcyt.dlog.html - s1-s1-t1-k2#s1-s1-t1-k2
Documentation: |
Click element identified by `locator`. |
Start / End / Elapsed: |
20180728 11:52:46.842 / 20180728 11:52:46.961 / 00:00:00.119 |
11:52:46.843 |
INFO |
Clicking element '//*[@id="form"]/span[1]/span'. |
00:00:10.001KEYWORD BuiltIn . Sleep 10
javascript:expandAll('s1-s1-t1-k3')javascript:collapseAll('s1-s1-t1-k3')C:UsersyongqingAppDataLocalTempRIDExpjcyt.dlog.html - s1-s1-t1-k3#s1-s1-t1-k3
Documentation: |
Pauses the test executed for the given time. |
Start / End / Elapsed: |
20180728 11:52:46.962 / 20180728 11:52:56.963 / 00:00:10.001 |
11:52:56.962 |
INFO |
Slept 10 seconds |
00:00:00.095KEYWORD Selenium2Library . Choose File //*[@id="form"]/div/div[2]/div[2]/input, E:\zhangyongqing.bmp
javascript:expandAll('s1-s1-t1-k4')javascript:collapseAll('s1-s1-t1-k4')C:UsersyongqingAppDataLocalTempRIDExpjcyt.dlog.html - s1-s1-t1-k4#s1-s1-t1-k4
Documentation: |
Inputs the `file_path` into file input field found by `locator`. |
Start / End / Elapsed: |
20180728 11:52:56.964 / 20180728 11:52:57.059 / 00:00:00.095 |
00:00:10.002KEYWORD BuiltIn . Sleep 10
javascript:expandAll('s1-s1-t1-k5')javascript:collapseAll('s1-s1-t1-k5')C:UsersyongqingAppDataLocalTempRIDExpjcyt.dlog.html - s1-s1-t1-k5#s1-s1-t1-k5
Documentation: |
Pauses the test executed for the given time. |
Start / End / Elapsed: |
20180728 11:52:57.060 / 20180728 11:53:07.062 / 00:00:10.002 |
11:53:07.061 |
INFO |
Slept 10 seconds |
00:00:01.061KEYWORD Selenium2Library . Close Browser
javascript:expandAll('s1-s1-t1-k6')javascript:collapseAll('s1-s1-t1-k6')C:UsersyongqingAppDataLocalTempRIDExpjcyt.dlog.html - s1-s1-t1-k6#s1-s1-t1-k6
Documentation: |
Closes the current browser. |
Start / End / Elapsed: |
20180728 11:53:07.063 / 20180728 11:53:08.124 / 00:00:01.061 |
为了能看到整个的过程,我捕获了运行过程中关键步骤执行时的实际效果图片,从图片中也可以清晰的看到图片从上传到上传后,百度引擎自动执行搜索的一个过程,如下图所示
8、Get Text
Get Text关键字用来获取文本内容,该关键字接收[ locator ]这一个关键字,locator可以是通过id或者name,xpath等都可以定位。
示例1:
这里我们依然以百度首页为例,获取name="tj_trnews" 包含的文本内容,如下图所示。
Open Browser http://www.baidu.com/ chrome
${text} Get Text name=tj_trnews
log ${text}
Close Browser
运行结果如下:
Starting test: RobotFrameworkTest1.TestSuite6.TestCase0009
20180728 13:04:33.505 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com/'
20180728 13:04:42.409 : INFO : ${text} = 新闻
20180728 13:04:42.411 : INFO : 新闻
Ending test: RobotFrameworkTest1.TestSuite6.TestCase0009
示例2:上面的示例中,我们的locator是通过的name来定位的,我们换成是xpath来试试。
Open Browser http://www.baidu.com/ chrome
${text} Get Text //*[@id="u1"]/a[1]
log ${text}
Close Browser
运行结果如下(这次的运行结果,我们选择从自动化执行report中来查看):如下图所示。
我们会发现使用xpath的效果是一样的。
9、Get Title
Get Title关键字用来获取浏览器网页的title,该关键字后面不需要接收任何的参数。
示例1:这里我们模拟访问百度首页,然后获取百度首页的Title
Open Browser http://www.baidu.com/ chrome
${title} Get Title
log ${title}
Close Browser
运行结果如下:
Starting test: RobotFrameworkTest1.TestSuite6.TestCase0011
20180728 13:18:33.227 : INFO : Opening browser 'chrome' to base url 'http://www.baidu.com/'
20180728 13:18:42.213 : INFO : ${title} = 百度一下,你就知道
20180728 13:18:42.214 : INFO : 百度一下,你就知道
Ending test: RobotFrameworkTest1.TestSuite6.TestCase0011
未完待续....
备注:本文内容摘选自Robot Framework自动化测试框架核心指南 一书。
Robot Framework自动化测试框架核心指南京东官方购买
Robot Framework自动化测试框架核心指南电子版试读
Robot Framework自动化测试框架核心指南天猫官方旗舰店购买
Robot Framework自动化测试框架核心指南当当网购买
Robot Framework自动化测试框架核心指南 作者签名版本购买
相关博文汇总:
RobotFramework下的http接口自动化Create Http Context关键字的使用
RobotFramework下的http接口自动化Get关键字的使用
RobotFramework下的http接口自动化post关键字的使用
RobotFramework下的http接口自动化Get Response Body关键字的使用
RobotFramework下的http接口自动化Get Response Status 关键字的使用
RobotFramework下的http接口自动化Get Response header 关键字的使用
RobotFramework下的http接口自动化Set Request Header 关键字的使用
RobotFramework下HttpLibrary库其它关键字
RobotFramework下的http接口自动化Set Request Body 关键字的使用
RobotFramework下的http接口自动化Follow Response关键字的使用
RobotFramework自动化测试框架的基础关键字(一)
RobotFramework自动化测试框架的基础关键字(二)
RobotFramework自动化测试框架的基础关键字(三)
RobotFramework自动化测试框架的基础关键字(四)
RobotFramework自动化测试框架的基础关键字(五)
RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary介绍
RobotFramework自动化测试框架-移动手机自动化测试Open Application关键字的使用
RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary库其它的常见自动化关键字
RobotFramework自动化测试框架-移动手机自动化测试Input Text和Click Button关键字的使用
RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用
RobotFramework自动化测试框架-移动手机自动化测试Click Element关键字的使用
RobotFramework自动化测试框架-移动手机自动化测试Click A Point关键字的使用
RobotFramework自动化测试框架-移动手机自动化测试Click Element At Coordinates关键字的使用
RobotFramework自动化测试框架-移动手机自动化测试Get Element Location关键字的使用
RobotFramework自动化测试框架-移动手机自动化测试Get Network Connection Status和Set Network Connection Status关键字的使用
RobotFramework自动化测试框架-移动手机自动化测试Element Attribute Should Match关键字的使用
RobotFramework自动化测试框架-DatabaseLibrary库的使用(对数据库的操作)
RobotFramework自动化测试框架-使用Python编写自定义的RobotFramework Lib
RobotFramework自动化测试框架-Selenium Web自动化(-)-Open Browser和Close Browser