使用Python Selenium统计页面同CLASS_NAME元素数量遇0结果问题求助
Selenium统计消息数量始终返回0的问题排查
我正在为应用编写创建新消息的UI测试,原本计划通过两步断言消息创建成功:
- 第一步统计创建新消息前,页面中拥有相同CLASS_NAME的消息数量
- 第二步统计创建后的数量,验证差值为+1
但第一步就出问题了——用Python Selenium写的统计代码始终返回0,试了所有和消息相关的CLASS_NAME都没用。
相关代码与HTML示例
HTML片段
<div data-v-33228p9f="" data-v-44788nw1="" class="status-card status-card-rejected"> <div data-v-34524d1n="" class="card-header"> <div data-v-7895hewq="" class="card-title"> <div data-v-rs39lmno="" class="card-title-text"> <div data-v-3w9f8wsa="" data-v-3746955y="" class="tooltip" tooltip="message header" position="top">
Python Selenium代码
currentAmountOfMessages = len((driver.find_elements(By.CLASS_NAME, 'card-title'))) print('current amount of messages is:') print (currentAmountOfMessages)
执行结果
current amount of messages is: 0
可能的解决方法
- 等待页面完全渲染:元素可能还没加载完成,用显式等待替代直接查找:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待最多10秒,直到目标元素出现 WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'card-title')) ) currentAmountOfMessages = len(driver.find_elements(By.CLASS_NAME, 'card-title')) - 检查是否存在iframe:如果消息元素嵌套在iframe里,必须先切换到iframe才能查找:
# 定位iframe并切换上下文 iframe = driver.find_element(By.TAG_NAME, 'iframe') driver.switch_to.frame(iframe) # 执行元素统计 currentAmountOfMessages = len(driver.find_elements(By.CLASS_NAME, 'card-title')) # 操作完成后切回主文档 driver.switch_to.default_content() - 修正定位器:用浏览器F12开发者工具搜索
card-title,确认页面中确实存在该类名元素;如果类名带有动态前缀(比如data-v-*),改用CSS选择器匹配包含该类名的元素:currentAmountOfMessages = len(driver.find_elements(By.CSS_SELECTOR, '[class*="card-title"]')) - 检查元素可见性:如果元素初始处于隐藏状态,尝试等待元素可见,或者直接获取所有匹配元素(
find_elements会返回所有符合条件的元素,无论是否可见)
内容的提问来源于stack exchange,提问作者shn
相关产品推荐
相关产品推荐

