如何阻止Selenium修剪字符串末尾的空格?
解决Selenium获取元素文本时末尾空格被修剪的问题
问题情况
你的页面里有这样一个元素:
<span>Response: </span>
- 这个末尾空格在页面上正常显示,删掉它之后,该元素和后续结果的间距会消失。
- 但用Selenium的
.text属性获取文本时,Chrome和Firefox会自动修剪掉这个末尾空格,Safari却不会,导致断言失败。 - 你当前使用Selenium 4.16.0 + Python 3.12.1,断言代码如下:
response_text = driver.find_element(By.TAG_NAME, "span").text assert response_text == "Response: ", print(f"Endpoint 1 should have returned 'Response: ' but returned '{response_text}'")
- 测试输出结果:
Expected :'Response: ' Actual :'Response:'
解决办法
Selenium的.text属性是按照浏览器渲染后的文本规则返回内容,会自动修剪首尾空格、合并连续空格。要获取原始带空格的文本,可以用以下两种方法:
方法1:获取textContent属性
调用get_attribute("textContent")可以拿到元素的原始文本内容,严格保留所有空格:
response_text = driver.find_element(By.TAG_NAME, "span").get_attribute("textContent") assert response_text == "Response: ", print(f"Endpoint 1 should have returned 'Response: ' but returned '{response_text}'")
方法2:获取innerText属性(部分场景适用)
innerText会保留元素渲染时的空格,虽然不同浏览器可能存在细微差异,但相比.text更能稳定保留末尾空格:
response_text = driver.find_element(By.TAG_NAME, "span").get_attribute("innerText") assert response_text == "Response: ", print(f"Endpoint 1 should have returned 'Response: ' but returned '{response_text}'")
补充说明
textContent会返回元素内所有文本内容(包括隐藏元素的文本),且完整保留原始的空格、换行符等格式。.text是Selenium封装的属性,它模拟用户肉眼看到的文本效果,因此会自动处理空格,这就是末尾空格被修剪的原因。
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

