一篇文章搞定 selenium元素定位

selenium

元素定位

定义:XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。

下面的例子中红色字体表示使用对应语法获取的元素(或属性)。

  XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:

1、child  选取当前节点的所有子元素

2、parent  选取当前节点的父节点

3、descendant 选取当前节点的所有后代元素(子、孙等)

4、ancestor  选取当前节点的所有先辈(父、祖父等)

5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身

6、ancestor-or-self  选取当前节点的所有先辈(父、祖父等)以及当前节点本身

7、preceding-sibling 选取当前节点之前的所有同级节点

8、following-sibling 选取当前节点之后的所有同级节点

9、preceding   选取文档中当前节点的开始标签之前的所有节点

10、following   选取文档中当前节点的结束标签之后的所有节点

11、self  选取当前节点

12、attribute  选取当前节点的所有属性

13、namespace 选取当前节点的所有命名空间节点

 

following-sibling 选取当前节点之后的所有同级节点,跟preceding-sibling一样都是选取同级同父的节点,只不过following是取对应节点之后的节点,preceding-sibling取的是该节点之前的节点。

 

/AAA/BBB/following-sibling::*    取/AAA/BBB节点的之后的所有同级节点

AAA/BBB/following-sibling::*    取/AAA/BBB节点的之后的所有同级节点

  <AAA>  

     <BBB>  

          <CCC/>  

          <DDD/>  

     </BBB>  

     <XXX>  

          <DDD>  

               <EEE/>  

               <DDD/>  

               <CCC/>  

               <FFF/>  

               <FFF>  

                    <GGG/>  

               </FFF>  

          </DDD>  

     </XXX>  

     <CCC>  

          <DDD/>  

     </CCC>  

   </AAA>

     //CCC/following-sibling::*    选取所有CCC元素的之后所有同级节点

   <AAA>  

     <BBB>  

          <CCC/>  

          <DDD/>  

     </BBB>  

     <XXX>  

          <DDD>  

               <EEE/>  

               <DDD/>  

               <CCC/>  

               <FFF/>  

               <FFF>  

                    <GGG/>  

               </FFF>  

          </DDD>  

     </XXX>  

     <CCC>  

          <DDD/>  

     </CCC>  

   </AAA>

xpath的作用就是两个字“定位”,运用各种方法进行快速准确的定位,推荐两个非常有用的的firefox工具:firebug和xpath checker

一篇文章搞定 selenium元素定位

定位

01依靠自己属性,文本定位

//td[text()='xxx']

//div[contains(@class,'xxx')]

//div[@class='xxx' and @type='xxx']

02依靠父节点定位

//div[@class='xxx']/div

//div[@id='xxx']/div

 

03依靠子节点定位

//div[div[@id='xxx']]

//div[div[@name='xxx']]

04混合型

//div[div[@name='xxx']]/img

//td[a/font[contains(text(),'xxx')]]//input[@type='xxx']

一篇文章搞定 selenium元素定位

xpath的学习-拓展

01 following-sibling

following-sibling即为“选择当前节点之后的所有同级节点”,那么没有加上“sibling”关键字的,搜索的就是之上/之下的所有节点,忽略同级概念,例如:

<div>

<input id="123">

<input>    

</div>

要定位第二个input://input[@id='123']/following-sibling::input

02 preceding-sibling

preceding-sibling的解释是“选取当前节点之前的所有同级节点”,那么没有加上“sibling”关键字的,搜索的就是之上/之下的所有节点,忽略同级概念,                            preceding-sibling和following-sibling是刚好相反的

<div>

<span>text</span>

<input id="123">    

</div>

要定位第二个input://input[@id='123']/preceding-sibling::span

03 contains

和字面意思一样就是包含,例如://div[contains(@class,'xxx')]

04 starts-with

和字面意思一样就是以某某开头,例如://input[starts-with(@class,'xxx')]

05 not

就是否定的意思

比如找一个id不为123的input:input[not[id='123']]

又如找一个文本中不包含xxx字段的span://span[not(contains(text(),'xxx'))]

一篇文章搞定 selenium元素定位

 xpath的学习-补充

01 绝对路径

 html/body/div/span[2]/input[2] 中间结构变化,就失效

02 相对路径

//开始,在整个html source里找,不管在什么位置

03 postition=2position()>3position()<3

例如html:<div id="positions">

<input>

<span>test position()1</span>

<span>test position()2</span>

<span>test position()3</span>

<span>test position()4</span>

<span>test position()5</span>

</input>

</div>

获取第一个span,可以是//div[@id='positions']/span[1],也可以是//div[@id='positions']/span[position()=1]

//div[@id='positions']/span[position()>3]就是定位了test position()4和test position()5

//div[@id='positions']/span[position()<3]就是定位了test position()1和test position()2

04 last()last()-1

以上面的html为例子,获取最后一个span://div[@id='positions']/span[last()]

以上面的html为例子,获取倒数第二个span://div[@id='positions']/span[last()-1]

05 属性定位元素

@class   //div[@class]  有class属性的div

06 属性值定位

//div[@class='xxx']

关注公众号回复1赠送测试书籍

一篇文章搞定 selenium元素定位

回复2赠送测试教程,部分截图

一篇文章搞定 selenium元素定位

一篇文章搞定 selenium元素定位

一篇文章搞定 selenium元素定位

需要其他学习资料或关于转行建议的:

欢迎大家随时加我微信骚扰:

一篇文章搞定 selenium元素定位