通过RF来跑selenium的脚本,正常运行一遍都没有问题,但如果要多次运行,提高脚本的稳定性,那么应该如何做呢?
 当然有时候最简单最简单的方法就是直接通过sleep来等待,虽然简单粗暴,但会带来效率的下降
 这一阶段一直在搞几个场景的脚本,记录下当中可能遇到的问题
1 绝对不能每一步都去判断等待,重试
     虽然通过方法,我们可以让页面等待元素出现,可以直接去判断每一步是否执行成功,然后通过每一步是否执行成功来判断是否需要重试
    但没有效率,而且也没有必要
    实际感觉即使不加判断等待,可能八成的脚本都是可以正常执行通过的
    如一般简单的文本框中输入文字,这些不需要太关注
    在RF中,可以通过统一添加

   wait until keyword succeeds
   就是如果执行不成功,则多次尝试点击,但这个如果失败,就直接执行失败了

2 一些场景尤其需要注意判断,像查询
   如查询,因为查询之后一定会需要一段时间去加载等待,而且这个等待时间可能是不固定的,如果你不是采用固定等待的方法,那么就需要去考虑我如何判断查询已经成功返回
   如果查询返回的是一个table,,那么可以通过判断table的行数的变化,或者table中一些属性的变化
   尽量去比较下,当查询前,和查询后到底有什么区别,如果找到区别,就可以通过wait语句去等待这个变化的出现
   在RF中,可以用比较粗暴的方法,用一段FOR结构,循环判断,如果出现了退出的条件,则退出循环,然后固定等待sleep 1
   这样的结构,最多可能就等待5s,10s,而且可控,又不是把等待完全交给语句
   FOR   ${i}     IN  RANGE   1    10
         判断是否成功的元素,如等待或者获取
         exit for loop   退出的条件
         sleep 1 
 
3  最稳妥的判断
   如果点击出现一个对话框,但执行的时候,可能不出现,可能出现
   如果不应该出现的时候出现了,可能就会导致脚本直接失败
   如果要最稳妥的处理,那么可以通过  Run Keyword And Ignore Error
  来判断,这个语句可以返回执行的结果是PASS还是FAIL
  那么可以先   ${result}     Run Keyword And Ignore Error   等待控件   如等待对话框出现 
 后面就根据这个result,如果出现,那么点击,如果不出现不点击
 Run Keyword And Ignore Error 不影响脚本的执行结果,不会把结果变成失败
 
4  RF中的IF
  RF中的IF结构非常不好写,随意尽量不要添加复杂的判断
  官网的例子
   

  如果遇到字符串判断,可以给变量添加“”
  如  ”${status}“ == “PASS”

5 数据异常
  其实出现异常,还有一种可能是数据
  如原来已有数据了,可能你添加就会报重复,可能有的提示就不会出现
   这时候要注意数据,当然最好是通过数据库直接来复制或者检查,在执行前进行数据整理,在执行后数据清理
   有一些数据可能从UI中是无法删除,那么可能就需要直接从库中删除
   但所有处理都会花费太多的时间和成本
   如果比较简单,可能就执行前人工看下
 
6  无法避免的异常
    实际执行中即使你加了再多的判断,还是可能会出现一些无法想到的意外
    如遇到过,执行的时候,直接返回接口异常
    所以自动化的前提,还是系统本身是稳定的,如果本身系统就不够强壮,你可能遇到的异常就越多

7  每次执行,遇到异常都要分析
    可能刚调试好的脚本,你执行一次没有问题,那多执行几次,如果出现了异常,就要去分析异常出现的可能
    只要出现过一次异常,那么下一次就有可能会再次出现
    实际总,运行,判断查询,虽然已经加了判断,但有一次出现了不正常
    后来修改了判断,加强了判断,也许下次就不会再出现
   所以所谓的稳定就是在一次次的运行中,分析,修改,加强
 
8  判断脚本的稳定
     最简单的方法,就是不断重复运行
     如果保证网络正常,浏览器正常
    可以制定一个指标,如跑10,或者20,都没有异常,则认为脚本是可以的
    毕竟没有可视化的所谓稳定,还是需要通过直观的数据去判断
 =========================================================
 这只是在用RF+Selenium做几个脚本时的思考
 毕竟有时候,我们看一些课程都是百度查询,那个都太简单了,基本不会遇到什么异常
 但实际中会遇到各种可能性
 
 

RobotFramework+Selenium如何提高脚本稳定性的更多相关文章

  1. Selenium执行测试脚本稳定性的一些经验分享交流

    Selenium执行测试脚本稳定性的一些经验分享交流 公司的自动化WEB测试框架IATA已上线运行了一段时间,期间发现一些脚本稳定性的问题,与大家分享一下. CASE执行游览器:ie firefox ...

  2. 连载三:RobotFramework+Selenium+Jenkins分布式构建

    目标:Jenkins安装在服务器上,而使用Jenkins调用本机的脚本并在本机执行. 步骤: (1)需要有RobotFrameWork+Selenium的运行环境: python2.7,Robotfr ...

  3. selenium基础(脚本模块化)

    selenium基础(脚本模块化)

  4. Selenium执行JavaScript脚本

    JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页.可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在We ...

  5. 使用Python的selenium库制作脚本,支持后台运行

    本文介绍如何使用Python的selenium库制作脚本.概念:       Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome.Firefox.Safari等主流界面 ...

  6. Selenium 脚本稳定性问题

    运行一个星期前升至更久前的脚本,,,出现如下错误提示 elementNotVisibleException was unhandled by user code. 经过询问大侠,说我的脚本不够健全,也 ...

  7. 树莓派Raspberry中成功安装RobotFramework+Selenium

    [原创链接]:http://www.cnblogs.com/atsats/p/6666848.html 一般RobotFramework都是安装在Windows/Linux的PC机上,这里将简单介绍在 ...

  8. robotframework+selenium搭配chrome浏览器,web测试案例(搭建篇)

    这两天发布版本 做的事情有点多,都没有时间努力学习了,先给自己个差评,今天折腾了一天, 把robotframework 和 selenium 还有appnium 都研究了一下 ,大概有个谱,先说说we ...

  9. robotframework - selenium 分层思路

    前言: 对于每一条用例来说,调用“百度搜索”关键字,输入搜索内容,输入预期结果即可.不同关心用例是如何执行的.如果百度输入框的定位发生了变化,只用去修改“百度搜索”关键字即可,不用对每一条用例做任何修 ...

随机推荐

  1. unity优化 — UGUI纹理格式的选择

    首次界面打开加载的资源(如 贴图)会被缓存在内存中,再次打开界面由于内存中已有了资源 所以会更快.如何让首次打开界面会更快呢? 图片是否进行了有效的压缩.Android 平台下不带透明通道 优先使用E ...

  2. Vue.JS快速上手(组件生命周期)

    一.什么是组件 组成网页独立功能基本单元(片段), 复用.维护.性能, Vue.js中的组件就是一个Vue的实例,Vue中的组件包含data/methods/computed. 一个Vue.js的应用 ...

  3. 一、部署sqlserver

    1.下载并挂载sqlserver镜像 2.填写秘钥:6GPYM-VHN83-PHDM2-Q9T2R-KBV83 3.默认下一步 4.勾选需要的功能 5.默认下一步 6.默认下一步 等待安装完成即可. ...

  4. 数组字符串json之间的相互转换

    数组转字符串 var arr = [1,2,3,4,'巴德','merge']; var str = arr.join(','); console.log(str); // 1,2,3,4,巴德,me ...

  5. python库--tensorflow--可视化

    方法 返回值类型 参数 说明 tf.summary .FileWrite()   创建事件文件     logdir 文件保存路径(C盘), 通过tensorboard --logdir=文件路径(l ...

  6. 计算机网络参考模型和5G模型的那些事

    一.分层思想 二.OSI参考模型 三.TCP/IP协议族 四.数据封装和解封装过程 五.层间通讯过程 六.3GPP规范及5G协议栈 一.分层思想 享用牛奶的人未必了解其生产过程 使用网络的人未必知道数 ...

  7. 在excel中,截取电话号码后4位

    在单元格中输入以下 =RIGHT($A3,4) 其中$a3是手机号所在的单元格,4是从右查4个

  8. MySQL-技术专题-MySQL主从架构以及[半同步机制]模式大全

    MySQL的主从复制 一般在大规模的项目上,都是使用MySQL的复制功能来创建MySQL的主从集群的. 主要是可以通过为数据库服务器配置一个或多个备库的方式来进行数据同步. 复制的功能不仅有利于构建高 ...

  9. 如何获取PHP命令行参数

    使用 PHP 开发的同学多少都会接触过 CLI 命令行.经常会有一些定时任务或者一些脚本直接使用命令行处理会更加的方便,有些时候我们会需要像网页的 GET . POST 一样为这些命令行脚本提供参数. ...

  10. 配置阿里云gradle

    build.gradle buildscript { ext { springBootVersion = '1.5.15.BUILD-SNAPSHOT' } repositories { // mav ...