Selenium 查找页面元素的方式

Selenium 查找页面元素的方式

Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式:

基本定位方式

  1. 通过ID定位

    python 复制代码
    driver.find_element(By.ID, "element_id")
  2. 通过Name定位

    python 复制代码
    driver.find_element(By.NAME, "element_name")
  3. 通过Class Name定位

    python 复制代码
    driver.find_element(By.CLASS_NAME, "class_name")
  4. 通过Tag Name定位

    python 复制代码
    driver.find_element(By.TAG_NAME, "tag_name")
  5. 通过Link Text定位(精确匹配)

    python 复制代码
    driver.find_element(By.LINK_TEXT, "链接文本")
  6. 通过Partial Link Text定位(部分匹配)

    python 复制代码
    driver.find_element(By.PARTIAL_LINK_TEXT, "部分链接文本")

CSS 选择器定位

python 复制代码
driver.find_element(By.CSS_SELECTOR, "css_selector")

示例:

  • "#id" - 通过ID
  • ".class" - 通过类名
  • "div > input" - 子元素
  • "input[type='text']" - 属性选择器

XPath 定位

python 复制代码
driver.find_element(By.XPATH, "xpath_expression")

示例:

  • "//input" - 所有input元素
  • "//div[@id='main']" - 特定属性的div
  • "//a[contains(text(),'登录')]" - 包含特定文本的链接

查找多个元素

使用find_elements(注意复数形式)返回匹配的所有元素列表:

python 复制代码
elements = driver.find_elements(By.CSS_SELECTOR, ".list-item")

相对定位(Selenium 4新增)

Selenium 4 引入了相对定位器:

python 复制代码
from selenium.webdriver.support.relative_locator import locate_with

password = driver.find_element(By.ID, "password")
email = driver.find_element(locate_with(By.TAG_NAME, "input").above(password))

相对定位方法包括:above(), below(), to_left_of(), to_right_of(), near()

最佳实践

  1. 优先使用ID定位,因为ID通常是唯一的且效率最高
  2. 当ID不可用时,考虑使用CSS选择器
  3. XPath功能强大但执行较慢,应谨慎使用
  4. 对于动态元素,考虑使用显式等待结合定位策略

示例代码

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://example.com")

# 使用显式等待定位元素
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "dynamic-element"))
)

# 使用CSS选择器
submit_button = driver.find_element(By.CSS_SELECTOR, "button.submit-btn")

# 使用XPath
link = driver.find_element(By.XPATH, "//a[contains(@href, 'logout')]")

记得在使用完WebDriver后调用driver.quit()来关闭浏览器和释放资源。

支付宝这一次力度够大的啊,后台看到有人居然领了 20 元,你也来试试

相关推荐
测试员周周5 小时前
【AI测试系统】第6篇:需求扔进去,3 分钟出测试用例?AI测试系统的 RAG 知识增强实战
人工智能·python·功能测试·测试工具·测试用例
测试员周周6 小时前
【AI测试功能2】AI功能测试的“不可确定性“难题与应对思路:从精确断言到统计判定的完整方案
大数据·人工智能·python·功能测试·测试工具·单元测试·测试用例
测试员周周1 天前
【AI测试系统】第5篇:AI 编码工具抛硬币?我们用 LangGraph 做了个“确定性+AI”的测试系统(附自愈架构)
人工智能·python·功能测试·测试工具·架构·langchain·单元测试
弹简特1 天前
【精通Postman接口测试】02-集合变量|环境变量|全局变量,批量运行原来这么简单(附图文+CLI实战)
测试工具·接口测试·postman
DevilSeagull2 天前
电脑上安装的服务会自动消失? 推荐项目: localhostSCmanager. 更好管理你的服务!
测试工具·安全·react·vite·localhost·hono·trpc
Python大数据分析@2 天前
浏览器自动化工具 Selenium,Playwright,Puppeteer 做爬虫有哪些弊病?
爬虫·selenium·自动化
弹简特2 天前
【精通Postman接口测试】01-基础理论+安装使用+项目实战+接口关联(万字图文,零基础保姆级)
测试工具·postman·接口关联
武帝为此3 天前
【Selenium 屏幕截图】
python·selenium·测试工具
武帝为此3 天前
【Selenium 执行 JavaScript】
javascript·selenium·测试工具
llilian_163 天前
晶体频率测试仪 破解晶振品控核心难题:晶体频率网络测试仪深度解析 晶体网络分析仪
网络·功能测试·单片机·嵌入式硬件·测试工具·51单片机