【含进阶】Python+Selenium自动化测试之元素定位

目录

什么是元素定位?

为什么进行元素定位?

初识//F12/Ctrl+Shift+i检查>开发者模式>

如何进行元素定位?

【单数形式定位】

【获取XPATH】

【复数定位】

如何查看当前页面某值的元素个数?

对元素的一些基础操作

【一个简单的小栗子】


什么是元素定位?
  • 通过元素的属性值或者层级结构定位元素
为什么进行元素定位?
  • 就像盲人走路需要导盲棍、导盲犬是一样的(无恶意),当我们通过操作浏览器驱动来对页面进行一些操作的时候,程序是需要知道“怎么走”的,我们需要给他一个方向。
  • 注意:需提前安装好浏览器及其对应版本的驱动,不知道如何操作的移步自动化前期准备之环境搭建
初识<Chrome开发者模式>/<Edge检查>/F12/Ctrl+Shift+i
  • 元素选择器:点击元素选择器之后再点击页面某元素,该元素的代码将会高亮显示
  • 元素面板(Elements):当前页面的源代码
  • 控制台(Console):可进行js代码编写,对页面进行操作(后面会提到)

如何进行元素定位?

八大元素定位法(需要导包)

【单数形式定位】
  • ID值定位---参数为ID值,行业规范内,元素ID在页面内应为唯一值,所以ID定位是较为稳妥的方法
  • NAME值定位---参数为NAME值,在页面内可能会有多个元素name值相同,这时可以选择使用其他方法定位,也可选择复数形式定位
  • TAG_NAME标签名称定位---参数为标签名称,如<input>、<a>等,在一个页面内极少会有唯一的标签名,所以多为复数形式定位
  • CLASS_NAME值定位---参数为CLASS值
  • CLASS_SELECTCSS样式选择器---参数为.CLASS值#ID值
  • LINK_TEXT超链接文本精确定位---参数为<a></a>中间的全部文本
  • PARTIAL_LINK_TEXT超链接文本模糊定位---参数为<a></a>中间的文本(可以是部分文本也可以是全文本
  • XPATH定位---是一种特殊的路径标识语言,可以通过选中元素-copy(复制)-copy XPATH来获取该元素的XPATH属性

【注意】:在使用class值时,如果有多个class值,如:<input class="bg s_btn">,中间有空格时,将空格改为点,即 . 否则会定位失败

# 导入浏览器驱动
from selenium import webdriver
# 导入元素定位By方法
from selenium.webdriver.common.by import By


# 获取浏览器驱动
driver = webdriver.Chrome()
# 通过浏览器驱动定位元素
driver.find_element(By.ID,'ID值')
driver.find_element(By.NAME,'NAME值')
driver.find_element(By.TAG_NAME,'标签名称')
driver.find_element(By.CLASS_NAME,'CLASS值')
driver.find_element(By.CSS_SELECTOR,'.CLASS值或#ID值')
driver.find_element(By.LINK_TEXT,'链接文本')
driver.find_element(By.PARTIAL_LINK_TEXT,'模糊文本')
driver.find_element(By.XPATH,'XPATH值')
【获取XPATH】
  • xpath:相对路径
  • full xpath:绝对路径

【复数定位】
  • 使用复数形式定位,会返回一个列表(数据类型较为特殊的一种列表),这时就需要将返回的列表赋值给一个变量名,再通过元素在页面的索引进行定位
  • 第一种写法---分布式
# 此处省略获取驱动、打开浏览器操作

# 定位页面中的所有<a>标签---返回一个存放特殊数据类型的列表
tag_list = driver.find_elements(By.TAG_NAME,'a')
# 通过索引定位我们需要的那个元素并进行左击操作
tag_list[3].click()
  • 第二种写法---链式编程

# 此处省略获取驱动、打开浏览器操作

# 定位所有<a>标签
driver.find_elements(BY.TAG_NAME,'a')[3].click()
如何查看当前页面某值的元素个数?
  • 在Console中输入document.getElementsByClassName('hello')可查看当前页面class值为hello的所有元素
  • 其他属性(NAME/TAGNAME)等同理
  • length代表数量

在知道如何查看页面同名元素个数后,我们在编写代码之前就可以先查看该属性值元素个数,再决定使用什么方法定位元素。

用单数形式定位多个同名的元素

【注意】:也可用单数形式定位有多个同名的元素,这种情况下,会默认返回定位到的第一个,也就是对定位到的第一个进行操作

对元素的一些基础操作
  • 在我们的日常使用场景中,使用频率最多的也就是左击(比如点击按钮、点击输入框)和输入(比如输入用户名)
  • 那么如何在脚本中实现呢?
  • 左击:click()
  • 模拟键盘输入:send_keys()
【一个简单的小栗子】
  • 通过浏览器驱动打开百度,在百度中搜索“软件测试”
# 获取浏览器驱动
driver = webdriver.Edge()
# 打开百度
driver.get("https://www.baidu.com/")
# 通过ID定位百度输入框,并输入“软件测试”
driver.find_element(By.ID,'kw').send_keys("软件测试")
# 强制时间等待
time.sleep(3)
# 通过class定位百度一下按钮
driver.find_element(By.CLASS_NAME,'bg.s_btn').click()
# 关闭浏览器
driver.quit()
  • 程序运行速度是很快的,而网络速度有时是有限的,为了便于观察页面变化、检测脚本运行效果,也为了避免因为网络或其他非代码错误而发生的异常,我们可以在代码中加一些强制等待,参数的单位是秒。
  • 时间等待、键盘操作、鼠标操作后续还会更新,这里提到的只是基础的操作
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值