(三)Robot Framework 实现Web UI自动化测试 (关键字:浏览器、IFrame、元素操作、元素等待、预期结果校验、cookie、鼠标、断言...... &元素定位方法& 项目实战)
一、安装依赖环境
1、准备web自动化测试环环境
详细的操作参考之前的文档,Robot Framework安装教程 - 羊羊的测试之路 - 博客园 (cnblogs.com)
2、安装依赖库(本次选择SeleniumLibrary)
在Windows系统打开CMD窗口(Win + R)
安装命令如下:
pip install robotframework-seleniumlibrary
pip install robotframework-selenium2library
升级命令如下:
pip install --upgrede robotframework-seleniumlibrary
pip install --upgrade robotframework-selenium2library
安装指定版本:
pip install robotframework-sleniumlibrary==6.0.0
pip install robotframework-selenium2library==3.0.0
查看库版本:可以查看到版本号、安装路径、库作者信息等
pip show robotframework-seleniumlibrary
pip show robotframework-selenium2library

二、测试用例
1、web类型页面测试操作:
-->打开浏览器
-->输入Web页面的URL
-->等待页面显示出来
-->人工查看页面显示页面是否自己预期的一致,若一致的话,则认为功能正常,否则任务是有问题的
-->通过一些鼠标、键盘执行相关的操作,然后通过页面内容的变化继续检查功能是否正常
2、打开RIDE
打开方式,如果有快捷方式的话,直接点击桌面的图标
直接在命令行终端输入ride.py
3、编写测试用例:
(创建项目(New Project)---> 创建测试套件(New Suite)---> 创建测试用例(New Test Case)---> 编写测试用例 )
编写测试用例的操作步骤如下:
-->打开测试地址
-->单机登录连接
-->输入用户名、密码
-->单机登录按钮
-->关闭浏览器

*** Settings ***
Library Selenium2Library
*** Test Cases ***
测试
[Documentation] 第一个测试用例
Log 设置UTF-8编码
Log 打开Chrome浏览器,输入URL
Open Browser https://passport.csdn.net/account/login Chrome options=add_argument("--disable-blink-features=AutomationControlled");add_experimental_option("detach", True);add_experimental_option('excludeSwitches', ['enable-automation'])
Log 账号登录
Click Element //span[text()='密码登录']
Log 输入用户名、密码
Wait Until Element is Visible //input[@autocomplete='username'] 30
Input Text //input[@autocomplete='username'] 真实账号
Input Password //input[@autocomplete='current-password'] \ 真实密码
Log 单击登录按钮
Click Element //button[@class='base-button' and text()='登录']
sleep 5
close browser
4、运行及查看结果

查看测试日志报告

三、常用关键字
1、浏览器操作
--》 Open Browser:打开浏览器,不指定浏览器时,默认使用Firefox,并且不同浏览器需要安装对应浏览器驱动程序

--》 Close Browser:关闭浏览器
关闭当前浏览器:

关闭所有浏览器:

--》 Maximize Browser Window:浏览器最大化显示

--》 Set Window Size:设置浏览器的宽度和高度

以像素为单位,第一个参数表示宽度,第二个参数表示高度
2、iFrame操作
Web页面之间经常会采用IFrame来内嵌,如果需要定位iFrme中的元素,则需要先切换到对应的iFrame中
--》 Select Frame:选中指定iFrame
通过iFrame的id、name或是XPATH路径切换到指定的iFrame中,如果需要定位的iFrame在当前Frame内,可以直接使用Select Frame关键字来切换

--》 UnSelect Frame:回到最外层iFrame
如果需要定位的iFrame在当前Frame外或者是平级,可以先使用UnSelect Frame设置最外层的iFrame为当前Frame,再使用Select Frame切换到指定的Frame中来定位元素

3、输入操作
--》 Input Text:输入文本

--》 Input Password:输入密码
和INput Text的区别是,不会明文显示输入的内容,一般用于向密码输入框输入密码

--》Press Key:模拟按键输入
模拟用户按键输入,参数为locator和 key,其中key可以是单个字符,也可以是以'\'开头的ASSCII Code码


--》 Get Text获取文本
获取元素上的文本信息,可以用于和预期值进行对比,返回目标元素的text value值

4、点击元素操作
--》 Click Element:单击元素
定位并单击元素,可以通过id、name、Xpath等查找策略来指定要单击的元素

--》 Click Button
定位并单击元素,可以通过id、name、Xpath等查找策略来指定要点击的按钮

--》 Double Click Element:双击元素
定位并单击元素,可以通过id、name、Xpath等查找策略来指定要双击的元素

--》 Click Link:单击链接
可以通过id、name、href、linktext来定位指定的链接

5、属性获取
--》 Get Title:获取标题
获取当前浏览器窗口的标题,通常会将获取的标题传递给一个变量,然后进行窗口选择等

--》 Get Element Attribute:获取元素属性值
获取元素属性值,参数locator,attribute=None

获取并返回id=kw元素的name属性值
6、元素等待操作
--》 Wait Until Page Contains Element:等待页面出现某元素
等待页面出现指定元素,参数:locator,timeout=None,error=None

--》 Wait Until Page Contains等待页面包含指定文本

--》 Wait Until Element is Visible:等待元素可见

--》Wait Util Keywords Succees:等待关键字执行成功

--》Set Browser Implicit Wait :隐式等待(针对当前浏览器)
--》Set Selenium Implicit Wait:隐式等待(针对所有浏览器)
--》Wait Until Element is Enabled:等待元素可用
7、元素的操作
--》Input Text :输入数据
参数locator Input Text id=kw 软件测试
--》Clear Element Text :清空文本
参数locator Clear Element Text id=kw
--》Get Text :获取元素的文本信息
参数locator Get Text xpath=
--》Get Element :获取元素属性
参数locator Get Element xpath=
8、预期结果校验
--》 Page Should Contain Button:校验页面是否包含指定按钮
校验当前页面是否包含指定按钮,参数locator,message=None,loglevel=INFO,可以通过id、name、value等方式检索按钮

message参数用来自定义错误信息,当校验失败时用于覆盖默认的错误信息
--》 Page Should Contain Element:校验页面是否包含指定元素
校验当前页面是否包含指定元素,参数locator,message=None,loglevel=INFO,limit=None


limit默认为None,当为None时,校验的元素可以是1个也可以是多个,只要元素存在就行。当limit设置了具体数量时,如设置的是1,则只能包含1个,不等于1时则校验失败
--》 Location Should Be:校验当前页面URL会否相等
校验当前页面URL与指定的URL是否相等,参数:index_ or _alias

--> Location Shold Contain:校验当前URL是否包含指定文本

--》 Element Should Contain:校验指定元素是否包含某文本
校验指定元素是否包含预期文本,参数:locator,expected,message=None

--》 Element Should Be Visible:校验指定元素是是否可见
校验指定元素是否可见,参数locator,message=None

9、Cookie操作
--》 Get Cookie:获取Cookie
获取当前浏览器所有的Cookie

--》 Get Cookie Value:获取指定Cookie值
获取指定Key对应的Cookie值,参数key_name

--》 Delete Cookie:删除指定Cookie
删除指定key对应的Cookie值,参数:key_name

--> Delete All Cookies:删除所有Cookie
清空当前浏览器所有的Cookie信息

--》 Add Cookie:添加Cookie
添加指定的Cookie信息,参数key_name,value

10、其他常用关键字
--》 Capture Page Screenshot:截屏
对当前页面截屏,参数filename,截取当前页面的图像,文件名为login.jpg

--》 Execute JavaScript:执行JavaScript代码
在RF中调用JavaScript代码来控制浏览器,参数是JavaScript代码


通过运行JavaScript代码给页面ID等于kw的元素进行赋值操作
--》 Go Back:回退
回退是指返回到上一个页面

--》Go To :前进
--》Reload Page:刷新
11、鼠标和键盘关键字
--》Click Element:单击 。参数locator
--》Double Click Element:双击。参数locator
--》Press Key :按键。参数locator、input
12、断言的关键字
系统断言:
--》Should Be Empty :判断是否为空 Should Be Empty ${a}
--》Should Be Equal :判断是否相等 Should Be Equal test Test ignore_case=True
--》Should Be True :判断是否通过 Should Be True 1==1
--》Should Contain :判断是否包含 Should Contain Testrunner test ignore_case=TRUE
--》Should Start With:判断字符串是否以什么开头 Should Start With Testrunne test ignore_case=True
--》Should End With :判断字符串是否以什么结尾 Should End With Testrunner ner ignore_case=true
--》 Length Should Be:判断长度 Length Should Be Testrunner 7
Selenium 断言:
--》Page Should Contain :页面是否包含某文本 Page Should Contain text
--》Page Should Contain Element:页面中是否包含某元素 Page Should Contain Element xpath=
13、下拉框
--》Select From List By Index locator 索引
--》Select From List By Label locator 要选择的内容
--》Select From List By Value locator value对应的值
14、弹框
--》Handle Alert
15、进入新的页面
--》Select Window new
--》Select Window main
关键字调用都采用关键字名称+参数(0个或多个)的形式,我们可以把Robot Framework关键字看做一个函数(它本质上是一个Python函数),后面跟函数的参数,有的函数有参数,而有的函数可以不带参数
四、常用定位方式
常用的有id、name、Xpath、CSS、class_name、link_text、partial_link_text、tag_name/ 绝对路径,/html/body/div[1]/div[1]/div[1]
1、Xpath
(1)绝对路径 /
(2)相对路径 //
相对路径+索引定位 //form/span[1]/input
相对路径+属性定位
//input[@autocomplete='off']
//*[@*='off']
相对路径+通配符定位
相对路径+通配符+部分属性值,
start-with---部分匹配 以什么开头 //*[starts-with(@autocomplete,'of')]
substring---截取部分 以什么结尾 //*[substring(@autocomplete,2)='ff'] #第2字字符开始截取,截取到最后
contains---包含 //*[contains(@autocomplete,'f')]
相对路径+文本定位 text() //span[text()='按图片搜索']


2、CSS选择器
(1)绝对路径:>
(2)通过ID(#)和class(.)来定位
css=input#kw css=#kw
css=.s-ipt css=input.s_ipt
(3)相对路径:
通过属性定位:css=input[autocomplete='off']
通过部分属性值:
以什么开头://*[autocomplete^='of']
以什么结尾://*[autocomplete$='ff']
包含://*[autocomplete*='of']
通过子节点定位:
form#form>span.soutu-btn>input#kw
div#s-top-left a:first-child #获取a标签的第一个节点
div#s-top-left a:last-child #获取a标签的最后一个节点
div#s-top-left a:nth-child(7) #获取a标签的第7个
通过兄弟节点定位:
div#s-top-left a + a


五、Robot Framework+Selenium Web UI自动化测试项目实战
1、实战项目说明:
演练项目一126网易邮箱为例,以三个具体需求为驱动
---》 需求一:实现126网易邮箱账号密码登录,并校验账号登录成功过后状态是否成功

---》需求二:账号登录成功后,实现从邮箱首页的应用中心进入有道词典,并校验有道词典是否能正常使用

2、实战项目说明:
测试代码较少时,把定位元素逻辑和业务操作逻辑都统一写在测试用例中,是可以接受的。
但是实际的项目中,页面的元素非常多,测试脚本会越来元多,难以维护和阅读,因此在开展Web UI自动化测试前期,选择一个适合的设计模式很重要。
对于UI类自动化测试,最常用的设计模式是PO(Page Object,页面对象)模式,PO模式最开始WebDriver下的一种测试设计模式。
PO模式主张的理念是将每个页面设计为一个Class类,Class封装页面中所有需要用到的元素信息,编写测试用例脚本时,通过调用页面的Class来获取该页面元素。
当页面元素变更时,不需要修改测试用例脚本,值需要调整这个页面Class就行,从而使得测试用例脚本与页面元素管理分离。这样就不就可以项目结构清晰明了,也可以使用例脚本、元素管理简便许多
(1)打开RIDE编辑器,选择File——>New Project,新建一个Robot Framework Web自动化测试项目,项目名称推荐以“公司名称”+“Robot Framework标识”+“Web自动化框架”的形式来命名,例如实战的项目名称:Example_Robot_Framework_Selenium

(2)选中Example_Robot_Framework_Selenium项目,单击鼠标右键,在弹出的菜单中选择New Directory,新建目录,目录名称为“测试用例层”

(3)按照PO的设计思想,以页面为单位进行页面元素管理,因此新建一个目录用于管理各页面元素。
选中Example_Robot_Framework_Selenium项目,单击鼠标右键,在弹出框中选择New Directory,新建目录,目录名称为“页面元素层”

(4)通常创建完这两类目录基本就够用了,但在实际的项目中,往往很多页面之间会存在一些可复用的操作,因此需要再新建一个目录,用于管理页面的一些通用操作。
选中Example_Robot_Framework_Selenium项目,单击鼠标右键,在弹出的菜单中选择New Directory,新建目录,目录名称为“公共组件层”

(5)查看已经搭建好的Web UI自动化测试项目的基本分层结构

--》测试用例层:用于统一存放测试用例脚本
--》页面元素层:用于存放个页面的元素信息,每个页面在Robot Framework中可以以资源文件为组织单位,每个元素的操作方式以关键字的形式进行封装
--》公共组件层:用于存放公共组件,以及页面之间能复用的操作
3、登录类测试设计
3.1 需求一:实现126网易邮箱账号密码登录,并校验账号登录成功过后状态是否成功
- 打开Chrome浏览器,访问网易邮箱首页
- 在网易邮箱首页,选择邮箱账号登录
- 定位邮箱登录账号输入框,输入邮箱地址
- 定位邮箱登录密码输入框,输入邮箱密码
- 单击登录按钮
- 登录完成后,校验登录后的首页上是否显示了登录账号
(1)公共组件层:开始之前,将打开浏览器、切换IFrame等通用操作封装到公共组件层中,以方便其他测试用例,业务关键字调用
--》在“公共组件层”目录下新建一个名称为“浏览器”的资源文件,并在“浏览器”资源文件的Settings栏中导入Selenium2Library库

--》在“浏览器”资源文件中,新建一个名称为“打开Chrome浏览器”的关键字,关键字中接收一个地址参数和浏览器参数,其中浏览器参数默认值为chrome,通过调用Open Browser方法来打开狮子指定${url}地址


--》登录网页的元素在iFrame中,需要先进入到iFrame中
--》在“浏览器”资源文件中,新建一个名称为“切换iFrame”的关键字,在“切换iFrame”关键字中,通过Select Frame切换到指定的iFrame中


(2)页面元素层:在页面元素层,对需求一中所有涉及的页面元素进行统一封装
--》需求一种涉及邮箱账号登录页面,因此在“页面元素层”目录下新建一个名称为“126邮箱登录页面”的资源文件,并在“页面元素层”资源文件中导入Selenium2Library库

--》在登录页面中,主要涉及几个元素的操作:邮箱账号Tab栏按钮、邮箱账号密码输入框、登录按钮,以关键字实现,
关键字名称定义为:输入“邮箱登录账号”文本框,输入“邮箱登录密码”密码框、单击“登录”按钮关键字

创建好之后的目录结构:

(3)测试用例层(数据驱动层):页面元素封装完成后,接下来根据需求一的需求编写测试用例
--》在“测试用例层”目录下单击鼠标右键,在弹出的菜单中选择New Suite ,新建测试套件,测试套件名称为“邮箱账号登录”

--》在“邮箱账号登录”测试套件中,导入公共组件层中的“浏览器”资源文件,再导入页面元素层中的“126邮箱登录页面”资源文件

--》在“邮箱账号登录”测试套件中,添加Suite teardown事件,并配置“Close Browser”关键字,用于在测试套件下的用例执行完成自动关闭浏览器

--》在“邮箱账号登录”测试套件中,新建测试用例,用例名称为“验证正确的邮箱账号密码登录”,在测试用例中校验是否登录成功

3.1 需求二:Web UI应用测试设计,实现当前邮箱账号登录成功后,从邮箱首页的应用中心进入有道词典,并校验有道词典是否正常使用
在具体手动操作前,先分析一下实战二需求的基本操作步骤
--》正常登录到126邮箱中
--》登录成功后,进入应用中心
--》在应用中心,单击所有应用
--》在所有应用列表中,选择有道词典
--》选择适用看看,进入有道词典
--》在有道词典中,输入加油,单击翻译按钮,校验翻译功能是否可用
(1)公共组件层,进入应用中心的前置条件是成功登录到邮箱首页,实现该需求时,需要先调用邮箱账号登录操作,以保证后续测试用例的执行操作都是基于成功登录后的页面来进行的
--》在“公共组件层”目录下,选择“浏览器”资源文件,单击鼠标右键,在弹出的菜单中选择New User Keyword,新建关键字,取名为“邮箱账号登录”,在关键字中接收邮箱账号和密码两个参数

(2)页面元素层
登录成功后跳转到邮箱首页页面,待操作的元素有:单击“应用中心”菜单
应用中心页面,待操作的元素有:单击“所有应用”、单击“有道词典”、单击“试用看看”
有道词典页面,待操作的元素有:翻译搜索框、单击“翻译”按钮
--》在“页面元素层”目录下新建“邮箱登录成功跳转首页” 资源文件,用于存放登录成功跳转到邮箱首页中的操作元素

--》在“邮箱登录成功跳转首页”资源文件中,导入Selenium2Library库,并新建关键字:单击“应用中心”菜单


--》在“应用元素层”目录下,新建“应用中心页面”资源文件,并在“应用中心页面”资源文件中导入Selenium2Library库
--》在“应用中心页面”资源文件中,依次创建关键字:单击“所有应用”、单击“有道词典”元素、单击“试用看看”元素

--》在“页面元素层”目录下新建“有道词典页面”资源文件,并导入Selenium2Library库
--》在“有道词典页面”资源文件中,创建输入“翻译词”文本框,并接收一个参数#{text}用于输入翻译词,再创建一个名为单击“翻译”按钮的关键字

(3)测试用例层
页面元素封装完成后,根据需求二,编写测试用例
--》在“测试用例层”目录下,单击鼠标右键,在弹出的菜单中鼠标右键,在弹出的菜单中选择New Suite,新建测试套件,名称为“进入应用中心_有道词典”

--》在“进入用用中心_有道词典”测试套件的Setting配置中,导入公共组件层中的“浏览器资源文件,和页面元素层中的“邮箱行号登录”关键字
在Suite Setup中添加“邮箱账号登录”关键字;在执行测试套件之前,先执行邮箱账号登录操作,以确保执行测试套件下的用例是处在登录状态下的
在Suite Teardown中添加“Close Browser”关键字;保证测试套件下的用例执行完成后,自动关闭浏览器

--》测试套件配置完成之后,新建测试用例,用例名称为“验证有道词典应用是否可用”,填写用例

4、Jenkins持续集成(2.440.1)
(1)下载地址:https://jenkins.io/download/
(2)安装依赖:JDK(安装JVAVA17)
(3)配置Jenkins
插件管理中 下载Robot Framework plugin

创建项目

环境配置:


浙公网安备 33010602011771号