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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Intel Ai Analytics Toolkit 及边缘计算的溶氧预测水产养殖监测方案

基于AI的淡水养殖水质溯源、优化系统方案 前言一、关键需求及方案概述二、方案设计预测机制LSTM 模型基于intel AI 的时序水质分析模型与分类模型优化 三、实战分析1、方案简述2、数据分析预处理特征类型处理特征分布分析 3、特征构造4、特征选择过滤法重要性排序 5.构建LSTM模…

java游戏攻略资讯网站的设计与实现springboot+vue

游戏攻略网站分为管理员与用户两种角色。 管理员的功能包括登录&#xff0c;用户管理&#xff0c;游戏分类管理&#xff0c;游戏攻略管理&#xff0c;游戏资讯管理等。 登录功能&#xff1a;管理员需要登录进入系统后台。 用户管理&#xff1a;实现用户信息的查询&#xff0c;修…

TCP 重传、滑动窗口、流量控制、拥塞控制

1&#xff1a;重传机制 超时重传 快速重传 SACK 方法 Duplicate SACK 1&#xff1a;重传机制 超时重传&#xff1a;重传机制的其中一个方式&#xff0c;就是在发送数据时&#xff0c;设定一个定时器&#xff0c;当超过指定的时间后&#xff0c;没有收到对方的ACK确认应答报文…

vue3 中使用 sse 最佳实践,封装工具

工具 // 接受参数 export interface SSEChatParams {url: string,// sse 连接onmessage: (event: MessageEvent) > void,// 处理消息的函数onopen: () > void,// 建立连接触发的事件finallyHandler: () > void,// 相当于 try_finally 中的 finally 部分&#xff0c;不…

读书笔记-《数据结构与算法》-摘要1[数据结构]

文章目录 [数据结构]1. String - 字符串2. Linked List - 链表2.1 链表的基本操作2.1.1 反转链表单向链表双向链表 2.1.2 删除链表中的某个节点2.1.3 链表指针的鲁棒性2.1.4 快慢指针 3. Binary Tree - 二叉树3.1 树的遍历3.2 Binary Search Tree - 二叉查找树 4. Queue - 队列…

JDK21无法导入TimeUnit类

运行环境&#xff1a;windows11、IDEA2023.1.3、JDK21 问题描述&#xff1a;IDEA中无法导入java.util.concurrent.TimeUnit类。 以下截图是问题解决后的截图。有问题的时候未截图&#xff0c;说明一下&#xff0c;有问题的时候TimeUnit类是红色的&#xff0c;无法导入&#x…

申请开通QMT量化需要多少资金?免费开通!

最近量化交易在市场上大火&#xff0c;很多投资者想要参与进来。QMT量化软件是目前市场上一款比较常见并且强大的量化软件。那开通QMT量化交易软件需要多少资金&#xff1f; QMT量化交易软件是一种专门用于量化交易的工具&#xff0c;它能够帮助投资者通过程序化交易策略进行股…

布隆过滤器

目录 布隆过滤器的提出 布隆过滤器的概念 布隆过滤器的实现 布隆过滤器的插入 布隆过滤器的查找 布隆过滤器的删除 布隆过滤器的优点 布隆过滤器的缺点 布隆过滤器的使用场景 布隆过滤器的提出 在注册账号设置昵称的时候,为了保证每个用户的昵称唯一性,系统必须检测…

庆科EMW3080wifi模组烧录AT固件

本文记录庆科的EMW3080wifi模组烧写AT固件的过程&#xff1b; 参考文档&#xff1a;https://mxchip.yuque.com/zc9vym/tn0rwo/kgs4lx?singleDoc#NrlEB 以上链接为庆科方提供的文档&#xff0c;如有侵权立即删除&#xff1b; 庆科官方提供了三种烧录方式&#xff0c;我这边只记…

Quirks(怪癖)模式是什么?它和 Standards(标准)模式有什么区别?

前言: "Quirks模式"和"Standards模式"是与HTML文档渲染模式相关的两种模式。它们影响着浏览器如何解释和渲染HTML和CSS。理解它们之间的区别对于前端开发者和网页设计师来说是至关重要的。本文将深入讨论Quirks模式和Standards模式的区别&#xff0c;以及它…

如何快速了解一家公司?

在炒股过程中&#xff0c;我们想要了解一家公司是否具有投资价值&#xff0c;需要查看和阅读很多公司的相关资料。股民们自行去查询往往会花费很多的时间精力&#xff0c;所以专业的炒股软件一般都会给股民提供这些现成的资料。 在金斗云智投APP内&#xff0c;进入到个股详情页…

知识管理平台Confluence:win10安装confluence

文章目录 介绍主要功能 安装教程安装java运行平台JRE安装数据库Postgresql在Postgresql创建confluence使用的数据库创建数据库用户创建数据库 安装confluence注册confluence启动confluence 参考链接 介绍 Confluence 是由澳大利亚软件公司 Atlassian 开发的企业协作平台。它提…

负电源电压转换-TP7660H

负电源电压转换-TP7660H 简介引脚说明典型应用电路倍压与反压的应用电路 简介 TP7660H 是一款 DC/DC 电荷泵电压反转器专用集成电路。芯片能将输入范围为 2.5V&#xff5e;11V 的电压转换成相应的-2.5V&#xff5e;-11V 的输出&#xff0c;电压转换精度可达99.9%&#xff0c;电…

2022年高校大数据挑战赛B题图像信息隐藏求解全过程论文及程序

2022年高校大数据挑战赛 B题 图像信息隐藏 原题再现&#xff1a; 互联网的快速发展&#xff0c;给图像、视频的传播方式带来巨大变化。图像作为媒体的重要载体&#xff0c;每天有大量的原创图像公开在互联网上&#xff0c;如何保护图像版权的同时不破坏原始的图像一直是图像处…

MySQL 索引,优化,回表,执行计划等相关总结学习

一、MySQL 执行流程 innoDB表引擎&#xff1a;默认的事务型引擎&#xff0c;最重要最广泛的存储引擎&#xff0c;性能非常优秀,数据村粗在共享表空间&#xff0c;可以通过配置分开,主键查询性能高于其他引擎 myISM表引擎&#xff1a;5.1版本前这个是默认的存储引擎&#xff0c…

inBuilder低代码平台新特性推荐-第十二期

各位CSDN的友友们&#xff0c;大家好~ 今天来给大家介绍一下inBuilder低代码平台社区版中特性推荐系列第十二期——新版本集成开发环境&#xff01; 01 概述 编码规则定义规定了编号的生成格式&#xff0c;一条编码规则定义由基本信息和段列表组成&#xff1a;基本信息是对该编…

OCR原理解析

目录 1.概述 2.应用场景 3.发展历史 4.基于传统算法的OCR技术原理 4.1 图像预处理 4.1.1 灰度化 4.1.2 二值化 4.1.3 去噪 4.1.4 倾斜检测与校正 4.1.4.2 轮廓矫正 4.1.5 透视矫正 4.2 版面分析 4.2.1 连通域检测文本 4.2.2 MSER检测文本 4.3 字符切割 4.3.1 连…

视频后期特效处理软件 Motion 5 mac中文版

Motion mac是一款运动图形和视频合成软件&#xff0c;适用于Mac OS平台。 Motion mac软件特点 - 精美的效果&#xff1a;Motion提供了多种高质量的运动图形和视频效果&#xff0c;例如3D效果、烟雾效果、粒子效果等&#xff0c;方便用户制作出丰富多彩的视频和动画。 - 高效的工…

【力扣 面试题02.07链表相交】一种思路极其清晰的解法

力扣一单简单题&#xff0c;看完大佬的题解真是佩服得五体投地&#xff01; 虽是一道简单题&#xff0c;当我吭哧吭哧写了几十行后&#xff0c;看到大佬仅仅几行直接秒掉&#xff0c;只能说算法的本质还是数学&#xff0c;数学逻辑思维真是太重要了&#xff0c;有时候真得慢慢去…

TZOJ 1429 小明A+B

答案&#xff1a; #include <stdio.h> int main() {int T0, A0, B0, sum0;scanf("%d", &T); //输入测试数据的组数while (T--) //循环T次{scanf("%d %d", &A, &B); //输入AB的值sum A B;if (sum > 100) //如果是三位数{…