selenium元素定位

更通俗的理解

经过验证id 、name ,xpath 、css 四种定位方式是可以的,尤其后两种是“万能的”,所以可以解决99%的定位问题。

id 和 name 定位:

 假如把一个元素看作一个人的话,id 和name可以看作一个人的身份证号和姓名。当然,这些属性值是否唯一要看前端工程师如何设计了

 

根据上面的例子,百度输入框可以取id 和name 进行定位。(前提是id 和name 的值在当前页面上是唯一的)

id=kw

name=wd

xpath定位:

假如,一个人没身份证号没名字怎么找呢?想想你是怎么找朋友吃饭的,他手机不通,电话不回呢?直接上他家去呗,那你一定有他家住址,xx市xx区xx路xx号。Xpath就可以通过这种层级关系找到元素。

 

 

百度输入框在整个页面上的位置:

 

1.  Xpath的绝对路径:

/html/body/div[3]/div[1]/div[1]/div[1]/div[1]/form/span[1]/input

我们可以从最外层开始找,html下面的body 下面的第三个div下面的…input 标签.通过一级一级的锁定就找到了想要的元素。

 

2.  Xpath 的相对路径:

绝对路径的用法往往是在我们迫不得已的时候才用的。大多时候相对路径更简便。

2.1.元素本身:

Xpath 同样可以利用元素自身的属性:

Xpath=//*[@id=’kw’]

//表示某个层级下,*表示某个标签名。@id=kw 表示这个元素有个id等于kw。

当然也可以指定标签名:

Xpath=//input[@id=’kw’]

元素本身可以利用的属性就不只局限于id 和name,如:

Xpath= //input[@name='wd']

Xpath= //input[@class='s_ipt']

Xpath= //input[@autocomplete='off']

但要保证这些元素可以唯一识别一个元素。

找上级:

当我们要找的一个人是个刚出生的婴儿,还没起名子也没有入户口(身份证号),但是你会永远跟在你父亲的身边,你的父亲是有唯一的名字和身份证号的,这样我们可以先找到你父亲,自然就找到你的。

元素的上级属性为:

 

找父节点:

Xpath= //span[@class='bg s_ipt_wr quickdelete-wrap']/input

如果父节点没有唯一的属性,可以找祖父节点:

Xpath= //form[@id='form']/span[1]/input

这样一级一级的找上去,知道html,那就是一个绝对路径了。

布尔值写法:

 如果一个人的姓名不是唯一的,身份证号也不是唯一的,但是同时叫张三 并且 身份证号为123 的人却可以唯一的确定一个人。那么可以这样写:

Xpath=//input[@name='wd' and @id='kw']

可以and,当然也可以or:

Xpath=//input[@name='wd' or @id='kw']

 

Xpath 学习地址:http://www.w3school.com.cn/xpath/index.asp

 

Xpath选取节点:

表达式

描述

nodename

选取此节点的所有子节点。

/

从根节点选取。

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

.

选取当前节点。

..

选取当前节点的父节点。

@

选取属性。

 

谓语:

谓语用来查找某个特定的节点或者包含某个指定的值得节点。

谓语被嵌在方括号中。

 

路径表达式

结果

//table//tr[1]

选取属于 table子元素的第一个 tr 元素。

//table//tr[last()]

选取属于 table 子元素的最后一个tr 元素。

//table//tr[last()-1]

选取属于table 子元素的倒数第二个 tr  元素。

//table//tr[position()<3]

选取最前面的两个属于table 元素的子元素的 tr  元素。

//input[@id]

选取所有拥有名为id 的属性的 input 元素。

//input[@id='kw']

选取所有 input 元素,且这些元素拥有值为 kw 的 id 属性。

选取未知节点:

//* 选取文档中的所有元素

//table /* 选取table 元素的所有子元素

//input[@*] 选取所有带有属性的title元素

Xpath 轴:

轴名称

结果

ancestor

选取当前节点的所有先辈(父、祖父等)。

ancestor-or-self

选取当前节点的所有先辈(父、祖父等)以及当前节点本身。

child

选取当前节点的所有子元素。

descendant

选取当前节点的所有后代元素(子、孙等)。

descendant-or-self

选取当前节点的所有后代元素(子、孙等)以及当前节点本身。

following

选取文档中当前节点的结束标签之后的所有节点。

parent

选取当前节点的父节点。

preceding

选取文档中当前节点的开始标签之前的所有节点。

preceding-sibling

选取当前节点之前的所有同级节点。

//table[@class='tab']//child::tr

Xpath 常用函数:

text()://a[span[text()='应用项目查询']]

contains()://a[span[contains(text(),'应用项目查询')]]

normalize-space()://table[@class='tab']//tr[2]/td[normalize-space()='第三方验证']

删除当前节点字符串的开头和结尾的空白,并把内部的所有空白序列替换为一个

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值