网站开发的层级结构,wordpress手机网站插件,wordpress自定义字段怎么用,微信怎样开公众号Robotframework自动化新手常见问题总结
1. 经常有人问这个元素找不到#xff0c;一般先排除这两个地方#xff0c;再自己找找
A#xff1a;是否等待了足够的时间让元素加载 (增加sleep xx, wait Until xxx)
B: 仔细查查#xff0c;这个元素是否进入到另一个frame了 (sel…Robotframework自动化新手常见问题总结
1. 经常有人问这个元素找不到一般先排除这两个地方再自己找找
A是否等待了足够的时间让元素加载 (增加sleep xx, wait Until xxx)
B: 仔细查查这个元素是否进入到另一个frame了 (select frame xxx)
上面两点都确定了还不行那改变下xpath的方法
下面的方法掌握了基本上没有找不到的。
Cxpath //div[text()web上显示的文本] 根据文本匹配
还有一文本前后可能有空格特殊字符可以用部分文本来匹配
Dxpath //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数据库时增加 charsetutf8 我没弄过数据库的自动化这个是看雪霁大神回答他人后记录下来的还有其他可能的乱码我不知道请后续补充
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
3RobotFramework类增加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()
4RobotFramework类的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.