id、name、class、tag
以百度搜索框为例,可以通过以下4种方式来定位元素(分别是id、name、class、tag)
一、通过元素的id属性来定位元素——id是唯一标识(每个id都是不一样的)
用法:input text id=kw ${value}
二、通过元素的name属性来定位元素,name属性不是绝对唯一的
用法:input text name=wd ${value}
三、通过元素的class属性来定位元素,class属性不是绝对唯一的
用法:input text class=s_ipt ${value}
四、通过元素的标签名tag来定位元素,标签名不是绝对唯一的
${tags} get webelements tag=input
input text ${tags}[7] ${value}
通过链接元素的文本内容来定位元素(link、partial link)
click element link=新闻 通过全部文本的值
click element partial link=hao12 通过部分文本的值
通过xpath定位
1.绝对路径定位,从根目录逐级查找(父子关系),这种方式太依赖元素的位置和顺序,稍微调整就会找不到,后期维护成本太高,所以一般不会用绝对定位。(不推荐!)
//*[@id="app"]/div[3]/div[1]/div[2]/div[2]/div[2]/div/div[2]/div[2]/div/div/div[1]/button/span/text()
2.相对路径定位,以//开头,在整个页面中寻找符合定位表达式的元素,不在乎元素的顺序和位置。
路径表达式
@ 选取属性
/ 表示从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
依据文本查找
//*[text()=”发布服务 ”] --在所有标签元素中查找
//span[text()=”发布服务 ”] --只在span标签元素中查找
部分匹配
contains: //span[contains(text(),”发布服务”)]]
not contains: //td[not(contains(@class,'hidden'))]/div/div/span[4]/div/div/span[text()="上架"]
starts-with: //td[starts-with[@class,”ivu-table-column”]]
ends-with: //td[ends-with(@id,"kw")]
and: //span[@class="ivu-progress-text-inner" and contains(text(),'100%')]
父子、兄弟、相邻节点定位方式详解
1.由父节点定位子节点
//div[@class="ivu-table-header"]/table/thead/tr/th
2.由子节点定位父节点
//a[text()="视频资源管理"]/../../..
3.兄弟节点定位
通过父节点获取其兄弟节点
//span[text()="请选择状态"]/../../../div[2]/ul[2]/li[contains(text(),"未上架")]
通过xpath轴 哥哥定位弟弟
following-sibling //span[text()="请选择状态"]/../../following-sibling::div[1]/ul[2]/li[contains(text(),"未上架")]
通过xpath轴 弟弟定位哥哥
preceding-sibling //li[contains(text(),"未上架")]/../../preceding-sibling::div[1]/div/span
页面包含多个相同元素的定位
第一种:先通过get webelements 获取全部,然后按索引去定位
${loc} get webelements //button/span[text()='确定']
click element ${loc} [index]
索引正向是0,1,2.... 反向是-1,-2,比如一共有10个相同的元素,定位第9个,可以用${loc}[8],也可以用${loc}[-2]
第二种:
想定位多个相同元素的最后一个
click element (//button/span[text()='确定'])[last()]
想定位倒数第二个
click element (//button/span[text()='确定'])[last()-1]
想定位第二个
(//button/span[text()='确定'])[2]
css selector
这种方法相对xpath要简洁些,定位速度也要快些,但是学习起来会比较难理解
1.支持ID、Class的定位
input text css=#kw ${value} input text css=.s_ipt ${value}
2.支持任意属性定位
input text css=[name='wd'] ${value}
3.支持标签属性组合定位
input text css=input[name='wd'] ${value}
4.css层级关系
input text css=form#form>span>input ${value}
5.Css Selector模糊匹配
^= 匹配元素属性以什么开头 click button css=input[value^="百度"]
$= 匹配属性以什么结尾 click button css=input[value$="一下"]
*= 匹配属性包含什么值 click button css=input[value*="一下"]