• (二)robotframework自动化中遇到的错误及解决思路


    1、找不到元素,脚本报“element not find”,或者定位到了,不能操作,点击无效

      1) 首先查看自己的“属性值”是否写正确

      2) 元素的标签不唯一,,默认找到第一个

      3) 向上查看,元素是否在frame框架中

      4) 在切换frame时没注意:是父子关系还是并列关系

        ① 两个frame是父子关系时:要进入第二个,需要一层一层的进入

        ② 两个frame是并列关系时:要进入第二个,直接进入第二个frame即可

      5) 查看元素是否在新打开的页面中,需要切换到新窗口

      6) 添加等待时间

        Wait until page contains element  id:kw  30 error

        Wait until element is visible id:kw 30   error

      7) 换其它的定位方式:id/name/class/tag name/link/xpath/css/js/jquery

      8) 检查元素属性是否是会变动的是否是隐藏的

      9) 查看标签的属性是否有“style=’display:none’->元素不显示。属性改为block. 执行js将属性修改为block

        document.getElementById(‘title‘).style.display=’block’

      10) 查看标签的属性是否有‘onclick=return false’->。取消点击。属性改位false

        documet.getElementById(‘id’).style.display=’false’

      11) 查看标签属性是否有readonly="true"属性为只读,执行js修改属性

        documet.getElementById(‘id’).removeAttribute(‘readonly’)

     

    2、使用RIDE运行脚本,第一次成功,第二次不显示日志

         原因:第一次运行打开浏览器操作后,驱动没有关闭

      1) 新建一个“.bat”文件,

      2) 内容输入: taskkill /f /im  chromedriver.exe

              taskkill /f /im  IEDriverServer.exe

      3) 保存后,每次执行完脚本,执行即可

     

    3、在浏览器中打开了新的窗口,切换到新的窗口

     

      1) 只有两个窗口时:

     

      select window  new   ---切换到新窗口

     

      select window    main     ---回到主窗口

     

    4、要点击的元素是链接

      1) 使用: click link 新闻

             click element link:新闻

     

    5、遇到网页有自动收缩菜单,不能定位到

      原因:像这种的收缩菜单,一般是用js或者jquery制作的,使用

      Selenium2library中的定位方式不能使用,只能用js或jquery定位

      定位方法如下:

      使用jquery定位:

      Execute javascript   “$(‘#input’).click()”

      jquery的定位有点像css的定位方式:

      Id定位:”$(‘#user’).click()”

      Class定位:”$(‘.user’).click()”

      其他定位:”$(‘input[type=text]’).click()”

     

    6、RIDE输出报告到指定文件夹

      1) robot项目文件加下新建repot文件夹

      2) 进入RIDE,点击左侧robot项目,进入右方的Run按钮,在Arguments一栏中输入“-d C:/robot/report”,前面是参数,后面是地址,从项目文件夹开始写

     

    7、Js和jquery输入文本

      js赋值: document.getElementById(‘id’).value=’hello’

      Jquery赋值 $(‘#id’).val(‘text’)

    8、js或者jquery定位

      1) 使用js定位

        execcute javascript  window.document.getElementByID(‘kw’).click()

        window.document.getElemenstByTagName(‘kw’)[0].click()

        window.document.getElemenstByClassName(‘kw’)[0].click()

        window.document.getElemenstByName(‘kw’)[0].click()

        window.document.querySelctorAll(‘kw’)[0].click()

        除过id是单个之外,其他的定位都是得到一个列表

        js事件

        .click() 点击 .val(‘值’) 赋值

        .scrollTop=1000 移动上下滚动条

        .scrollLeft=100   移动左右滚动条

        得到文本

        document.getElementById(‘id’).innerText

      2) 使用jquery定位

        execute javascript $(‘#user’).click()   有点象css定位

        Jquery事件

        .click() 点击 .dblclick() 双击

        .text() 得到文本 .text(‘输入’) 输入文本

        返回文本

        ${x} execute javascript  return $(‘#id’).text()

    9、使用js修改隐藏的元素属性

      1) 在表单中隐藏:type=’hidden’(把属性改成text)

        documet.findElementByName(‘name’).prop(‘type’,’text’)

      2) css中隐藏

        Visibility:hidden

        documet.getElementById(‘id’).style.visibility=’visible’

        Opacity:0

        documet.getElementById(‘id’).style.opacity=’1’

        Position:absolute

        documet.getElementById(‘id’).style.left=’-2000px’

        Display:none

        documet.getElementById(‘id’).style.display=’block’

      3) 元素为只读readonly=’readonly’

        documet.getElementById(‘id’).removeAttribute(‘readonly’)

    10、脚本中产使用的关键字

      Setting 引入包和关键字   Keywords 关键字制作

      Testcases 测试用例集合   Variable 公共变量

      [Arguments] 传入的参数   [Return] 返回参数

      Library 引入要用的包   Resource 引入定义的关键字

      Evaluate 引入  python的模块 [Tags] 标签

      Scalar 变量

    11、使用evaluate引入python的模块

      Evaluate os.system(‘c:/test/data/1.exe’) os

    12、读取二维列表的方法

      1) 使用列表来读取

        @{x}=[[‘a’,’b’],[‘c’,’d’]]

        @{x[1]}[1]=d 或者 ${x[1][1]}=d 都可以

      2) 使用变量来读取

        ${y}=[[‘a’,’b’],[‘c’,’d’]]

        ${y[1][1]}=d

    13、学习xpath的三种很厉害的定位方法

      1) Xpath=(“//input[starts-with(@src,’nice’)]”), 匹配src的属性开始位置的关键字等于nice

      2) Xpath=(“//input[ends-with(@id,’nice’)]”),匹配src属性末尾位置为nice

      3) Xpath=(“//input[contains(@id,’nice’)]”),匹配src中包含字符串nice(推荐第三种,因为好多链接的开头和末尾都相同,中间不同)

    14、运行提示unexpected error: 'pybot.bat' 不是内部或外部命令,也不是可运行的程序或批处理文件

      系统环境变量没有配置好,我因为新安装了java8时候配置环境变量时侯多加了一个空格,导致不能使用(所以配置环境变量时一定要小心

    15、得到一组元素进行定位

      @{x} get webelements id:su   首先得到一个元素列表

      click element @{x}[0]     其次再根据列表索引进行点击

    16、操作滚动条

       div中内嵌的滚动条

       上下滚动:

         Js滚动   Execute javascript

         document.quarySelector(‘.class’).scrollTop=100000

           Jquery滚动      $(‘#id’).scrollTop=100000

         等于100000是最下面,等于0是最上边

      左右滚动:

        document.quarySelector(‘.class’).scrollLeft=100000

        Jquery滚动      $(‘#id’).scrollLeft=100000

      正常的滚动条

      上下滚动

        Execute javascript document.documentElement.scrollTop=100000

        Execute javascript window.sccrollTop(0,50)

        Execute javascript document.body.scrollTop=100000

      左右滚动

        Execute javascript window.scrollLeft(0,50)

        Execute javascript document.body.scrollLeft=100000

    17、出现错误“1 Argument requered,but only 0present”

      要求的是一个参数,但是现在有0个参数,

      解决:查看封装的关键字出现问题,参数不对应,

    18、出现”message:unknow error:cannot read propety ‘click’ of undefind

      原因:元素没有出现,进行点击,会出现错误,元素没有加载完成

      在要操作的脚本前面添加一个等待时间即可

    19、用例失败后自动退出驱动

      封装一个关键字:‘退出进程’

      内容为:  evaluate os.system(r’taskkill /f /im IeDriver.exe’) os

                 evaluate os.system(r’taskkill /f /im chromedriver.exe’) os

      接下类:在测试用例的Suite TearDown中引入关键字“退出进程”即可

    20、Ride中常用关键字描述

      Suit TearDown 用例集合结束后执行

      Test TearDown 单个用例结束执行

      Force Tags 强制标记,添加tags

      Test Template 测试案例模板

      Test Timeout 超时时间,结束执行

      ${x} set variable hello 定义变量

      @{y} create list a b 定义列表

      New user keyword 新建用户关键字

      | 分隔符:参数之间使用分隔符分开

      必填参数在左边,选填参数在右边

      list型的变量,只能放到参数的最后一位

      Assign id to element 给对象指定一个id

    21、Click不能使用情况

      在ie中有时候会遇到点击不了的对象,可以试试下列语句

      press key   \13

      press key   \10

    22、u‘\u4e2d\u6587 或者 \xd6\xd0\xce\xc4中文处理

      类似于:u’\u4e2d\u6587 或者 \xd6\xd0\xce\xc4

      RIDE中默认的是unicode,直接可以使用:

      显示中文:使用evaluate

      第一种:${x1} evaluate ${x}

      第二种:${y1} evaluate ‘${y}’.decode(‘gbk’)

      第三种:${x} evaluare list(${x})[0]

    23、3个以上的窗口任意切换

      还是和以前的unittest框架思想一样,先把得到的句柄列表转换成集合再取集合的差集,

      将差集转换为列表,最后返回列表值,进行跳转

      代码如下:

      1) ${h1}  get window handles 每次打开新窗口,使用代码先得到所有的句柄列表,${h1} ${h2}${h3},三个值对应的是打开第1,2,3个窗口后得到的列表

      2) 切换到第一个窗口:

        select window main    即可

      3) 切换到第二个窗口:

            ${z}    evaluate    list(set(${h2})-set(${h1}))

            select window    ${z[0]}

      4) 切换到第三个窗口:

            ${z}    evaluate    list(set(${h3})-set(${h2}))

            select window    ${z[0]}

    24、得到元素列表,在进行点击

      遇到有多个html标签type=button或者列表的属性一样,用普通的定位

      不能定位到,可以使用:先得到列表,在根据索引进行点击

      1) 比如页面内有多个input标签,按钮,属性都是type=button,要点击第二个按钮,

      2) @{x} get webelements css:input[type=button]

        通过定位得到input按钮集合

      3) Click element @{x}[1]

        点击第二个按钮(如需点击其他的按钮,只需更改标黄的索引值即可)

    25、使用命令关闭所有的浏览器

    封装关键字

      evaluate os.system(‘taskkill /f /im firefox.exe’) os

      evaluate os.system(‘taskkill /f /im chrome.exe’) os

      evaluate os.system(‘taskkill /f /im iexplore.exe’) os

    26、需要点击随机元素

      1) @{x} get webelements  id=kw  得到所有id=kw的元素

      2) ${y} evaluate random.randint(‘1,10’) random 得到随机数

      3) Click element @{x}[${y}] 点击随机元素

    27、定位错误:Elementnot ninteractable exception:connot click on element

    元素无法点击,我的是定位方式不一样,使用css定位得到元素列表,再点击

    或者换一种定位方式

    28、左侧的收缩菜单栏点开后不能收缩

    因为收缩栏的定位,在点开前和点开后是不一样的,需要分别写,重新点击即可收缩,(我开始一直用的一样的定位,所以总是不能点击收缩)

    29、使用rf进行解压文件

      1) 首先把WinRAR的地址C:Program FilesWinRAR添加环境变量path中

      2) 创建关键字,进行调用

      

    30、rf中输入中文,在python值出现错误

      一、方法1:

        ① rf中输入汉字:${x}    set variable    测试

        ② evaluate中过滤:${y}    evaluate    r’${x}’ 

          变成:xe9x99/这种‘gbk’格式的

        ③ 传入python

      二、方法2:

        ① 把汉字放到一个列表中,传入python中直接用列表的索引,调用即可(测试可用)

    31、使用${CURDIR}得到当前文件的路径

      1) 引入String模块、使用replace string 去掉相同的字符,对新字符进行拼接

      2) 当前文件是在c盘下,c:\robot\case\OA\001.robot

      3) ${addr}=    replace string    ${CURDIR}    case\OA    data

      4) 输出的值为:c:\robot\data

    32、使用谷歌提示:element not attched to page document

      1) 我的原因是谷歌浏览器速度太快,在错误的脚本钱添加强制等待

      Sleep(3)即可

      2) 在网上搜到的的是:由于页面刷新后,需要重新定位元素

    33、使用evaluate调用Python中的os注意

      注意:

      地址必须是:左斜线、单斜线

      名称:不能使用中文,用英文

    34、错误element is not clickable at point解决方法

      点击报错

        使用Selenium时,触发点击事件,经常报如下异常:

        Element is not clickable at point

      原因及解决方法

      无外乎四种原因

      未加载

        没加载出来就等待元素加载出来,再往下执行。 

      在iframe里

        如果元素在iframe里,在窗口里找是找不到元素的,更是无法点击。所以,要切换到iframe里去找元素。

      不在视窗里,需要拉滚动条

      要点击的元素被覆盖

        可以使用事件链来解决 
        例如下拉菜单,通过hover,让子菜单显示,就可以点击了。

  • 相关阅读:
    在jsp页面如果运行时路径错误解决方法
    Maven实现ssm框架整合
    JS进阶(二)this指南——绑定了谁?
    防御性编程方法收集
    react将多个公共组件归成一类,方便调用
    初始化构建React+Ts项目时出现:Module build failed (from ./node_modules/css-loader/dist/cjs.js): CssSyntaxError
    Dva三种方式实现dispatch的Promise回调
    ES6多层解构
    ES6解构过程添加一个默认值和赋值一个新的值
    Antd-Pro2.0版本如何修改代理,让Mock变为真实服务器接口
  • 原文地址:https://www.cnblogs.com/qupan/p/8643613.html
Copyright © 2020-2023  润新知