前面了解了通过资源文件
对用户关键字进行管理,将重复的内容提取出来,简化测试用例中的操作步骤
common.robot
*** Settings ***
Library SeleniumLibrary
*** Keywords ***
登录网易邮箱
# 打开chrome浏览器访问163邮箱
open browser https://mail.163.com/ chrome
sleep 5
maximize browser window
# 切换到iframe
select frame xpath=//iframe[contains(@id,'iframe')]
# 用户名输入框中输入 用户名
sleep 2
input text xpath=//*[@name="email"] 你的用户名
sleep 2
# 密码输入框中输入 密码
input text xpath=//*[@name="password"] 你的密码
sleep 2
# 点击登录按钮
click element xpath=//*[@id="dologin"]
sleep 10
关闭浏览器
close browser
test.robot
*** Settings ***
Library SeleniumLibrary
Resource common.robot
Suite Setup 登录网易邮箱
Suite Teardown 关闭浏览器
*** Test Cases ***
用例1
log to console 这里是用例主体部分
用例2
log to console 这里是用例主体部分
而在操作步骤的变量,比如元素定位,可能在这个关键字中会用到,在其他关键字中也会用到,如果这个元素定位发生了改变,就要同时在这几个关键字中去改变,很麻烦。
又比如账号、密码这类数据,不同的账号有着不同的权限,需要用到不同的账号去进行操作。
所以,对于这类数据,可以将其独立出来,也就是公共变量
,起到共享的作用
公共变量需要在变量表中声明变量,新建一个 公共变量.robot
文件,创建Variables
表,在Variables
表中声明变量
公共变量.robot
*** Variables ***
# 元素定位
${网易邮箱地址} https://mail.163.com/
${iframe} xpath=//iframe[contains(@id,'iframe')]
${用户名输入框} xpath=//*[@name="email"]
${密码输入框} xpath=//*[@name="password"]
${登录按钮} xpath=//*[@id="dologin"]
# 账号数据
${权限1账号} 用户名1
${权限1密码} 密码1
${权限2账号} 用户名2
${权限2密码} 密码2
然后在common.robot
文件中导入 公共变量.robot
文件:Resource 公共变量.robot
common.robot
*** Settings ***
Library SeleniumLibrary
Resource 公共变量.robot
*** Keywords ***
登录网易邮箱
[Arguments] ${账号}=${权限1账号} ${密码}=${权限1密码}
# 打开chrome浏览器访问163邮箱
open browser ${网易邮箱地址} chrome
sleep 5
maximize browser window
# 切换到iframe
select frame ${iframe}
# 用户名输入框中输入 用户名
sleep 2
input text ${用户名输入框} ${账号}
sleep 2
# 密码输入框中输入 密码
input text ${密码输入框} ${密码}
sleep 2
# 点击登录按钮
click element ${登录按钮}
sleep 10
关闭浏览器
close browser
这样的话,元素定位发生改变,只需要在 公共变量.robot
文件修改即可,默认登录的账号为权限1账号
,如果需要使用其他账号,
在登录网易邮箱
关键字后加上要使用的账号和密码对应的变量即可
test.robot
*** Settings ***
Library SeleniumLibrary
Resource common.robot
Suite Setup 登录网易邮箱 ${权限2账号} ${权限2密码}
Suite Teardown 关闭浏览器
*** Test Cases ***
用例1
log to console 这里是用例主体部分
用例2
log to console 这里是用例主体部分
公共变量.robot
文件中,变量类型还可以为list变量
比如在项目迭代过程中,会有多个测试环境,通过创建一个list变量
,将这些测试环境的地址都放到list变量
里。这里以网易邮箱地址
为例,注意,这里声明变量时变成了@{网易邮箱地址}
公共变量.robot
*** Variables ***
# 元素定位
@{网易邮箱地址} https://mail.126.com/ https://mail.163.com/
${iframe} xpath=//iframe[contains(@id,'iframe')]
${用户名输入框} xpath=//*[@name="email"]
${密码输入框} xpath=//*[@name="password"]
${登录按钮} xpath=//*[@id="dologin"]
# 账号数据
${权限1账号} 用户名1
${权限1密码} 密码1
${权限2账号} 用户名2
${权限2密码} 密码2
这里要使用 https://mail.163.com/
这个地址,在common.robot
文件中就需要改成 ${网易邮箱地址}[1]
(第二个参数)
common.robot
*** Settings ***
Library SeleniumLibrary
Resource 公共变量.robot
*** Keywords ***
登录网易邮箱
[Arguments] ${账号}=${权限1账号} ${密码}=${权限1密码}
# 打开chrome浏览器访问163邮箱
open browser ${网易邮箱地址}[1] chrome
sleep 5
maximize browser window
# 切换到iframe
select frame ${iframe}
# 用户名输入框中输入 用户名
sleep 2
input text ${用户名输入框} ${账号}
sleep 2
# 密码输入框中输入 密码
input text ${密码输入框} ${密码}
sleep 2
# 点击登录按钮
click element ${登录按钮}
sleep 10
关闭浏览器
close browser
公共变量.robot
文件中,变量类型除了可以为list变量
,还可以为dict变量
公共变量.robot
文件中,账号密码可以这样来写
公共变量.robot
*** Variables ***
# 元素定位
@{网易邮箱地址} https://mail.126.com/ https://mail.163.com/
${iframe} xpath=//iframe[contains(@id,'iframe')]
${用户名输入框} xpath=//*[@name="email"]
${密码输入框} xpath=//*[@name="password"]
${登录按钮} xpath=//*[@id="dologin"]
# 账号数据
&{账号数据} 权限1账号=用户名1 权限1密码=密码1 权限2账号=用户名2 权限2密码=密码2
这里为了举这个例子,就不使用默认参数的方式了,账号内容为${账号数据}[权限1账号]
,对应的是用户名1
,密码内容为${账号数据}[权限1密码]
,对应的是密码1
common.robot
*** Settings ***
Library SeleniumLibrary
Resource 公共变量.robot
*** Keywords ***
登录网易邮箱
# 打开chrome浏览器访问163邮箱
open browser ${网易邮箱地址}[1] chrome
sleep 5
maximize browser window
# 切换到iframe
select frame ${iframe}
# 用户名输入框中输入 用户名
sleep 2
input text ${用户名输入框} ${账号数据}[权限1账号]
sleep 2
# 密码输入框中输入 密码
input text ${密码输入框} ${账号数据}[权限1密码]
sleep 2
# 点击登录按钮
click element ${登录按钮}
sleep 10
关闭浏览器
close browser
除了创建 公共变量.robot
文件,创建Variables
表,在Variables
表中声明变量这种方式,还可以使用python模块文件
提供公共变量给RF使用,只需要直接定义变量就可以了,语法完全就是python语法
config.py
url1 = 'https://mail.126.com/'
url2 = 'https://mail.163.com/'
在RF文件中声明使用变量文件:Variables config.py
,直接使用变量$url1
即可
common.robot
*** Settings ***
Library SeleniumLibrary
Resource 公共变量.robot
Variables config.py
*** Keywords ***
登录网易邮箱
# 打开chrome浏览器访问163邮箱
open browser $url1 chrome
sleep 5
maximize browser window
# 切换到iframe
select frame ${iframe}
# 用户名输入框中输入 用户名
sleep 2
input text ${用户名输入框} ${账号数据}[权限1账号]
sleep 2
# 密码输入框中输入 密码
input text ${密码输入框} ${账号数据}[权限1密码]
sleep 2
# 点击登录按钮
click element ${登录按钮}
sleep 10
关闭浏览器
close browser