You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium获取WebElement文本为空导致断言失败问题求助

问题解决:Selenium获取元素文本为空及AttributeError问题

一、两个错误的根源与修复

1. AttributeError: 'WebElement' object has no attribute 'title'

WebElement本身没有title属性:

  • 若要获取页面标题,使用driver.title;
  • 若要获取元素的title属性值(比如悬浮提示文本),使用element.get_attribute('title')。

2. AssertionError: '' != 'List Support Tickets'(文本为空)

从以下几个方向排查修复:

(1)修正XPATH语法错误

你的XPATH开头//[@id="root"]缺少元素通配符*,正确写法为//*[@id="root"]。错误的XPATH可能定位到非目标元素,导致获取不到文本。

(2)添加显式等待,确保元素加载完成

页面元素未渲染完毕就被获取时,会出现文本为空的情况。用Selenium显式等待等待元素可见:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 替换原元素定位代码
wait = WebDriverWait(driver, 10)
title_element = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="root"]/section/aside/div/ul/li[2]/span')))
title = title_element.text

(3)改用get_attribute获取文本

部分前端框架会通过CSS动态注入文本,此时.text可能无法读取,改用元素的innerText或textContent属性:

# 二选一尝试
title = title_element.get_attribute('innerText')
# 或者
title = title_element.get_attribute('textContent')

(4)确保元素在视口中

如果元素在侧边栏未滚动区域,先滚动到元素位置:

driver.execute_script("arguments[0].scrollIntoView();", title_element)

修正后的完整测试代码示例

from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import unittest

class RS_firstTestCase(unittest.TestCase):
    def setUp(self):
        # 补充driver初始化(原代码缺失,需确保实例化正确)
        service = Service('path/to/edge_driver.exe')
        self.driver = webdriver.Edge(service=service)
        self.driver.get("你的目标页面URL")

    def test_given_user_on_BO(self):
        driver = self.driver
        # 等待元素可见并获取文本
        wait = WebDriverWait(driver, 10)
        title_element = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="root"]/section/aside/div/ul/li[2]/span')))
        
        # 优先用text,为空则尝试get_attribute
        title = title_element.text
        if not title:
            title = title_element.get_attribute('innerText')
        
        self.assertEqual(title, 'List Support Tickets')

    def tearDown(self):
        self.driver.quit()

内容的提问来源于stack exchange,提问作者Claudio Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:10:20