元素定位方法

本文详细介绍了Selenium中各种元素定位方法,包括id、name、class、tag、link、partial_link、Xpath和Css定位。重点讲解了Xpath的绝对路径、相对路径、属性值、文本内容和轴定位等方法,以及其在自动化测试中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  1. id定位

语法: find_element_by_id()

例子:

 

根据上图我们可以看出,百度输入框是一个叫<input>的标签(HTML基础知识),里面有类型(type)classnameid,首页我们以id作为查询项,进行元素定位。

因为我们没有做任何操作,所有该打开只是自动打开浏览器并查找元素,下图表示查找到了元素。find_element_by_id表示以id查找。

 

  1. name定位

语法: find_element_by_name()

例子:

 

根据上图我们可以看出,百度输入框是一个叫<input>的标签(HTML基础知识),里面有类型(type)classnameid,首页我们以name作为查询项,进行元素定位。

 

运行结果:因为我们没有做任何操作,所有该打开只是自动打开浏览器并查找元素,下图表示查找到了元素。find_element_by_name表示以name查找。

3. class定位

语法:find_element_by_class_name()

方法同12,不提供案例。

4. tag定位

语法:find_element_by_tag_name()

注意:如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等...。每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,atag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定义方法,仅了解就行。

因此不建议使用。故不提供案例。

5. link定位

语法:find_element_by_link_text()

专门定位文本连接的。

例子:

 

6. partial_link定位

语法:find_element_by_partial_link_text()

注:partial_link_text定位是对link_text定位的补充,partial_like_text为模糊匹配;link_text 全部匹配

partial_link_text定位实现步骤与link_textid定位实现步骤相似。

不提供案例。

7.Xpath元素定位

7.1Xpath介绍

Xpath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快的被开发者采用来当作小型查询语言。

Xpath不是selenium专用,只是作为一种定位手段,为selenium所用。Xpath是一门在xml文档中查找信息的语言。Xpath可用来在xml文档中对元素和属性进行遍历。由于html的层次结构与xml的层次结构天然一致,所以使用Xpath也能够进行html元素的定位。

7.2Xpath打开方式

采用浏览器自带工具进行元素定位。

法1:先确定需要定位元素,然后右键点击“检查”,即出现【htlm】页面,按“Ctrl+f”快捷键出现定位窗口。点击如图图标(Ctrl+Shift+C亦可),再去点击需要定位元素。

法2:在浏览器页面点击右上角“自定义”后点击“更多工具”——>“开发人员工具”即可。后续同第一点。

 

7.3Xpath定位方法

7.3.1绝对路径定位

定义:将Xpath表达式从html的最外层节点,逐层填写,最后定位到操作元素。语句以/开始。

步骤:步骤:选中元素后,在控制器内右键点击“copy”,选择点击“copyallxpath”即能复制出完整路径。

(以慕课网页面为例)

例:/html/body/div[2]/div/div[1]/a/img

复制后按ctrl+f,粘贴后就可以选中该元素,如下图:

注:这种方法,一旦路径有变化会导致定位失败,所以不推荐使用该方式。

7.3.2相对路径定位

绝对路径与相对路径的差别与文件系统中的绝对和相对路径类似,相对路径是只给出元素路径的部分信息,在html的任意层次中寻找符合条件的元素。
语句以//开始。

例://*[@id="logo"]/a/img

 

通过相对路径定位元素,提取的是元素的部分特征,只要提取恰当,能够保证版本间稳定,是进行自动化测试的首选,示例中通过相对路径直接定位,实际使用中会结合属性等其他特征,共同定位。

 

 

7.3.3属性值定位

语法://标签[@属性=”属性值”]

例://a[@class="newcomer js-ad-click hide"]

7.3.4属性值模糊匹配定位

1)starts-with定位

语法://标签[starts-with(属性,’属性值]

例://div[starts-with(@class,'u')]

2)contains定位

语法://标签[start-with(属性,’属性值]

例://a[contains(@href,'setprofile')]

7.3.5文本内容定位

语法://标签[text()=”属性值”]

例://a[text()="专栏"]

 

7.3.6轴定位

轴可定义相对于当前节点的节点集;

 

 

1)parent

 选取当前节点的父节点,也就是当前节点上一级节点。

语法:具体元素/parent::标签

例://a[text()="慕课教程"]/parent::li

2)child

选取当前节点的子节点,也就是当前节点的下一级节点。

语法:具体元素/child::标签

例子://div[contains(@class,'addZ-index')]/child::div[1]

3)ancestor

选取当前节点的所有上层节点

语法:具体元素/ancestor::标签

例://div[contains(@class,'addZ-index')]/ancestor::body

注:ancestor只能找上层节点,如果是上层节点的兄弟节点是找不到的。

4)descendant

选取当前节点的所有下层节点。

语法:具体元素/descendant::标签

例://div[contains(@class,'addZ-index')]/descendant::button

5)following

选取当前节点之后显示的所有节点。

语法:具体元素/following::标签

例://td[@width='50%']/following::div[contains(text(),'行政区域')]

6)following-sibling

选取当前节点之后所有的兄弟(平级)节点

语法:具体元素/following-sibling::标签

例://div[@id="header"]/following-sibling::a

7)preceding

选取当前节点前面所有的节点.

语法:具体元素/preceding::标签

例://div[contains(@class,'container-types')]/preceding::div[@class="bgfff"]

8)preceding-sibling

选取当前节点前面所有兄弟(平级)节点

语法:具体元素/preceding-sibling::标签

例://div[contains(@class,'bg000')]/preceding-sibling::div[@class="bgfff"]

8、Xpath定位拓展

1)定位拓展

使用通过子节点定位父节点

例://a[text()="数据库"]/../..

其中//a[text()="数据库"]代表子节点,//a[text()="数据库"]/..代表含数据库这个的子节点的父节点,//a[text()="数据库"]/../..

则为爷爷节点。

2)布尔定位

Orandnot

以and为例://a[contains(@href,'ki') and @target="_self"]

8.Css元素定位

8.1class定位

语法:标签.class的值

例子:input.s_ipt

8.2id定位

语法:标签.id的值

例子:input#su

8.3其它属性定位

(1)子类定位“>”:通过先定位父类(self),再定位self下的子类

例子:

(2)同级定位“+”: 通过先定位父类(self),再定位self 同级的类

例子:div#m+div#s-hotsearch-wrapper

(3)后代定位 “ ”:通过先定位父类(self),再定位self 后代的类.

……

定位元素目标

CSS

所有元素  

*

所有div元素

div

所有div元素子元素

div>*

根据ID属性获取元素

div#id

根据class属性获取元素

div.class

拥有某个属性的元素

*[href='']

所有div元素的第一个子元素

div>* :first-child

所有拥有子元素adiv元素

无法实现

input的下一个兄弟元素

input+*

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值