selenium的八大元素定位方式

目录

1.什么是元素定位?

2.查看元素信息

3.元素定位方法

3.1.id : 根据标签/元素的id属性值定位

3.2.name:根据标签/元素的name属性值定位

3.3.class_name:根据标签/元素的class_name属性定位

3.4.tag_name:根据标签/元素的tag_name属性值定位

3.7.xpath:根据xpath表达式定位

3.8.css_selector:根据样式表达式进行定位


1.什么是元素定位?

元素:由标签头 + 标签尾 + 标签头和标签尾包括的文本内容;

元素的信息就是指元素的标签名及元素的属性;

元素的层级结构就是指元素之间相互嵌套的层级结构;

元素定位最终就是通过元素的信息或者元素的层级结构来进行元素定位;

总之,元素的某个特征在网页中找到对应的元素,定位元素的目的是为了操作元素,在Web自动化中,定位元素是后续一切操作的前提条件。

2.查看元素信息

在谷歌浏览器(Firefox等浏览器)中,选中元素,右键点击“检查”,即可在“Elements"中查看元素信息。

以百度首页搜索框为例,查看元素信息如下图所示:

3.元素定位方法

webdriver 提供了一系列的对象定位方法,常用的有以下8种:

id定位:根据id来获取元素,返回单个元素,id值一般是唯一的 ;
name定位:根据元素的name属性定位;
class_name定位:根据元素的样式class值定位;
tag_name定位:根据元素的标签名来定位;
link_text定位:根据超链接的文本值定位;
partail_link_text定位:根据超链接的部分文本值定位;
xpath定位:通过元素的路径、属性定位;
css定位:css选择器定位;

我们创建浏览器对象并访问百度首页,以百度首页为例,讲解如何定位元素。

3.1.id : 根据标签/元素的id属性值定位

一般情况下元素的id是唯一的,所以通过这个方法可以很轻松地找到元素。

定位方法:find_element_by_id(id)

不能通过id定义的情况

···id是动态变化的
···不存在id
···id的属性值不唯一
···id中有数字不用

3.2.name:根据标签/元素的name属性值定位

一般情况下元素的名称也是唯一的,所以通过名称可以找到元素。

定位方法:find_element_by_name(name)

3.3.class_name:根据标签/元素的class_name属性定位

根据元素的类名定位元素,需要注意的是作为定位条件的类名必须是唯一的,否则会定位不到想找的元素,当元素有多个类名时, 选择其中一个唯一的类名来定位

定位方法:find_element_by_class_name(class_name)-------注意,这里面只能使用class其中的一个属性值。

3.4.tag_name:根据标签/元素的tag_name属性值定位

根据元素的标签名称来定位元素,因为一个页面上往往有多个同名的标签,所以这种方法的局限性较大。这个方法返回值的类型是一个webelement对象。

定位方法:find_element_by_tag_name(tag_name)

根据元素的链接文本来定位元素,适用于超链接元素,超链接元素的标签是a,在一个页面上,超链接文本一般是唯一的。返回值是一个WebElement对象

定位方法:find_element_by_text_link

根据元素的链接文本的一部分来定位元素,要注意选取的部分文本要唯一,否则定位不到需要找的元素。

定位方法:find_element_by_partial_link_text

3.7.xpath:根据xpath表达式定位

特殊符号表示的含义:

/ :表示根或者子节点

//:任意节点

@ :表示当前的节点的对象

* :表示通配符,只针对标签名

[ ]:相当于过滤器

定位方法:find_element_by_xpath(xpath)

(1)、绝对路径

根据网页中的层级目录递进进行查找对应元素。

(2)、//标签名[@属性名=属性值]

把相对路径和属性结合起来查找对应元素。

(3)、//标签名[text()=值]

如果一个标签有文本,并且文本在页面中是唯一的,可以通过指定文本来定位元素。

(4)、//标签名[contains(@ 属性,值)]

根据标签中包含的部分内容来定位。

(5)、//标签名[starts-with(@ 属性,值)]

根据标签中开头的部分内容来定位。

(6)、//标签名[@ 属性名1=值1 and @ 属性名2=值2]

如果通过一个属性不能准确地定位到元素,可以使用逻辑运算符and来指定多个属性定位元素。

(7)、//标签[@ 属性名=值]/标签名[n]

当通过一个属性不能准确地定位到元素,可以使用逻辑运算符and来指定多个属性来定位元素。

(8)、//标签名[ends-with(@ 属性,值)]------已被移除

3.8.css_selector:根据样式表达式进行定位

(1)、#id:用元素的id属性进行定位

# 创建浏览器对象driver
# 定位百度一下输入框,输入Python
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("python")

(2)、 .class . class:以元素的类名进行定位

如果元素有一个class属性,就通过.class进行定位

如果元素有多个class属性,class类名之间用.来连接

# 创建浏览器对象driver
# 定位百度输入框,输入Python
driver.find_element(By.CSS_SELECTOR, ".s_ipt").send_keys("python")
 
#定位百度一下按钮,这个元素有多个class值,可以指定多个类名定位,也可以选择其中一个唯一的类名来定位
driver.find_element(By.CSS_SELECTOR, ".bg.s_btn").click()

(3)、标签名:以元素的标签的名称进行定位

直接写标签名,前面不需要加任何符号

一般结合其他属性使用

# 创建浏览器对象driver
# 定位百度输入框,输入Python
driver.find_element(By.CSS_SELECTOR, "input").send_keys("python")

(4)、标签名#id:以元素的标签名的名称和id属性进行定位

# 创建浏览器对象driver
# 定位百度输入框,输入Python
driver.find_element(By.CSS_SELECTOR, "input#kw").send_keys("python")

(5)、标签名.class:以元素的标签名的名称和class属性进行定位

# 创建浏览器对象driver
# 定位百度输入框,输入Python
driver.find_element(By.CSS_SELECTOR, "input.s_ipt").send_keys("python")

(6)、[属性名=值]:以属性的值进行定位

# 创建浏览器对象driver
# 定位百度输入框,输入Python
driver.find_element(By.CSS_SELECTOR, "[name='wd']").send_keys("python")

(7)、[属性名1=值1][属性名2=值2]:以属性1的值1和属性2的值2进行定位

# 创建浏览器对象driver
# 定位百度输入框,输入Python
driver.find_element(By.CSS_SELECTOR, "[name='wd']").send_keys("python")

(8)、标签名[属性名=值]:以属性等于一个值进行定位;

标签名[属性名1=值1][属性名2=值2]:多个属性值进行定位

# 创建浏览器对象driver
# 标签和单个属性值进行定位,并发送值
driver.find_element(By.CSS_SELECTOR, "input[name='wd']").send_keys("python")
 
# 标签和多个属性值进行定位,并发送值
driver.find_element(By.CSS_SELECTOR, "input[name='wd']").send_keys("python")

(9)、标签名[属性名*=值]:以属性包含一个值进行定位

# 创建浏览器对象driver
# 定位百度一下按钮,点击
driver.find_element(By.CSS_SELECTOR, "input[value*='百度']").click()

(10)、标签名[属性名^=值]:以属性的开始值进行定位

 # 创建浏览器对象driver
# 定位百度一下按钮,并点击
driver.find_element(By.CSS_SELECTOR, "input[value^='百度']").click()

(11)、标签名[属性名$=值]:以属性的结束值进行定位

# 创建浏览器对象driver
# 定位百度一下按钮,并点击
driver.find_element(By.CSS_SELECTOR, "input[value$='一下']").click()

(12)、标签名 > 子标签[属性名$=值] + 兄弟标签名

# 创建浏览器对象driver
driver.find_element(By.CSS_SELECTOR, '#s-top-left>a[href$="tieba.baidu.com/"] + a').click()

(13)、定义兄弟标签

a、标签名 > 子标签 :first-child

        定位标签下该子标签的第一个子标签

# 创建浏览器对象driver
# 定位百度输入框所在目录下的的第一个标签,输入Python
# 使用fist-child
driver.find_element(By.CSS_SELECTOR, "span#s_kw_wrap>input:first-child").send_keys("Python")

b、标签名 > 子标签 :nth-child(n)

        定位标签下该子标签的第n个子标签

# 创建浏览器对象driver
# 定位百度输入框,输入Python
# 使用nth-child(n)
driver.find_element(By.CSS_SELECTOR, "span#s_kw_wrap>input:nth-child(2)").send_keys("Python")

c、标签名 > 子标签 :last-child

        定位标签下该子标签的最后一个子标签-----慎用

# 创建浏览器对象driver
# 定位百度输入框,输入Python
# 使用last-child
driver.find_element(By.CSS_SELECTOR, "span#s_kw_wrap>input:last-child").send_keys("Python")


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小小怪下士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值