Robotframework自动化常见问题总结

news2024/11/19 1:52:30

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.coloradmin.cn/o/1276138.html

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

相关文章

从订阅式需求发展,透视凌雄科技DaaS模式增长潜力

订阅制&#xff0c;C端消费者早已耳熟能详&#xff0c;如今也凭借灵活、服务更新稳定的特点&#xff0c;逐渐成为B端企业服务的新热点。 比如对中小企业而言&#xff0c;办公IT设备等配套支出都必不可少&#xff0c;但收入本身并不稳定&#xff0c;购置大堆固定资产&#xff0…

uniapp实现文件预览过程

H5实现预览 <template><iframe :src"_url" style"width:100vw; height: 100vh;" frameborder"0"></iframe> </template> <script lang"ts"> export default {data() {return {_url: ,}},onLoad(option…

激光SLAM:Faster-Lio 算法编译与测试

激光SLAM&#xff1a;Faster-Lio 算法编译与测试 前言编译测试离线测试在线测试 前言 Faster-LIO是基于FastLIO2开发的。FastLIO2是开源LIO中比较优秀的一个&#xff0c;前端用了增量的kdtree&#xff08;ikd-tree&#xff09;&#xff0c;后端用了迭代ESKF&#xff08;IEKF&a…

7、单片机与W25Q128(FLASH)的通讯(SPI)实验(STM32F407)

SPI接口简介 SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根…

【学习记录】从0开始的Linux学习之旅——应用开发(helloworld)

一、概述 Linux操作系统通常是基于Linux内核&#xff0c;并结合GNU项目中的工具和应用程序而成。Linux操作系统支持多用户、多任务和多线程&#xff0c;具有强大的网络功能和良好的兼容性。本文主要讲述如何在linux系统上进行应用开发。 二、概念及原理 应用程序通过系统调用与…

理解BatchNormalization层的作用

深度学习 文章目录 深度学习前言一、“Internal Covariate Shift”问题二、BatchNorm的本质思想三、训练阶段如何做BatchNorm四、BatchNorm的推理(Inference)过程五、BatchNorm的好处六、机器学习中mini-batch和batch有什么区别 前言 Batch Normalization作为最近一年来DL的重…

漏洞复现--Tenda路由器DownloadCfg信息泄露

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

IntelliJ IDEA创建springboot项目时不能选择java8的问题解决方案

最近博主也有创建springboot项目&#xff0c;发现了IntelliJ IDEA在通过Spring Initilizer初始化项目的时候已经没有java8版本的选项了。 基于这个问题&#xff0c;有了这篇文章的分享&#xff0c;希望能够帮助大家克服这个困难。 如图&#xff0c;现在创建springboot项目的时…

BLIoTLink工业协议转换软件功能和使用教程

1.功能简介 BLIoTLink 是一款各种 PLC 协议、Modbus RTU 、Modbus TCP、DL/T645 等多 种协议转换为 Modbus TCP、OPC UA、MQTT、BACnet IP、华为云 IoT、亚 马逊云 IoT、阿里云 IoT、ThingsBoard、钡铼云 IoT 等协议的软件。 BLIoTLink 下行支持&#xff1a;各种 PLC 协议、Mod…

ES6知识

作用域 局部作用域 局部作用域分为函数作用域和块作用域 函数作用域 在函数内部声明的变量只能在函数内部被访问&#xff0c;外部无法直接访问。函数的参数也是函数内部的局部变量。不同函数内部声明的变量无法互相访问。函数执行完毕后&#xff0c;函数内部的变量实际被清空…

【代码】考虑差异性充电模式的电动汽车充放电优化调度matlab-yalmip-cplex/gurobi

程序名称&#xff1a;考虑差异性充电模式的电动汽车充放电优化调度 实现平台&#xff1a;matlab-yalmip-cplex/gurobi 代码简介&#xff1a;提出了一种微电网中电动汽车的协调充电调度方法&#xff0c;以将负荷需求从高峰期转移到低谷期。在所提出的方法中&#xff0c;基于充…

(一)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法&#xff08;TTA&#xf…

AutoDL 使用记录

AutoDL 使用记录 1.租用新实例 创建实例需要依次选择&#xff1a;计费方式 → \to → 地区 → \to → GPU型号与数量 → \to → 主机 注意事项&#xff1a; 主机 ID&#xff1a;一个吉利的机号有助于炼丹成功价格&#xff1a;哪个便宜选哪个最高 CUDA 版本&#xff1a;影响…

操作系统-输入输出管理

I/O设备的基本概念和分类 I/O就是输入/输出 I/O设备就是可以将数据输入到计算机&#xff0c;或者可以接收计算机输出数据的外部设备&#xff0c;属于计算机中的硬件部件。 I/O设备按使用特性分类 人机交互类外部设备存储设备网络通信设备 I/O设备按传输速率分类 低速设备中…

小米智能摄像头mp4多碎片手工恢复案例

小米智能摄像头mp4多碎片手工恢复案例 智能摄像头目前在市场上极为常见&#xff0c;仅需要一张存储卡即可实现视频、音频的采集&#xff0c;同时可以通过手机APP进行远程控制&#xff0c;相比传统安防品牌成本更低、更容易部署。在智能摄像头品牌中小米算是绝对的大厂&#xf…

HTTP协议、Java前后端交互、Servlet

文章目录 抓包工具 FiddlerHTTP 请求和响应结构URL 唯一资源定位符HTTP 协议中的方法请求报头&#xff08;header&#xff09;HTTP响应构造 HTTP 请求基于 form 标签基于 ajax使用 Postman HTTPS和 HTTP 的区别对称密钥和非对称密钥数字证书 TomcatServlet创建 Maven 项目引入依…

SSM框架(四):SSM整合 案例 + 异常处理器 +拦截器

文章目录 一、整合流程图1.1 Spring整合Mybatis1.2 Spring整合SpringMVC 二、表现层数据封装2.1 问题引出2.2 统一返回结果数据格式 代码设计 三、异常处理器3.1 概述3.2 异常处理方案 四、前端五、拦截器5.1 概念5.2 入门案例5.3 拦截器参数5.4 拦截器链 一、整合流程图 1.1 S…

2.qml 3D-View3D类学习

本章我们来学习View3D类。 View3D是用来渲染3D场景并显示在2D平面的类&#xff0c;并且该类可以放在QML2D下继承于Item子类的任何场景中&#xff0c;比如将View3D放在Rectangle中: Rectangle {width: 200 height: 200color: "red"View3D { anchors.fill: parent…

STM32CubeIDE(CUBE-MX hal库)----蓝牙模块HC-05(详细配置)

系列文章目录 STM32CubeIDE(CUBE-MX hal库)----初尝点亮小灯 STM32CubeIDE(CUBE-MX hal库)----按键控制 STM32CubeIDE(CUBE-MX hal库)----串口通信 STM32CubeIDE(CUBE-MX hal库)----定时器 文章目录 系列文章目录前言一、蓝牙配置二、CUBE-MX可视化配置三、蓝牙APP调试助手四、…

mysql在linux环境下安装(rpm)以及初始化后的登录配置

注&#xff1a;该安装步骤转载于CSDN,下方配置为原创 按照图片安装并初始化完成MySQL等操作后进行&#xff1b; 安装对于rpm包集合 1-查看安装情况&#xff08;有4个路径&#xff09; whereis mysql 2-查看服务状态 systemctl status mysql 3-初始化数据库 mysqld --initial…