selenium常用元素定位方式

selenium中的定位方式

1、id:根据id来获取元素

2、name:根据元素的name属性定位;

3、tagName:根据元素的标签名定位;

4、className:根据元素的样式class值定位;

5、linkText:根据超链接的文本值定位;

6、partialLinkText:根据超链接的部分文本值定位;

7、cssSelectorcss选择器定位;

8、xpath:通过元素的路径来定位;

 

重点通过介绍xpathcss灵活定位,其他定位方式做简单介绍

 

1.根据id定位:

id:根据id来获取元素,返回单个元素,id值一般是唯一的;

注意id值若是有数字,则可能是动态变态的id值,尝试每次刷新看变化是否固定,若是不固定。不能使用id定位

 

 

2.据元素的name属性

 

3.tagName:根据元素的标签名定位

如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等...。每个元素其实就是一个tag,但是标签往往不是惟一的,所有在实际应用中不常用。下面仅做参考

 

4.className:根据元素的样式class值定位;

 

5.linkText:根据超链接的文本值定位;

 

 

 

 

6.xpath:通过元素的路径来定位;

Xpath的语法:

6.1 绝对路径

必须用”/”起首,是从1开始的,后面紧跟根节点,好比/step/step/…

元素变更后维护成本加大 不推荐使用

举例:

6.2 相对路径

基本用法: //标签名[@属性名=值]

/ :表示根节点

// :表示任意位置

* :表示任意元素,*为通配符,可div、span等标签替换

@ :表示属性,比如class、alt等

. :表示当前节点

.. :表示父亲节点

用法

6.2.1 支持逻辑运算and/or 

//标签名[@属性名=值 and @属性名=值]

6.2.2 //标签名[@属性名=值 or @属性名=值]

6.2.3 找属性://*[@属性=‘属性值’]

6.2.4 找文本值://*[text()='文本值']

6.2.5 模糊查询属性://*[contains(@属性,'属性值')]

6.2.6 元素是动态的,可以使用start-with://*[starts-with(@属性,'开始的值')]

 

6.3 轴定位:/轴名称::节点名称[@属性=值]

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

格式:../ancestor::标签名[顺序值],顺序值是几表示前几辈标签名

例如,一层父节点

例如,两层祖先节点

例如,三层祖先的祖先节点,以此类推

6.3.2 preceding:: 选取当前节点的开始标签之前的所有节点。

格式:../preceding::标签名[顺序值],顺序值是几表示前几位标签名,不区分是否同层级

例如,上一层节点

例如,上两层节点

6.3.3 preceding-sibling:: 前一位,选取当前节点之前的所有同级节点(同级)

格式:../preceding-sibling::标签名[顺序值],顺序值是几表示前几位,范围在同层级内

例如,前1位同级div节点

例如,前1位同级form节点

6.3.4 following:: 当前元素节点标签之后的所有节点

格式:../following::标签名[顺序值],顺序值是几表示后几位,不区分是否同层级

例如,div节点后4层级

6.3.5 following-sibling:: 后一位,选取当前节点之后的所有兄弟节点(同级)

格式:../following-sibling::标签名[顺序值],顺序值是几表示后第几位,范围在同层级内

例如,div节点后2位

6.3.6 parent:: 父节点

格式:/parent::标签名[顺序值],顺序值是几表示第几位父级,只能定位到当前层级的父级

例如:

*代表全部匹配,通常当前唯一节点的父节点只有一个

6.3.7 child:: 子节点

格式:/child::标签名[顺序值],顺序值是几表示第几位子级,只能定位到当前层级的子级

例如,当前层级的第2位子级

 

7. css选择器定位

css表达式:通常写在<head>标签中<style>标签里面,css 选择器不能以数字开头

7.1 基本选择器

7.1.1 标签选择器,标签名,可以多个;

 

7.1.2 分组选择器,选中一组HTML,以 , 来定义,不常用

7.1.3  id选择器,以 #值 来定义

7.1.4  class选择器,以 .值来定义,若有空格,亦可以"."来代替

7.1.5 属性选择器

# 选取具有特定属性的html元素,指定值   [title="ab1"]

# 选取具有特定属性的html元素,不指定值 [title]

# 可以指定标签类型  p[title],不常用

7.2 组合选择器

7.2.1 后代选择器,以空格分隔

 #ab2 p         idab2的元素之下的所有p标签

 #div p          <div> 标签下所有的 p 标签元素

7.2.2 子元素选择器: > 分隔

#ab2 > span     选择idab2 的元素之下的span 标签,要求是直接子元素才可以

#div>p         选择<div>标签中所有<p>子标签元素

7.2.3 相邻兄弟选择器,以 + 定义,选择紧挨在某元素之后的另一元素,要相同父元素

 

7.2.4 后续兄弟选择器,以~定义,选择指定元素之后的所有元素,要相同父标签

#   [title="qlmn"] ~ li           [title="qlmn"]下的所有 li 标签生效

#   div~p                        <div> 标签下的所有相邻兄弟 <p> 标签元素

 

7.3 伪类

# nth-child(n) 匹配属于其父元素的第 N 个子元素(不必指定标签类型)

# nth-last-child(n),如字面意思:倒数第几个标签

# first-child,第一个标签

# last-child,最后一个标签

 

热门相关:我的绝色美女房客   原来你喜欢我呀   我会一直喜欢你   大爱晚成,卯上天价老婆   超能狂兵