selenium4自动化测试八大定位高级用法
Selenium提供了8种不同的定位方法,分别通过id、name、xpath、class name、tag name、link_text、partial link text及css selector进行定位。在Selenium4.0版本中,定位方法find_element_by_xx被丢弃,采用find_element()方法。具体的使用细节将在本节中详细介绍。
id定位
HTML Tag的id属性值是唯一的,故不存在根据id定位多个元素的情况。以“login.html”页面用户名输入“大牛测试”为例。用户名 id属性值为“dntest”,如下图1-1所示:

“find_element”方法来定位用户名文本框,需传入两个参数,By.ID即通过ID定位元素,另一个参数为id值,代码如下:
name 定位
上图1-1所示,其name属性值为“daniu”,方法By.NAME表示通过name来定位,代码如下:
class定位
以login.html密码框为例,如图1-1所示,其class属性值为“passwd”,在“find_element”方法中参数使用By.CLASS_NAME,另一参数为“passwd”,代码如下:
注意:上例中,用户名也有class属性“f-text phone-input”,因有空格不能直接使用,可以取部分f-text或phone-input进行定位,代码如下:
link_text定位
link_text是以超链接全部名字作为关键字来定位元素的。以login.html页面“上传资料页面”超链接为例如图1-2所示 :

代码如下:
partial_link_text定位
即用超链接文字的部分文本来定位元素,类似数据库的模糊查询。以“上传资料页面”超链接为例,取“上传资料”便可执行,即取超链接全部文本的一个子集。代码如下:
css定位
CSS定位的优点是速度快、语法简洁。图1-3中的内容出自W3School的CSS参考手册。CSS定位的选择器有十几种,在本节中主要介绍几种比较常用的选择器

以class选择器为例,实现用户名框输入“大牛测试”,代码如下:
由上可知id定位语法结构为:#加id名。实现在用户名框输入“大牛测试”,代码如下:
通过常规的标签名称来定位,如用户名框标签为“input”,在标签内部又设置了属性值为“name=’wd’”,测试代码如下。
xpath 定位
1.XPath简介
XPath是XML Path语言的缩写,是一种用来确定XML文档中某部分位置的语言。它在XML文档中通过元素名和属性进行搜索,主要用途是在XML文档中寻找节点。XPath定位比CSS定位有更大的灵活性。XPath可以向前搜索也可以向后搜索,而CSS定位只能向前搜索,但是XPath定位的速度比CSS慢一些。
XPath语言包含根节点、元素、属性、文本、处理指令、命名空间等。以下文本为XML实例文档,用于演示XML的各种节点类型,便于理解XPath。
其中<animalList>为文档节点,也是根节点;<name>为元素节点;type=“mammal”为属性节点。
节点之间的关系:
父节点。每个元素都有一个父节点,如上面的XML示例中,animal元素是name、size,以及action元素的父节点。
子节点。与父节点相反,这里不再赘述。
兄弟节点,有些也叫同胞节点。它表示拥有相同父节点的节点。如上代码所示,name、size和action元素都是同胞节点。
先辈节点。它是指某节点的父节点,或者父节点的父节点,以此类推。如上代码所示,name元素节点的先辈节点有animal和animalList。
后代节点。它表示某节点的子节点、子节点的子节点,以此类推。如上代码所示,animalList元素节点的后代节点有animal、name等。
2.XPath语法
XPath来自于XML,又由于HTML语言的语法和XML比较接近,故XPath也支持定位HTML页面元素。下面以login.html登录为例,采用绝对路径与相对路径演示。网页元素如图1-4所示

(1) 绝对路径即完整的路径,如login.html页面登录框,绝对路径为“html/body/form/input[1]”,完整代码如下:
(2) 相对路径方式,以相对路径 以//开头,从任何元素节点解析,“*”号表示通配符皮匹配任何元素节点,“.”为选取当前节点,“..” 选取当前节点的父节点,实现在login.html页面登录框输入“测试”,代码如下
除以上常规方法定位,部分复杂控件需要采用模糊定位,用 starts-with与contains
starat-with以某个属性值开始,如login.html用户名为例,id为dntest,可取部分id如dnt代码如下:
contains包含某个属性值,如login.html用户名为例,可取部分id如nte,代码如下:
tag_name定位
tag_name定位即通过标签名称定位,常用于复合定位,如图1-5所示,定位标签“form”并打印标签属性值“name”。
