学习28 :Web元素定位学习·第一篇

find_element 和 find_elements 区别

  • find_element 是定位一个元素对象,find_elements是定位多个元素对象
  • find_element 得到的是一个WebElement对象,find_elements得到的是列表
  • 如果找不到元素时,find_element报错NoSuch Element Exception,而find_elements得到是一个空列表

八大元素定位方式

  1. 使用网页中F12按键,定位到元素属性
  2. 获取属性:e.get_attribute(“id”)
  3. 不要用可能会动态变化的属性进行元素定位
  • 不规则的字符串,会比较长
  • 纯数字属性
  • 带数字属性
  1. 如果确定我的元素表达式只能找到一个元素
  • 复制表达式到浏览器,command+f
  • find_elements 只有一个元素

定位方式

  • id
driver.get("http://baidu.com")
driver.find_element_by_id("kw")   #定位到一个元素
driver.find_elements_by_id("kw")  #定位到多个元素

#用于帮助定位属性是否存在
if not driver.find_elements_by_id("kwwww")
	print("not kwww")
else:
	print("kwww")
  • name
driver.find_element_by_name("wd")
driver.find_elements_by_name("wd")

可以利用源码中command+f,来查找name是否是唯一的,例如:
在这里插入图片描述

  • class_name
driver.find_element_by_class_name("s_ipt")
driver.find_elements_by_class_name("s_ipt")

注意⚠️:
class_name 定义为一定要注意:中间不能有空格
例如:class_name = bg s_ipt_wr quickdelete-wrap
代码:driver.find_elements_by_class_name(" bg s_ipt_wr quickdelete-wrap")会直接报错,不合法
每一个空格都代表一个 class ,所以该class_name 拥有三个class,只需要定位一个即可。
代码:driver.find_elements_by_class_name("s_ipt_wr ")

  • tag_name
driver.find_element_by_tag_name("input") 
  • link_text : 通过超链接文本进行定位
driver.find_element_by_link_text("新闻")
  • partial_link_text :通过超链接文本的一部分进行定位
driver.find_element_by_link_text("新")  #如果有两个带有“新”的元素,会定位第一个元素

----其实源码中name,id,tag_name,class_name都是使用css_selector进行的定位
在这里插入图片描述


⚠️重点学习:Xpath定位方式

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

一、使用xpath进行元素定位
- 先要获取xpath表达式
1. 通过浏览器右击复制
在这里插入图片描述
2. 自己编写
3. 使用插件

二、绝对定位和相对定位

表达式描述
nodename选取此节点的所有子节点
/从根节点选取,绝对路径
//从匹配选择的当前节点选择文档中的节点,而不考虑她们的位置,相对路径
.选取当前节点
选取当前节点的父节点
@选取属性
  • 绝对路径:
    1. /
    2. 每次从根节点html开始
  • 相对路径:
    1. //
    2. 每次只需从第一个已经找到的节点开始
  • 绝对定位的劣势:
    1. 前端经常变化,加div之类的,下次就不能继续用了
    2. 表达更加繁琐
  • 绝对路径 vs 相对路径:
    1. 自动化测试中,会使用的是相对路径,不会用绝对路径
    2. 绝对路径:从最开始的地方,一层一层进入对应的元素
    3. 相对路径:我已经在某个位置了,不需要从最开始重新进入
    4. 相对路径更加简洁,绝对路径冗余
    5. 绝对路径容错性更差,相对路径更灵活容错性更好
#text()文本不是属性,不需要在前面加 @ 符号
driver.find_element_by_xpath("//a[text()='新闻'")

#通过 xpath contains 定位新闻
driver.find_element("xpath","//a[contains(text(),'新闻')"]

#多个属性组合定位
driver.find_element_by_xpath("//*[@id='kw' and @name='wd' and contains(@class,'s_ipt')")

#通过祖先和父亲进行查找
//span[@id='s_kw_wrap'/input[@class='s_ipt']

#通过子元素找父元素
//input[@class='s_ipt']/..

#通过索引方式:1.索引从1开始;2.括号是为了提高优先级,索引优先级比较高,所以需要括号先进行//input的筛选在进行索引
(//input)[1] 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值