常用的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验证定位成功后,再放到测试用例中去调试运行