如何获取无标签包裹文本?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
相关产品推荐
相关产品推荐

