Xpath定位方法探讨

常用的Xpath定位方法及特点

a.使用绝对路径定位元素

例如:

1 driver.find_element_by_xpath ("/html/body/div/form/input"

这个路径是从网页其实标签<html>开始,一直到要定位的元素的路径。但是如果在要定位的元素与页面开始元素之间的元素有任何的增减,元素定位就会失败

b.使用相对路径定位元素

例如:

1 driver.find_element_by_xpath ("//input")  

  返回查找到的第一个符合条件的元素

相对路径一般只会包含与被定位元素最近的几层元素有关,相对路径写的好的话,页面变动影响最小,而且定位准确。

c.使用索引定位元素,索引的初始值为1

例如:

1 driver.find_element_by_xpath ("//input[2]") 

  返回查找到的第二个符合条件的元素

如果一个页面中有多个相似的元素,或是一个层下面有多个同样的元素的时候,需要用索引的方法来定位,否则无法区分

d.结合属性值来定位元素

例如:

1 driver. find_element_by_xpath ("//input[@id='username']")

属性定位也是比较常用的方法,如果元素中没有常见的id,name,class 等直接有方法可调用的属性,也可以查找元素中是否有其他能唯一标识元素的属性,如果有,就可以用此方法定位

e.使用逻辑运算符,结合属性值定位元素,and和or

例如:

1 driver. find_element_by_xpath ("//input[@id='username' and@name='userID']")

多个属性值联合定位,更能准确定位到元素。并且如果多个相同标签的元素,如果其包含的属性值有不同的,也可以用这个方法区分开来

f.使用属性名定位元素

例如:

1 driver. find_element_by_xpath ("//input[@button]")

此方法可以区分同一种标签,含有不同属性名的元素。定位相对简单一些儿,但也同样存在着无法区分同种标签含有同种属性名的多个元素,这个时候要配合索引定位才行

g.使用部分属性值匹配元素

例如:

1 (a)starts-with()
2 driver. find_element_by_xpath ("//input[stars-with(@id,'user')]")
3 (b)ends-with()
4 driver. find_element_by_xpath ("//input[ends-with(@id,'name')]")
5 (c)contains()
6 例如:driver. find_element_by_xpath
7 ("//input[contains(@id,"ernam")]")

此方法更加灵活,可以定位属性值不太规律,或是部分变动,中间有空格的情况。注:如果属性值中间包含空格,Webdriver 定位的时候容易出错,时而能定位到时而定位不到,所以应该避免用含用空格的属性值定位。可以采用此方法,进行部分属性值定位

h.使用任意属性值匹配元素

例如:

1 driver. find_element_by_xpath ("//input[@*='username']")

此方法相当于模糊查询,只要欲定位的标签,如 input 中任何属性值等于‘username’,就能匹配成功。缺点,可能会匹配含有这个属性值的其他元素,所以我们在定位的时候要查看一下这个元素值在页面中是否唯一

运用Xpath定位元素的思路

a.先看看这个元素是否有明显的,唯一的属性值。如果有,就用相对路径加属性值定位

b.如果要定位的元素不符合上面的特征,元素的属性要么是动态的,要么就不能区分这个元素,或者是属性值中间有空格的。从此元素开始,向它的上一层查找。

c.当遇到一个符合的元素时,对其写xpath,然后再selenium IDE中验证能否定位

d.然后从这个元素开始,一级级往下写,到要定位的元素为止

e。当selenium IDE验证定位成功后,再放到测试用例中去调试运行

猜你喜欢

转载自blog.csdn.net/qq_28284093/article/details/80103837