实现元素定位:掌握Selenium八大定位方法

文章目录

  • [0. 八大定位方法](#0. 八大定位方法)
  • [1. id](#1. id)
  • [2. name](#2. name)
  • [3. xpath](#3. xpath)
  • [4. css_selector](#4. css_selector)

0. 八大定位方法

当实现测试自动化,编写测试用例时,首先需要在web界面找到对应元素位置,而Selenium提供了一套对应的API,被封装在WebDriver类中。如下图,分别对应八种定位方法。下面再详细介绍。

  1. By.ID:通过元素的 ID 查找。
  2. By.NAME:通过元素的 name 属性查找。
  3. By.XPATH:通过 XPath 表达式查找。
  4. By.LINK_TEXT:通过链接文本查找。
  5. By.PARTIAL_LINK_TEXT:通过链接的部分文本查找。
  6. By.TAG_NAME:通过元素的标签名查找。
  7. By.CLASS_NAME:通过元素的类名查找。
    By.CSS_SELECTOR:通过 CSS 选择器查找。

1. id

从浏览器获得元素ID

1.F12打开当前页面控制台

2.可以打开元素,进行查找,也可以点击左上角箭头,再点击web页面上需要的元素,如图

python 复制代码
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()  # 创建Chrome浏览器实例,可以通过实例操控浏览器
driver.get('http://www.baidu.com')  # get可以打开一个url
sleep(2)
#  find_element是webdriver中的方法,用来查找网页元素
#  By.ID是一个定位器,ID就是通过ID的方法定位,'kw'就是元素id
#  send_keys也是以恶搞方法,可以用例输入内容
driver.find_element(By.ID, 'kw').send_keys('selenium')
sleep(2)
#  click是webdriver中的方法,表示点击事件
driver.find_element(By.ID, 'su').click()
sleep(2)
#  退出
driver.quit()

2. name

除了id,还可以使用name标签,使用起来和name一样,但是需要注意web页面元素name理论上不要重复,但是是可以重复的,所以获得是当前页面的第一个name标签元素。

python 复制代码
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()  # 创建Chrome浏览器实例,可以通过实例操控浏览器
driver.get('http://www.baidu.com')  # get可以打开一个url
sleep(2)
#  find_element是webdriver中的方法,用来查找网页元素
#  By.NAME是一个定位器,NAME就是通过NAME的方法定位,'wd'就是元素name
#  send_keys也是以恶搞方法,可以用例输入内容
driver.find_element(By.NAME, 'wd').send_keys('selenium')
sleep(2)
#  click是webdriver中的方法,表示点击事件
driver.find_element(By.ID, 'su').click()
sleep(2)
#  退出
driver.quit()

3. xpath

xpath是通过路径的方式获得元素的,一般通过id和name的方式获得元素位置,这是非常简单的,但有时我们无法获得id和name,就可以通过xpath,xpath基本上可以获得任何元素的精准位置,但是获得的速度相对来说比较慢,而且使用xpath获得元素位置,当页面进行修改,元素位置发生改变,我们前面的脚本有时就需要修改,所以页面如果频繁较大修改,可以减少xpath的使用。

如上图,我们可以通过双击元素,点击'复制',再点击'复制xpath',这里是一个相对路径,下面还有一个完整xpath,这个是绝对路径,绝对路径对页面结构依赖性比较高,定位元素速度不如相对路径。

python 复制代码
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()  # 创建Chrome浏览器实例,可以通过实例操控浏览器
driver.get('http://www.baidu.com')  # get可以打开一个url
sleep(2)
#  find_element是webdriver中的方法,用来查找网页元素
#  By.XPATH是一个定位器,XPATH就是通过XPATH的方法定位,'//*[@id="kw'就是元素xpath
#  send_keys也是以恶搞方法,可以用例输入内容
driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys('selenium')
sleep(2)
#  click是webdriver中的方法,表示点击事件
driver.find_element(By.ID, 'su').click()
sleep(2)
#  退出
driver.quit()

4. css_selector

除了上面三种,还可以通过css选择器进行定位,css选择器的语法比较简洁,使用起来速度比xpath快,可以通过id、name、class等进行定位。例如:id选择器:使用#符号后跟元素的ID属性值来选择元素,如#myElement;类选择器:使用.符号后跟元素的class属性值来选择元素,如.myClass。

当然,还有个简单的方法,直接从浏览器上进行复制,点击【复制selector】:

python 复制代码
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()  # 创建Chrome浏览器实例,可以通过实例操控浏览器
driver.get('http://www.baidu.com')  # get可以打开一个url
sleep(2)
#  find_element是webdriver中的方法,用来查找网页元素
#  By.CSS_SELECTOR是一个定位器
#  send_keys也是以恶搞方法,可以用例输入内容
driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('selenium')
sleep(2)
#  click是webdriver中的方法,表示点击事件
driver.find_element(By.ID, 'su').click()
sleep(2)
#  退出
driver.quit()

以上重点介绍个四种,其实每种使用起来基本上相同,就是各有优劣而已。其他四种就和它们的名字相同,大家可以自行尝试一下。

相关推荐
测试老哥21 小时前
6个步骤实现Postman接口压力测试
自动化测试·软件测试·测试工具·测试用例·接口测试·压力测试·postman
北岛三生1 天前
ISP(图像信号处理器)
图像处理·数码相机·测试工具·计算机视觉·测试用例·模块测试
北岛三生2 天前
Camera tuning flow相机调试流程
图像处理·数码相机·测试工具·模块测试
晋人在秦 老K2 天前
入梦工具箱怎么检测硬件?3步完成CPU-Z跑分测试 硬件检测总出错?图吧工具箱免费功能实测 draw.io 部署指南:私有化流程图服务搭建教程
测试工具·流程图·工具·draw.io
zhangzeyuaaa3 天前
Selenium 超时完全指南:pageLoadTimeout、implicitlyWait 和 scriptTimeout 的深度解析
selenium·测试工具
泛联新安3 天前
如何根据项目需求选择合适的软件测试工具?iUnit智能单元测试平台提供专业化解决方案
c++·测试工具·单元测试
c萱4 天前
软件测试错题笔记
软件测试·数据库·笔记·测试工具·oracle·测试用例
测试开发Kevin5 天前
详解Grafana k6 的阈值(Thresholds)
测试工具·压力测试
kebeiovo5 天前
常用的几种测试工具:selenium,jmeter,jenkins
selenium·测试工具·jmeter
小白学大数据5 天前
应对反爬:使用Selenium模拟浏览器抓取12306动态旅游产品
selenium·测试工具·旅游