简单对象定位——xpath定位

xpath 定位:

 

XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 用
户可是使用这种强大语言在web 应用中定位元素。


XPath 扩展了上面id 和name 定位方式,提供了很多种可能性,比如定位页面上的第三个多选框。

html代码:
<html class="w3c">
<body>
  <div class="page-wrap">
  <div id="hd" name="q">
     <form target="_self" action="http://www.so.com/s">
          <span id="input-container">
             <input id="input" type="text" x-webkit-speech="" autocomplete="off" suggestwidth="501px" >


我们看到的是一个有层级关系页面,下面我看看如果用xpath 来定位最后一个元素。用绝对路径定位:


find_element_by_xpath("/html/body/div[2]/form/span/input")


当我们所要定位的元素很难找到合适的方式时,都可以通这种绝对路径的方式位,缺点是当元素在很多级目录下时,我们不得不要写很长的路径,而且这种方式难以阅读和维护。


相对路径定位:


find_element_by_xpath("//input[@id=’input’]") #通过自身的id 属性定位
find_element_by_xpath("//span[@id=’input-container’]/input") #通过上一级目录的id 属性定位
find_element_by_xpath("//div[@id=’hd’]/form/span/input") #通过上三级目录的id 属性定位
find_element_by_xpath("//div[@name=’q’]/form/span/input")#通过上三级目录的name 属性定位


通过上面的例子,我们可以看到XPath 的定位方式非常灵活和强大的,而且XPath 可以做布尔逻辑运
算,例如://div[@id=’hd’ or @name=’q’]


当然,它的缺陷也非常明显:1、性能差,定位元素的性能要比其它大多数方式差;2、不够健壮,XPath
会随着页面元素布局的改变而改变;3. 兼容性不好,在不同的浏览器下对XPath 的实现是不一样的。
通过我们第一章中介绍的firebug 的HTML 和firePath 可以非常方便的通过XPath 方式对页面元素进
行定位。


打开firefox 浏览器的firebug 插件,点击插件左上角的鼠标箭头,再点击页面上的元素,firebug
插件的HTML 标签页将看到页面代码,鼠标移动到元素的标签上(如图图3.1,<imput>)将显示当前元素的
绝对路径。


                                                      图3.1
 其相对路径为:/html/body/div[5]/div/div/from/input

或者直接在元素上右击弹出快捷菜单,选择Copy XPath,将当前元素的XPath 路径拷贝要脚本本中(如图3.2)。

                                                                       图3.2


firePath 工具的使用就更加方便和快捷了,选中元素后,直接在XPath 的输入框中显示当前元素的XPath 的定位信息(如图3.3)。

 


                                                                      

                                                                        图3.3

 

posted on 2016-12-22 15:14  chenzx0918  阅读(664)  评论(0编辑  收藏  举报

导航