Selenium自动化测试-----Xpath

上一篇 / 下一篇  2017-06-16 10:54:13 / 个人分类:selenium

Xpath介绍:
      使用路径表达式在XML文档中进行导航,使用路径表达式来选取XML文档中的节点或者节点集。基于XML的树状文档结构,XPath语言右以用于在树中寻找指定的节点 。在XML中的某个节点既可以向前搜索,也可以向后搜索。XPath定位速度要比CSS定位慢。
Xpath的七种节点(XML中的最小构成单位):
      元素element、属性attribute、文本text、命名空间namespace、处理指令processing-instruction、注释comment以及文档节点root。XPath可以用来选择这7种节点,在selenium中最常用的是element.
1、绝对路径(一般不推荐使用):
      例如:WebElement button=driver.findElement(By.XPath("/html/body/div/input[@value='查询']"));
      代码解释:XPath语句以“/”起首表示为绝对路径,从HTML代码的最外层节点逐层查找,最后定位到value值为查询的按钮。
      优点:绝对定位方式可以验证页面是否发生变化。如果页面发生变化,一般会造成原有定位成功的XPath表达式定位失败,由此可以发现见面结构发生了变化。
      缺点:即使页面代码发生了微小变化,也会造成原有的XPath表达式定位失败。
2、相对路径:
     例如:WebElement button=driver.findElement(By.XPath("//input[@value='查询']"));
     代码解释:XPath表达式除了绝对路径以外的其它写法均为相对路径,“//”表示在HTML文档的全部层级位置进行查找,最后定位到文档中所有value值为查询的按钮。
     优点:表达式更加简洁,不管页面发生了何种变化,只要Input的value值 是“查询”,就可以被定位到。
2.1、使用索引号进行定位
     例如:WebElement button=driver.findElement(By.XPath("//input[2]"));
     代码解释:表示查找页面中第二个出现的input元素。需要注意网页HTML代码中是否包含多个层级完全相同的代码结构,若包含多个则会定位到多个页面元素。
     使用:若页面元素经常被发现新增或减少的情况,不建议使用索引号定位的方式,因为页面变化很可能会让使用索引号的XPath表达式定位失败。
2.2、使用页面元素的属性值进行定位
     例如:WebElement button=driver.findElement(By.XPath("//img[@alt='div-img']"));
     代码解释:使用相对定位并使用图片的alt属性值来定位,通过查看HTML代码可获取图片的alt值。
     使用:被测试网页的元素通常包含各种各样的属性值,且很多属性值具有唯一性,若能确认属性值发生变更的可能性很低且具有唯一值,建议使用此方法,元素的属性值被动态生成,即每次看到的页面元素属性值不一样时,不能使用精确属性值的方法进行定位。
2.3、使用模糊的属性值进行定位
     例如:WebElement button=driver.findElement(By.XPath("//img[starts-with@alt,'div-img']"));
     代码解释:使用相对定位查找图片atl属性值开始位置包含“div1-img”关键字的页面元素。
     使用:页面元素的属性值只要有固定不变的几个关键字,即可以使用此方法。
     XPath表达式:contains()包含      starts-with:以。。。开始
2.4、使用XPath轴进行定位
     例如:WebElement button=driver.findElement(By.XPath("//img[@alt="div2-img2"]/parent::div"));
     代码解释:查找到属性值为div2-img2的图片,并基于图片位置找到它上一极的div页面元素。
     使用:使用轴可依据文档树中元素相对位置关系进行定位。先找到一个定位的元素,依据它和要定位元素的相对位置进行定位,可解决一些元素难以定位的问题。
     XPath轴常用的关键字:
          parent              选择当前节点的上层父节点
          child               选择当前节点的下层子节点
          ancestor            选择当前节点所有上层的节点
          descendant          选择当前节点所有下层的节点
          following           选择在当前节点之后显示的所有节点
          following-sibling   选择当前节点的所有平级节点
          preceding           选择当前节点前面的所有节点
          preceding-sibling   选择当前节点前面的所有同级节点
2.5、使用页面元素的文本进行定位
     例如:WebElement button=driver.findElement(By.XPath("//a[text()='开心']"));
     代码解释:查找包含开心的链接页面元素,作用的是精确 匹配方式。
     使用:使用文字匹配模式,为定位复杂的元素提供了一种强大的定位模式,在遇到定位困难时,可优先考虑此方法。
     XPath表达式:text()



TAG:

萧吟的个人空间 引用 删除 萧吟   /   2018-04-26 16:59:59
5
 

评分:0

我来说两句

我的栏目

日历

« 2024-03-05  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 4928
  • 日志数: 6
  • 建立时间: 2013-03-06
  • 更新时间: 2017-06-19

RSS订阅

Open Toolbar