Robotframework做web测试及问题解决方法汇总

最近由于开发生病等原因总算有点时间做点有进步意义的事情了,准备把之前一直想实现的自动化测试执行起来(前端开发老是改到旧功能),我的目的很明确,但脑子很空洞,开始步步回忆之前的操作吧

文章目录


识别小技巧:

Select Frame    //iframe[@id="5d6b82c04f2743e9bcf72f2ba2f4cd6a"] #属性值定位
Wait Until Element Is Visible    //span[text()='登录'] #文本定位
Select Frame    //iframe[contains(@src,'/demo.htm')] #属性模糊定位
click element	//span[contains(text(),'此刻')] #文本模糊定位
click element   //*[@colspan='1'][@class='el'] #多属性定位
click element	//*[@class='search_content']/div[3]/div/ul/li/*[contains(text(),'350')]#精确定位后模糊定位
click element	//*[@class='search_content']/div[3]/div/ul/li/*[contains(text(),'${title}')]#参数化定位
click element   //*[@class='search_content']/div[3]//*[contains(text(),'${title}')]
${count}	get matching xpath count	//*[@style='margin-top']/div #获取div的总量
<span class="van-button__text" data-v-3e38b93e="">登录</span>

在这里插入图片描述
直接通过//*[contains(text(),‘350’)] 匹配到//*[@class=‘search_content’]/div[1]精确定位后模糊定位到具体值
在这里插入图片描述

常用快捷键:

搜索关键字——》F5
显示关键字信息——》 ctrl+鼠标悬浮(鼠标悬浮于关键字上)
自动补全关键字——》ctrl+shift+空格

1.浏览器又打不开了

http://chromedriver.storage.googleapis.com/index.html,重新下载chromedriver 到python安装根目录,环境变量中设置的目录:E:\Python27
打开环境变量目录:win+r 输入:control system
在这里插入图片描述
输入:环境变量
在这里插入图片描述

2.input text 对富文本框无效:使用send解决(后附send关键字)

通过iframe属性值进行定位
在这里插入图片描述
使用send关键字实例如下:
在这里插入图片描述
^{home} 光标返回首位,{end}光标进入尾部,{enter}换行
在这里插入图片描述
执行结果:
在这里插入图片描述

#修改富文本框				
Wait Until Element Is enabled	//*[@id="ueditor_0"]	10	#活动规则富文本框是否可用
click element	//*[@id="ueditor_0"]	#光标进入富文本框	
sleep	0.5		
send	^{home}${newID}{end}{enter}活动规则		

input text 与 send 的区别,input text直接替换当前内容(最好添加sleep),send 不影响当前内容;

3.上传网络图片无法完整输入

3.1所有符号均采用转义字符 send https://img.chinamallsales.com/bg.png

在这里插入图片描述
转义字符有长度限制,可以多发几次,本地图片尽量不要太复杂的路径。
在这里插入图片描述

#上传题库		
click element	//span[text()="上传题库"]	
Wait Until Element Is enabled	//span[text()="上传Excel"]	10
click element	//span[text()="上传Excel"]	
sleep	1	
Win Active	title=打开	#检查窗口是否存在且当前被激活。此处不生效Win Active
sleep	0.5	
send	https\:\/\/prv-api\.chinamallsales\.com\/uploads\/tiku\/20230612\/	
send	{enter}	
send	021e8ad5ff8e1d578f0d2705d580f62f\.xlsx	
send	{enter 2}	

3.2 图片地址太长被截断分多次上传

Click Element	//*[@class='el-upload el-upload--picture-card']	#点击上传图片
sleep	1	
Win Active	title=打开	#检查窗口是否存在且当前被激活。此处不生效
send	${image1}	
send	{enter}	
send	{rshift}	#转换为英文输入
send	${image1+}	
send	{enter 2}	

在这里插入图片描述
send关键字有长度限制,网络路径太长导致只能输入一部分内容如下图:
在这里插入图片描述

3.3 图片名称英文变成了中文

由于页面需要上传的图片很多,上传图片慢,导致展开上传图片页面后文件名变成了乱七八糟与原本值不一样的存在。
解决方法:增加加sleep时间

3.4 图片名称包含中文和数字

解决方法:采用拆分、转换、延长等待时间基本可以解决所有上传文件,文件名称输入不规范的问题

4.本地图片名称显示不完整(同上)

注:本公司项目Choose file 关键字不起作用

5.本地选择弹窗还未打开就执行为pass了(AutoItLibrary 的Win Active失效),没找到好的办法,先sleep过了

6.字段要翻页:focus、execute javascript document.documentElement.scrollTop=600

表格太长需要左右滚动:execute javascript document.documentElement.scrollleft=600
但是有时关键字就是不生效的:(只好用最傻逼的方法来滚动页面了,未解决问题滚动条只能通过鼠标拖动而拖拽关键字又不生效
在这里插入图片描述

7.字段识别:相同字段太多且所有相同字段属性全部相同,只好通过文字来识别了,如:

xpath=.//label[text()='助力落地页图:']/../div/div/div/div[2]/div/div[2]/i 
/..当前节点上一层   
/preceding-sibling::div[1]当前节点兄弟前节点 
/following-sibling::div[4] 当前节点兄弟后节点

8.单选框都直接点击后使用上下键选择 send {down 3} send {enter}

(xpath识别经常出错,属性一样只能通过名称识别,都会点错 //span[text()=‘我爱玩飞刀’])
在这里插入图片描述
属性识别://div[@class=‘image-preview’]
在这里插入图片描述

9.截屏,Capture Page Screenshot 截不到windows自带的弹窗,Take Screenshot 截屏可以截到;

10.断言

1.通过弹窗提示断言:
在这里插入图片描述

log    --- 开始断言 ----
${result}    run keyword and return status    Run Keyword And Continue On Failure    Wait Until Page Contains    添加广告成功
run keyword if    ${result}==True    log    添加广告成功!
...    ELSE    Fail    添加广告失败!

2.通过下拉框值title断言:get text 获取到title的值
get text 获取到title的值
在这里插入图片描述

#修改广告位适用位置					
${type}	Get Text	//*[@_nk="SqDM7h"]/div[2]/div/div/div/div/span[2]	#获取广告位		
${P}	run keyword and return status	should be equal as strings	吉祥物区域悬浮广告	${type}	#判断当前选项

3.通过返回值断言:
注意此处返回值和变量都需要加引号("),否则会提示true没有定义。
在这里插入图片描述

${status}	Selenium2Library.Get Element Attribute	//input[@readonly="readonly"]@disabled	#活动类型下拉框不可用			
RUN KEYWORD IF	'${status}'=='true'	log	活动类型无法修改哦	ELSE	FAIL	活动类型居然可以修改啊

11.通过获取属性值判断下拉框状态:

这个真的太傻了,硬要找关键字 ,最后发现这个属性有值可以区分:disabled

Element Should Not Exist 报错路径问题、Element Should Be Disabled、Variable Should Not Exist 使用后发现不是报错就是没用

Get Element Attribute 获取属性:(当属性与属性值相同时返回true)
在这里插入图片描述
在这里插入图片描述

${status}	Selenium2Library.Get Element Attribute	//input[@readonly="readonly"]@disabled
RUN KEYWORD IF	'${status}'=='true'	log	活动类型无法修改哦	
...	ELSE	FAIL	活动类型居然可以修改啊

12.修改文本框内容前清空文本框:


通过 get value 获取到属性 value的值
在这里插入图片描述

#修改活动开始时间				
${current_text}	get value	//*[@placeholder="开始日期"]	#获取开始时间	
${length}	get length	${current_text}		
Repeat Keyword	${length}	send	{BS}	#清空开始时间

13.for 循环

13.1 For循环基本用法

1、:FOR … IN …
2、:FOR … IN RANGE …
【IN RANGE】后面跟一个整数型的数字的范围,循环的次数受数字的范围控制。如1-5,则从1开始到4,循环4次,如下所示。
若【IN RANGE】后只跟一个数字n,则默认从0开始,到n-1,共n次。
3、多循环变量
【FOR】后面可跟多个循环变量,循环序列值必须为循环变量的数量整数倍,否则循环会报错 “Number of FOR loop values should be multiple of its variables.”
在这里插入图片描述
4、For循环内条件判断
1.Continue For Loop If #若满足条件,则跳出当前循环,执行下一循环
2.Exit For Loop If #若满足条件则结束循环
在这里插入图片描述

13.2 For循环嵌套For循环

RF中不支持For循环嵌套For报错:No keyword with name ‘:FOR’ found.
只有将底层循环写成关键字实现相关功能

14 变量在关键字中修改失败

在这里插入图片描述
在关键字中实现了自增的结果,回到Test Cases又变回默认值了
在这里插入图片描述
解决方法:在关键字中把变量${couponNum}设置为全局变量
在这里插入图片描述
在这里插入图片描述

Set Global Variable	${couponNum}	${couponNum}+1

15 变量截取部分取值:

1.密码取用户名的后6位${user[5:]},用户名是手机号,长度固定,所以取第六位开始到结束的所有内容作为密码

2.使用Get Substring截取

${acttime}	get text	//tbody/tr/td[5]/div/span		
${set_time}	Get Substring	${acttime}	0	19

执行结果:
在这里插入图片描述

16 数据驱动

17 获取设置时间并与当前时间进行比对

1.获取活动开始时间:(使用String库的关键字Get Substring 进行截取)
在这里插入图片描述

${acttime}	get text	//tbody/tr/td[5]/div/span		
${set_time}	Get Substring	${acttime}	0	19

执行结果:
在这里插入图片描述
2.获取当前时间:

${current_time}	Get Time

在这里插入图片描述

3.进行时间对比确定是否执行接下来的操作:(采用Should Be True)
在这里插入图片描述

:FOR	${INDEX}	IN RANGE	1	
	${current_time}	Get Time		
	${status}	Run Keyword And Return Status	Should Be True	'${current_time}'>= '${set_time}'
	Exit For Loop If	${status}==True	#当前时间大于设置时间,进行中退出循环	

18.获取check状态(上级获取失败,通过上上级匹配成功)

在这里插入图片描述
由上图可以看到选中checkbox后对应选中span class=‘el-checkbox__inner’,取消选中后,该元素的属性没有变化,变化是其上级span和label
在这里插入图片描述
通过上级span属性class定位:

${element_checked}	Run Keyword And Return Status	Page Should Contain Element //*[@class='el-checkbox__input is-checked']

执行失败:
在这里插入图片描述
通过上级label属性class定位:

${element_checked}	Run Keyword And Return Status	Page Should Contain Element	//*[@class='el-checkbox is-checked']

在这里插入图片描述

19.excel的数据输入显示浮点数,报错TypeError: object of type ‘float’ has no len()

在这里插入图片描述
解决方法

方法一:excel中对应的单元格前面加“'”即可:

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

方法二:转换浮点数为整数

在这里插入图片描述

${rID}	Evaluate	int(${rID})

在这里插入图片描述

20.RobotFramework判断2大于10

在这里插入图片描述
在这里插入图片描述
解决方法:去掉引号 ‘${Lnum}’>‘10’
在这里插入图片描述
在这里插入图片描述

21.run keyword if 多条件判断

22.同时导入AppiumLibrary和Selenium2Library后,系统报错:Multiple keywords with name ‘Capture Page Screenshot’ found. Give the full name of the keyword you want to use…

解决方法:设置访问顺序,优先访问AppiumLibrary,在Suite或者testcase的setup中添加“Set Library Search Order | AppiumLibrary | Selenium2Library”
在这里插入图片描述
suite添加后Text Edit显示如下:
在这里插入图片描述

Suite Setup       Set Library Search Order    AppiumLibrary    Selenium2Library

testcase的setup中添加“Set Library Search Order | AppiumLibrary | Selenium2Library”
在这里插入图片描述

testcase添加后Text Edit显示如下:
在这里插入图片描述

   [Setup]    Set Library Search Order    AppiumLibrary    Selenium2Library

23 RF操作数据库报错:SyntaxError: invalid syntax (connections.py, line 166)

在这里插入图片描述
估计是python2、3不兼容导致的,检查DatabaseLibrary,没有发现报错的文件:
在这里插入图片描述
在python中导入pymysql,指出了报错文件路径:
在这里插入图片描述
直接访问egg下的这个路径并不存在,pymysql文件重新生成egg,发现更多报错,干脆重新下载库,找了合适的whl版本:pip install ****.whl ,再次import成功
在这里插入图片描述
RF中执行成功
在这里插入图片描述

24 列表数量统计

在这里插入图片描述

${count}	get matching xpath count	//*[@style='margin-top: -40px; margin-left: 120px;']/div

在这里插入图片描述


导入的库:

*** Settings ***
Suite Setup setup
Library Selenium2Library
Library BuiltIn
Library Collections
Library DateTime
Library Dialogs
Library OperatingSystem
Library Process
Library Screenshot
Library String
Library Telnet
Library XML
Library AutoItLibrary
Library OperatingSystem
Library ExcelLibrary
Library XML
Library HttpLibrary.HTTP


robotframe ride的快捷键:

重命名——》F2
搜索关键字——》F5
执行用例——》F8
创建新工程——》ctrl+n
创建新测试套——》ctrl+shift+f
创建新用例——》ctrl+shift+t
创建新关键字——》ctrl+shift+k
向上移动用例——》ctrl+↑
向下移动用例——》ctrl+↓
显示关键字信息——》 ctrl+鼠标悬浮(鼠标悬浮于关键字上)
自动补全关键字——》ctrl+shift+空格
删除行——》ctrl+d
删除单元格——》ctrl+shift+d
插入单元格——》ctrl+shift+i
插入行——》ctrl+i
屏蔽代码——》ctrl+#
取消屏蔽——》ctrl+$
保存整个工程——》ctrl+shit+s
局部保存,保存鼠标点击的部分——》ctrl+s
查看log——》ctrl+L
查看report——》ctrl+r
${} ——》ctrl+1
@{} ——》ctrl+2
comment(注释一行)——》ctrl+3
取消comment——》ctrl+4


第三方测试库安装(下载地址:https://pypi.org/)

1)下载本地后,解压至python安装路径的\Lib\site-packages目录下。
2)管理员身份运行Cmd 进入文件路径
在这里插入图片描述
执行:
python setup.py install (有setup文件的执行)
pip install ****.whl (whl文件执行)


模拟键盘操作:send [Arguments] ${keys} ${flag}=0

[Documentation]  模拟键盘输入,需要两个参数:
...  第一个参数: 需要输入的键盘按键
...  第二个参数: 标记变量,可选值,默认为0,
...               0:  代表第一个参数${keys}中的!+^#代表特殊按键
...               1:  代表第一个参数${keys}中的所有字符都是普通字符串
...  举例:
...  ^a^c^v!{F4}      代表:Ctrl+a Ctrl+c Ctrl+v Alt+F4
...  关于特殊按键的说明:
...      如果${flag}为0,则:
...     !  代表ALT按键
...     +  代表SHIFT按键
...     ^  代表CTRL按键
...     #  代表WIN按键
...  比如:!+a  代表:ALT+SHIFT+a
...  其他特殊按键:
...  ${flags}为0的时候,还支持下述特殊按键:
...     输入  最终的键盘按键
...     {!}                     !
...     {#}                     #
...     {+}                     +
...     {^}                     ^
...     {{}                     {
...     {}}                     }
...     {SPACE}                 SPACE
...     {ENTER}                 ENTER key on the main keyboard
...     {ALT}                   ALT
...     {BACKSPACE} or {BS}     BACKSPACE
...     {DELETE} or {DEL}       DELETE
...     {UP}                    Cursor up
...     {DOWN}                  Cursor down
...     {LEFT}                  Cursor left
...     {RIGHT}                 Cursor right
...     {HOME}                  HOME
...     {END}                   END
...     {ESCAPE} or {ESC}       ESCAPE
...     {INSERT} or {INS}       INS
...     {PGUP}                  PageUp
...     {PGDN}                  PageDown
...     {F1} - {F12}            Function keys
...     {TAB}                   TAB
...     {PRINTSCREEN}           Print Screen key
...     {LWIN}                  Left Windows key
...     {RWIN}                  Right Windows key
...     {NUMLOCK on}            NUMLOCK (on/off/toggle)
...     {CAPSLOCK off}          CAPSLOCK (on/off/toggle)
...     {SCROLLLOCK toggle}     SCROLLLOCK (on/off/toggle)
...     {BREAK}                 for Ctrl+Break processing
...     {PAUSE}                  PAUSE
...     {NUMPAD0} - {NUMPAD9}    Numpad digits
...     {NUMPADMULT}             Numpad Multiply
...     {NUMPADADD}              Numpad Add
...     {NUMPADSUB}              Numpad Subtract
...     {NUMPADDIV}              Numpad Divide
...     {NUMPADDOT}              Numpad period
...     {NUMPADENTER}            Enter key on the numpad
...     {APPSKEY}                Windows App key
...     {LALT}                   Left ALT key
...     {RALT}                   Right ALT key
...     {LCTRL}                  Left CTRL key
...     {RCTRL}                  Right CTRL key
...     {LSHIFT}                 Left Shift key
...     {RSHIFT}                 Right Shift key
...     {ALTDOWN}                Holds the ALT key down until {ALTUP} is sent
...     {SHIFTDOWN}              Holds the SHIFT key down until {SHIFTUP} is sent
...     {CTRLDOWN}               Holds the CTRL key down until {CTRLUP} is sent
...     {LWINDOWN}               Holds the left Windows key down until {LWINUP} is sent
...     {RWINDOWN}               Holds the right Windows key down until {RWINUP} is sent
...     {ASC nnnn}               Send the ALT+nnnn key combination
AutoItLibrary.Send  ${keys}  ${flag}

键盘输入Alt+F4
AutoItLibrary.Send !{F4}

键盘输入Ctrl+Space
AutoItLibrary.Send ^{SPACE}

键盘输入Ctrl+a
AutoItLibrary.Send ^a

键盘输入Ctrl+c
AutoItLibrary.Send ^c

键盘输入Ctrl+v
AutoItLibrary.Send ^v

键盘输入Ctrl+s
AutoItLibrary.Send ^s

键盘输入Ctrl+p
AutoItLibrary.Send ^p

键盘输入Ctrl+Home
AutoItLibrary.Send ^{HOME}

键盘输入Ctrl+End
AutoItLibrary.Send ^{END}

键盘输入Win+d
键盘输入 {LWINDOWN}d{LWINUP}

键盘输入Win+r
键盘输入 {LWINDOWN}r{LWINUP}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值