当前位置:网站首页>RobotFramework 之 公共变量

RobotFramework 之 公共变量

2022-04-23 14:03:00 沉觞流年

公共变量

前面了解了通过资源文件对用户关键字进行管理,将重复的内容提取出来,简化测试用例中的操作步骤

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    这里是用例主体部分

而在操作步骤的变量,比如元素定位,可能在这个关键字中会用到,在其他关键字中也会用到,如果这个元素定位发生了改变,就要同时在这几个关键字中去改变,很麻烦。
又比如账号、密码这类数据,不同的账号有着不同的权限,需要用到不同的账号去进行操作。
所以,对于这类数据,可以将其独立出来,也就是公共变量,起到共享的作用

RF公共变量的使用

公共变量需要在变量表中声明变量,新建一个 公共变量.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    这里是用例主体部分

list变量

公共变量.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
		

dict变量

公共变量.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
		

版权声明
本文为[沉觞流年]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_44614026/article/details/115450985