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,让子菜单显示,就可以点击了。