一、找不到元素,脚本报“element not find”,或者定位到了,不能操做,点击无效javascript
1) 首先查看本身的“属性值”是否写正确css
2) 元素的标签不惟一,,默认找到第一个html
3) 向上查看,元素是否在frame框架中java
4) 在切换frame时没注意:是父子关系仍是并列关系python
① 两个frame是父子关系时:要进入第二个,须要一层一层的进入jquery
② 两个frame是并列关系时:要进入第二个,直接进入第二个frame便可web
5) 查看元素是否在新打开的页面中,须要切换到新窗口chrome
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’)
二、使用RIDE运行脚本,第一次成功,第二次不显示日志
缘由:第一次运行打开浏览器操做后,驱动没有关闭,
1) 新建一个“.bat”文件,
2) 内容输入: taskkill /f /im chromedriver.exe
taskkill /f /im IEDriverServer.exe
3) 保存后,每次执行完脚本,执行便可
三、在浏览器中打开了新的窗口,切换到新的窗口
1) 只有两个窗口时:
select window new ---切换到新窗口
select window main ---回到主窗口
四、要点击的元素是连接
1) 使用: click link 新闻
click element link:新闻
五、遇到网页有自动收缩菜单,不能定位到
缘由:像这种的收缩菜单,通常是用js或者jquery制做的,使用
Selenium2library中的定位方式不能使用,只能用js或jquery定位。
定位方法以下:
使用jquery定位:
Execute javascript “$(‘#input’).click()”
jquery的定位有点像css的定位方式:
Id定位:”$(‘#user’).click()”
Class定位:”$(‘.user’).click()”
其余定位:”$(‘input[type=text]’).click()”
六、RIDE输出报告到指定文件夹
1) 在robot项目文件加下新建repot文件夹
2) 进入RIDE,点击左侧robot项目,进入右方的Run按钮,在Arguments一栏中输入“-d C:/robot/report”,前面是参数,后面是地址,从项目文件夹开始写
七、Js和jquery输入文本
js赋值: document.getElementById(‘id’).value=’hello’
Jquery赋值: $(‘#id’).val(‘text’)
八、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()
九、使用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’)
十、脚本中产使用的关键字
Setting 引入包和关键字 Keywords 关键字制做
Testcases 测试用例集合 Variable 公共变量
[Arguments] 传入的参数 [Return] 返回参数
Library 引入要用的包 Resource 引入定义的关键字
Evaluate 引入 python的模块 [Tags] 标签
Scalar 变量
十一、使用evaluate引入python的模块
Evaluate os.system(‘c:/test/data/1.exe’) os
十二、读取二维列表的方法
1) 使用列表来读取
@{x}=[[‘a’,’b’],[‘c’,’d’]]
@{x[1]}[1]=d 或者 ${x[1][1]}=d 均可以
2) 使用变量来读取
${y}=[[‘a’,’b’],[‘c’,’d’]]
${y[1][1]}=d
1三、学习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(推荐第三种,由于好多连接的开头和末尾都相同,中间不一样)
1四、运行提示unexpected error: 'pybot.bat' 不是内部或外部命令,也不是可运行的程序或批处理文件
系统环境变量没有配置好,我由于新安装了java8时候配置环境变量时侯多加了一个空格,致使不能使用(因此配置环境变量时必定要当心)
1五、获得一组元素进行定位
@{x} get webelements id:su 首先获得一个元素列表
click element @{x}[0] 其次再根据列表索引进行点击
1六、操做滚动条
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
1七、出现错误“1 Argument requered,but only 0present”
要求的是一个参数,可是如今有0个参数,
解决:查看封装的关键字出现问题,参数不对应,
1八、出现”message:unknow error:cannot read propety ‘click’ of undefind
缘由:元素没有出现,进行点击,会出现错误,元素没有加载完成
在要操做的脚本前面添加一个等待时间便可
1九、用例失败后自动退出驱动
封装一个关键字:‘退出进程’
内容为: 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
2一、Click不能使用状况
在ie中有时候会遇到点击不了的对象,能够试试下列语句
press key \\13
press key \\10
2二、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]
2三、在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]}
2四、获得元素列表,在进行点击
遇到有多个html标签type=button或者列表的属性同样,用普通的定位
不能定位到,可使用:先获得列表,在根据索引进行点击
1) 好比页面内有多个input标签,按钮,属性都是type=button,要点击第二个按钮,
2) @{x} get webelements css:input[type=button]
经过定位获得input按钮集合
3) Click element @{x}[1]
点击第二个按钮(如需点击其余的按钮,只需更改标黄的索引值便可)
2五、使用命令关闭全部的浏览器
封装关键字
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
2六、须要点击随机元素
1) @{x} get webelements id=kw 获得全部id=kw的元素
2) ${y} evaluate random.randint(‘1,10’) random 获得随机数
3) Click element @{x}[${y}] 点击随机元素
2七、定位错误:Elementnot ninteractable exception:connot click on element
元素没法点击,个人是定位方式不同,使用css定位获得元素列表,再点击
或者换一种定位方式
2八、左侧的收缩菜单栏点开后不能收缩
由于收缩栏的定位,在点开前和点开后是不同的,须要分别写,从新点击便可收缩,(我开始一直用的同样的定位,因此老是不能点击收缩)
2九、使用rf进行解压文件
1) 首先把WinRAR的地址C:\Program Files\WinRAR添加环境变量path中
2) 建立关键字,进行调用
30、在rf中输入中文,在python值出现错误
1、方法1:
① 在rf中输入汉字:${x} set variable 测试
② 在evaluate中过滤:${y} evaluate r’${x}’
变成:\xe9\x99/这种‘gbk’格式的
③ 传入python
2、方法2:
① 把汉字放到一个列表中,传入python中直接用列表的索引,调用便可(测试可用)
3一、使用${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
3二、使用谷歌提示:element not attched to page document
1) 个人缘由是谷歌浏览器速度太快,在错误的脚本钱添增强制等待
Sleep(3)便可
2) 在网上搜到的的是:因为页面刷新后,须要从新定位元素
3三、使用evaluate调用Python中的os注意
注意:
地址必须是:左斜线、单斜线
名称:不能使用中文,用英文
3四、错误element is not clickable at point解决方法
点击报错
使用Selenium时,触发点击事件,常常报以下异常:
Element is not clickable at point
缘由及解决方法
无外乎四种缘由
未加载
没加载出来就等待元素加载出来,再往下执行。
在iframe里
若是元素在iframe里,在窗口里找是找不到元素的,更是没法点击。因此,要切换到iframe里去找元素。
不在视窗里,须要拉滚动条
要点击的元素被覆盖
可使用事件链来解决
例以下拉菜单,经过hover,让子菜单显示,就能够点击了。