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

如何获取无标签包裹文本?Selenium元素定位报错求助

问题解决:Selenium获取文本报错及无标签文本获取方法

一、先解决当前的AttributeError错误

你的代码存在两个核心问题:

  • 方法AddCustomerSuccess未返回找到的元素,调用后得到None,自然无法访问text属性
  • text是元素的属性而非方法,不能加括号调用(.text()是错误写法,正确用法是.text)

修正后的代码如下:

页面类方法修改

# 页面类中的定位器
success_msg_css = "div.alert.alert-success.alert-dismissable"

# 修改方法,返回找到的元素
def AddCustomerSuccess(self):
    return self.driver.find_element(By.CSS_SELECTOR, self.success_msg_css)

调用与断言代码修改

# 获取元素后直接取text属性
success_msg = self.ac.AddCustomerSuccess().text
print("成功提示信息:", success_msg)

# 直接断言更简洁
assert success_msg == "The new customer has been added successfully.", "添加客户成功提示不符"

self.logger.info("************************Test Add customer passed*************************")

二、获取DOM中无标签包裹的文本

如果目标文本是某个元素下未被其他标签包裹的部分(比如带下划线的文本直接在父标签内),可通过执行JavaScript精准获取:

示例代码(假设目标文本是定位元素的第一个无标签子节点):

def AddCustomerSuccess(self):
    element = self.driver.find_element(By.CSS_SELECTOR, self.success_msg_css)
    # 执行JS获取目标子节点的文本,trim()去除首尾空白
    target_text = self.driver.execute_script('return arguments[0].firstChild.textContent.trim();', element)
    return target_text

调用时直接拿到文本:

success_msg = self.ac.AddCustomerSuccess()
print("无标签包裹的目标文本:", success_msg)

若目标文本是元素内的特定无标签部分,可根据DOM结构调整JS代码,比如通过childNodes遍历找到对应节点的文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:40:28