(二)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 Files\WinRAR添加环境变量path中

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

  

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

  一、方法1:

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

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

      变成:\xe9\x99/这种‘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,让子菜单显示,就可以点击了。

 

posted on 2018-03-25 11:46  温柔夏目  阅读(1615)  评论(0编辑  收藏  举报

导航