Robotframework自动化常见问题总结

Robotframework自动化新手常见问题总结

1. 经常有人问这个元素找不到,一般先排除这两个地方,再自己找找

A:是否等待了足够的时间让元素加载 (增加sleep xx, wait Until xxx)

B: 仔细查查,这个元素是否进入到另一个frame了 (select frame xxx)

上面两点都确定了还不行,那改变下xpath的方法

下面的方法掌握了,基本上没有找不到的。

C:xpath = //div[text()='web上显示的文本'] 根据文本匹配

还有一文本前后可能有空格,特殊字符,可以用部分文本来匹配

D:xpath = //div[contains(text(),'部分文本')]

E:还有找父节点的方法: ../ 这个自己去看看,会有收获的。

2. 有同学问:如何判断这个元素disable,或者置灰了

a) 用F12仔细看看元素灰了和没灰,disable和enable的区别,基本都能看到有的属性发生了改变, class的值多了或者少了checked, 或者disable等

b) 一般这种我都用到 get element attribute关键字,如下获取class的属性

${class_value} Get Element Attribute xpath=//div[@id=’123’]@class

c) 你再判断 ${class_value}是否包含 disable,或者 check就可以得到其状态了

3. 有人说:我这个log怎么是乱码

[ {‘dst': u'\u6cb3\u5317\u77012'}, {"xxx": "bbb"} ] 取出u'\u6cb3\u5317\u77012', 然后log就是中文了

4. 还有人问,我怎么没这个Get from Dictionary关键字,

其实是你没加载这些库,我建议:新手必须加载的库

BuiltIn RF系统内部的,最基础的Run keyword xxx都在这里

String 字符串处理的库,文本处理必备

Collections 字典,列表的库,必备

Selenium2Library web测试入门库

OperationSystem 操作windows系统命令,处理文件时要用到

AutoItLibrary 鼠标、键盘操作windows控件用这个

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

5. 还有人问我的数据库获取的怎么是乱码 ????? 一堆问号啥的

请在connect数据库时增加 charset=utf8 (我没弄过数据库的自动化,这个是看雪霁大神回答他人后记录下来的,还有其他可能的乱码,我不知道,请后续补充)

6. 还有人问,怎么设置全局变量

我们就谈谈RF变量的内部变量

${aaa} Set Variable haha 这个${aaa}是普通变量,就本case能用

Set suite variable ${aaa} 这个${aaa}就是测试suite变量

set global variable ${aaa} 全局变量${aaa},在哪都能传

Set Test Variable ${aaa} (这个我还没用到过)

7. 有人说,我的日志输出想改个路径

在运行界面:Arguments右边输入框这样写 -l E:\Robot_log\smoke_test_log -r E:\Robot_log\smoke_test_report

-l 是log的路径参数

-r 是report的路径参数

如果还有其他执行脚本的需求,请命令行pybot -? 自己看看,都在这里

8. 还有人问:我的脚本assert,我还想继续执行,不想停下来

用这个几个,保证让你停不下来的节奏。。。

Run Keyword And Return Status,

Run Keyword And Ignore Error

Run Keyword And Continue on Failure

9. 有新手经常问,我的浏览器怎么打不开

这种有提示:你的chromedriver没找到路径,我就不说了。

如果没这种提示的,基本就是你的ride,或者robotframework太旧了,还有就是你的浏览器版本太高了,

这种问题在道长经常在群里回答,我只是作为记录了,道长别找我要版权费哈。。。

10. 新手常见错误:If… Else if… Else 怎么不行

这个确实是rf的坑,平时keyword都没区分大小写,但是这套IF语句一定要大写。

还有比较的时候,${aaa} == ${bbb}报语法错误,

因为你比较的时候没这样 ‘${aaa}’ == ‘${bbb}’ (请加上英文的单引号)

11. 还有,我导入库怎么是红色的

第一:请确定你是用pip在线安装的,其他下载文件安装很可能没安装好。

第二:请注意库命的大小写

第三,如果是你自己的自定义库红色,先运行下,看提示log,报错误在哪行,自己搞定语法错误

12. 这个弹出框怎么处理

一般处理弹窗先增加等待,容错处理

先用这个试试:Dismiss Alert

不行再用下面的

Choose Ok On Next Confirmation

Confirm action

顺便:get alert message --- 获取弹出窗的信息

13. 需要验证提示信息,(提示输入非法等等)用到鼠标悬停

Mouse Over xxx这样鼠标就挺在那了

马上去获取提示信息,get text xxx

14. 日期控件怎么办,是否有关键字

RF没有日期控件的关键字,(我们是自己封装的)。

最简单的用js来执行 (我也不会js,找你们开发吧)

15. 这个下拉框我怎么选不上。

在浏览器F12下拉框如果是正规的,你的选项应该是 <option xxx> 的,

正规的,你就像下面这么用:

Select from List xpath=//xxx/xxx 灯姐

Selct from List by value xxxx 萤草奶妈

非正规的 <div xxxx >,你就用下面方式

Click Element xpath=//xxx/xxx//div[text()='坦克程咬金']

16. 那种2选1的按钮怎么做

官方称为Radio Button,在RF的selenium库中F5搜索 radio就有了

Select radio button xxx 男

17. 多选按钮怎么做

Select checkbox

18. Click Button点不到元素

可以尝试下: click element

19. 没有这样的关键字咋办

没错,在你没有办法的时候,RF找来了他的经纪人“Python老宋”来帮忙。

Evaluate 后面接你的python代码就可以了。

20. 有人问:为什么我的IF … ELSE 跑到一行了,写的时候我是分开了的。

这个不用担心,RF就是这样自动的弄到一行了,不影响的

21. 有人问:For循环怎么写?

就下面这样写,注意for前面有个冒号

:For ${i} IN RANGE 10

Log ${i} --- for循环内的语句在ride中前面要空一格

Log 循环可以多行

22. 我写了IF语句,RF中如果让他执行多行关键字

对不起,rf的Run Keyword If语句后面不能像下面这样:

Run Keyword If ‘xxx’ == ‘xxx’ 语句1

语句2 //这样是不行的

语句3 //这样是不行的

下面这样是可以的

Run Keyword If ‘xxx’ == ‘xxx’ 语句1

Run Keyword If ‘xxx’ == ‘xxx’ 语句2

Run Keyword If ‘xxx’ == ‘xxx’ 语句3

上面那样太麻烦,我有很多语句那咋办?

恭喜你,那只能自己封装关键字了,正好练习下封装技能!哈哈。。。

23. 使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法:

通过改写RobotFramework源代码增加--retry选项,实现test级别的失败用例自动再执行:失败用例会重跑N次,直至成功or 耗尽重试次数,生成的日志和报告文件中只会体现最后一次执行的结果。

修改代码如下:

一、修改文件 C:\Python27\Lib\site-packages\robot\run.py

1)在USAGE变量里添加下面内容。

Options
=======
-X --retry retry Set the retry times if test failed.
-N --name name Set the name of the top level test suite. Underscores
in the name are converted to spaces. Default name is
created from the name of the executed data source.

2)增加导入模块

reload(sys)
sys.setdefaultencoding('UTF-8')
from xml.dom import minidom

3)RobotFramework类增加make方法

def make(self,outxml):
xmldoc = minidom.parse(outxml)
suiteElementList = xmldoc.getElementsByTagName('suite')
mySuite = []
for suiteElement in suiteElementList:
if suiteElement.childNodes is not None:
for element in suiteElement.childNodes:
if element.nodeName == 'test':
mySuite.append(suiteElement)
break
for suite in mySuite:
testElements = {}
for element in suite.childNodes:
if element.nodeName == 'test':
name = element.getAttribute('name')
if testElements.get(name) == None:
testElements.update({name:[element]})
else:
testElements.get(name).append(element)
for n,el in testElements.iteritems():
for i in el[0:-1]:
textElement = i.nextSibling
suite.removeChild(i)
suite.removeChild(textElement)
savefile = open(outxml,'w')
root = xmldoc.documentElement
root.writexml(savefile)
savefile.close()

4)RobotFramework类的main方法,加入内容 self._make(settings.output)

二、robot/conf/settings.py
修改_cli_opts字典,增加 'Retry':('retry',3)

def visit(self, visitor):
for item in self:
if self.__module__ == 'robot.model.testcase' and hasattr(visitor,"_context"):
testStatus = ''
for i in range(0,int(visitor._settings._opts['Retry'])):
if testStatus != 'PASS':
if item.name in visitor._executed_tests:
visitor._executed_tests.pop(item.name)
item.visit(visitor)
testStatus = visitor._context.variables['${PREV_TEST_STATUS}']
else:
break
else:
item.visit(visitor)

四、robotide\contrib\testrunner\usages.py
修改USAGE字符串,增加 -X --retry retry Set the retry times if test failed.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—392.判断子序列【简单】

2023每日刷题&#xff08;四十七&#xff09; Leetcode—392.判断子序列 双指针实现代码 bool isSubsequence(char* s, char* t) {int lens strlen(s);int lent strlen(t);int left 0, right 0;if(lens 0) {return true;}while(right < lent) {if(t[right] s[left])…

用户反馈组件实现(Vue3+ElementPlus)含图片拖拽上传

用户反馈组件实现&#xff08;Vue3ElementPlus&#xff09;含图片拖拽上传 1. 页面效果1.1 正常展示1.2 鼠标悬浮1.3 表单 2. 代码部分1.2 html、ts1.2 less部分 3. 编码过程遇到的问题 1. 页面效果 1.1 正常展示 1.2 鼠标悬浮 1.3 表单 2. 代码部分 1.2 html、ts <templ…

Node.js 事件循环:定时任务、延迟任务和 I/O 事件的艺术

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

快照读通过MVCC解决不可重复读当前读通过间隙锁解决幻读

简介 Multi-Version Concurrency Control 多版本并发控制&#xff0c;MVCC 是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff1b;在编程语言中实现事务内存。 *往期知识不做重点 事务具有4个特征,分别是原子性、一致性、隔…

骨传导会损伤听力吗?戴哪种耳机不伤耳朵?

使用骨传导耳机不会损伤听力&#xff0c;反而还能在一定程度上保护听力&#xff01; 骨传导耳机最大的特点是&#xff0c;声波不经过外耳道和骨膜中的空气进行传播&#xff0c;而是直接将人体骨骼结构作为传声介质来进行传播。 在使用骨传导耳机时&#xff0c;骨传导耳机的声源…

Python标准库math【侯小啾python领航班系列(十六)】

Python标准库math【侯小啾python领航班系列(十六)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

SpringCloud_Gateway服务网关

文章目录 一、SpringCloudGateway服务网关概论1、SpringCloudGateway服务网关概论2、SpringCloudGateway的三大核心概念 二、SpringCloudGateway的路由及断言1、子模块项目SpringCloudGateway的搭建2、SpringCloudGateway_Java API构建路由3、SpringCloudGateway的动态路由功能…

学生备考护眼灯哪个牌子好?值得入手的护眼台灯推荐

护眼台灯作为这几年人们很关注的电器产品&#xff0c;家里有孩子或者是经常面对电子设备的人士&#xff0c;相信都会对其有所了解并且购买了护眼台灯&#xff0c;但是还有些家长对护眼台灯的认知不够深&#xff0c;以至于还没有给孩子安排上护眼台灯&#xff0c;还在疑惑护眼台…

FlowJo软件的简单介绍 掌控流式细胞分析的科技巨匠 FlowJo10

FlowJo 10 for Mac是一款强大的流式细胞数据分析软件&#xff0c;具有以下功能&#xff1a; 数据导入与预处理&#xff1a;FlowJo 10可以轻松导入各种类型的流式细胞数据&#xff0c;并对数据进行预处理&#xff0c;包括去噪、背景校正等&#xff0c;以确保数据的准确性和可靠…

小小窗户,在风水中有大大的作用

风水&#xff0c;不是迷信&#xff0c;是环境科学&#xff0c;是地磁学。过去大户人家&#xff0c;官府都是很注重风水的。现在&#xff0c;越是往社会上层越是注重风水。在实际的家居风水之中&#xff0c;要想生旺气场&#xff0c;增加财运&#xff0c;风水纳气一定要充足。 自…

CCC联盟数字车钥匙(七)——BLE连接流程

本文接上一篇CCC数字钥匙BLE概述&#xff0c;介绍BLE中相关连接流程的实现。 2、BLE流程 2.1 所有者配对连接建立 CCC中使用Bluetooth OOB&#xff08;Out of Band, 带外&#xff09;配对完成所有者配对、连接建立的流程。BLE设置分为以下两个子部分&#xff1a; BLE链路层连…

UI自动化Selenium find_elements和find_element的区别

# 如果获取的element是list&#xff0c;那么需要用find_elements方法&#xff1b;此方法会返回list&#xff0c;然后使用len() 方法&#xff0c;计算对象的个数&#xff1b; # find_element方法返回的不是list对象&#xff0c;所以导致没办法计算对象个数 # 1.返回值类型不同…

oops-framework框架 之 初始了解(一)

引擎&#xff1a;CocosCreator 环境&#xff1a; Mac Gitee: oops-framework 简介 oops-framework是由作者dgflash编写&#xff0c;基于CocosCreator 3.x而实现的开源框架。 该框架以插件形式存在&#xff0c;主要目的是为了降低与项目的耦合&#xff0c;并且通过插件内部的…

LeetCode | 100. 相同的树

LeetCode | 100. 相同的树 OJ链接 判断两个节点是否等于空&#xff0c;两个都等于空就直接返回true如果一个等于空&#xff0c;另一个不等于空&#xff0c;说明false然后再判断两个树的值是否相等最后递归p的左&#xff0c;q的左&#xff0c;p的右&#xff0c;q的右 bool isS…

仿真的整体框架和类图设计

之前的写的模拟代码没有模块&#xff0c;没有对象&#xff0c;写的逻辑结构也很混乱。我花了些时间进行整理&#xff0c;首先所有的类如下图 在管理类中有统一的管理类的接口 &#xff0c;提供所有管理类的虚拟初始化和关闭方法 然后事件的管理类 我希望在这个类中管理所有的脉…

K7系列FPGA多重启动(Multiboot)

Xilinx 家的 FPGA 支持多重启动功能&#xff08;Multiboot&#xff09;&#xff0c;即可以从多个 bin 文件中进行选择性加载&#xff0c;从而实现对系统的动态更新&#xff0c;或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…

牛客剑指offer刷题模拟篇

文章目录 顺时针打印矩阵题目思路代码实现 扑克牌顺子题目思路代码实现 把字符串转换成整数题目思路代码实现 表示数值的字符串题目思路代码实现 顺时针打印矩阵 题目 描述 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字&#xff0c;例如&#xf…

机器学习笔记 - 基于百度飞桨PaddleSeg的人体分割模型以及TensorRT部署说明

一、简述 虽然Segment Anything用于图像分割的通用大模型看起来很酷(飞桨也提供分割一切的模型),但是个人感觉落地应用的时候心里还是更倾向于飞桨这种场景式的,因为需要用到一些人体分割的需求,所以这里主要是对飞桨高性能图像分割开发套件进行了解和使用,但是暂时不训练…

Java 线程同步和通信

Android 11 废弃了AsyncTask 线程 Thread: 通过start 开启 源码: start0 native方法 通过虚拟机跟操作系统交互 进程和线程区别: 进程是操作系统的独立区域,各个区域互不干扰,一个进程可以有多条线程同时工作,进程大于线程,线程依赖进程,线程间可以共享资源 Runnable: 接口…

matlab操作方法(二)——基本作图

matlab提供很多灵活的二维作图功能函数。这些作图函数分为3类&#xff1a;图形处理、曲线和曲面图的创建、注释和图形特性。作图函数虽多&#xff0c;但语法大致相同 在 MATLAB 中&#xff0c;figure 函数用于创建或选择图形窗口。 matlab figure函数的用法_matlab中figure-C…