竹笋

首页 » 问答 » 常识 » 千锋分享软件测试之元素定位的重要性
TUhjnbcbe - 2023/6/26 22:13:00

1、元素定位的重要性

2、SELENIUM2中有几种元素定位方法

2.1几种定位方式

2.2.常用的几种:

Id,xpath,className

3、XPATH介绍

备注:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言

3.1示例

示例请打开demo.html,输入/html/body表示选择根目录下html下的body

/body,会看到没有节点可以被选择,因为/如果用在开头的话,表示根目录,而根目录是html节点

3.2介绍

☆/html/div,没有节点可以被选择,因为/如果用在中间,表示绝对路径,是上一个节点的子结点,而html的子节点是head与body

☆/html//div,表示选择根目录下的所有的子孙后代节点中的div节点,//表示相对路径

☆//div,表示选择所有的div节点,可以想想/html//div与//div为什么结果是一样的!

☆//div/div,表示选择所有的div节点的子节点中含有div的节点

☆//div/div/.,表示选择//div/div节点的当前层的节点,与//div/div的结果相同

☆//div/div/..,表示选择//div/div节点的上一层节点,也就是选择一个div节点,该div节点的子节点有div节点。有点绕口,但细细理解,会恍然大悟的

☆//div/div/*,表示选择//div/div的所有子节点,//div/div会有两个匹配出来的节点,但为什么//div/div/*只有一个了呢?这是因为第二个//div/div下面没有子节点了,所以只匹配出来了一个

☆//div[

id=input],表示选择一个id为’input’的div节点

☆//div[

id=input]/input,表示选择一个id为’input’的div节点的input子节点

☆//table//input[

id=user],表示选择table的子孙后代中id为user的input节点

☆//input[

name=identityand

class=Volvo],有的节点,只用一个属性无法定位出来,必须要用到多个属性进行组合定位,用连接符and。这个XPATH表示选择一个name为identity并且class为Volvo的input节点

☆//input[

name=identityor

class=Volvo],这个多属性组合用的是or的连接符,这个XPATH表示选择一个name为identity,或者class为Volvo的节点,所以,这个XPATH匹配出来了4个节点

☆//input[

name=identityor

class=Volvo][1]见图13,我们刚知道了,u//input[

name=identityor

class=Volvo]匹配出4个,我们只需要第一个,怎么办?加index即可://input[

name=identityor

class=Volvo][1],请注意,xpath的index是以1开头的,并不是0,请切记!取最后一个,//input[

name=identityor

class=Volvo][last()]

☆需要特别注意的一个地方:

//table//tr//input,这个匹配出来的,有14个节点,但是如果我们需要取到第一个,怎么办?

有可能会用到://table//tr//input[1],但是我们来看看结果,匹配出来的节点居然是8个,而不是1个,这是因为//table//tr//input[1]是指先匹配出//table下面的所有的tr子孙后代节点,并且再此基础上,再匹配出tr节点的所有的子孙后代中的input结点的第一个,由于tr众多,所以匹配出的结果肯定不是一个,但如何能匹配出1个?也就是说我们需要把众多的tr给固定出一个,这时候再看:

//table//tr[1]//input[1],这时候就只有一个匹配出来的节点,所以,请大家仔细揣摩这里面的区别,细细体会

3.3几个常用函数

1.contains()://div[contains(

id,in)],表示选择id中包含有’in’的div节点

2.text():由于一个节点的文本值不属于属性,比如“baidu”,所以,用text()函数来匹配节点://a[text()=baidu]

3.last():前面已介绍

4.starts-with()://div[starts-with(

id,in)],表示选择以’in’开头的id属性的div节点

5.not()函数,表示否定,//input[

name=‘identity’andnot(contains(

class,‘a’))],表示匹配出name为identity并且class的值中不包含a的input节点。not()函数通常与返回值为trueorfalse的函数组合起来用,比如contains(),starts-with()等,但有一种特别情况请注意一下:我们要匹配出input节点含有id属性的,写法如下://input[

id],如果我们要匹配出input节点不含用id属性的,则为://input[not(

id)]

其实,软件测试是一份深而广的职业,想要真正意义上的精通,要拼上一生的精力。千锋更多的是要让你比其他的入门者更领先一些,实现一步先步步先的优势,让你的起点高一些,起薪高一些,在可触及的范围内,助你一臂之力。

1
查看完整版本: 千锋分享软件测试之元素定位的重要性