python 行为生成 XML 即 "Not well-formed"

python behave generates XML that is "Not well-formed"

我正在使用 python 进行我 运行 的大约 40 次测试。现在我正在尝试为我自己和我的客户制作一个或多或少看起来不错的 HTML 报告。

我运行 通过命令行进行测试:behave --junit。 接下来我获取 xml,解析它 (elementtree) 并编写一个 html 文件。

我基本上做到了,只是我必须手动编辑 xml,因为它有一些奇怪的字符。在我看来,那些字符真的不应该存在,而且试图忽略它们(使用 recover=true,例如 ParseError: not well-formed (invalid token) using cElementTree 提到的)也没有用。 (如果没有它,它会给我一条关于 "not well-formed (invalid token)" 的消息,而如果使用恢复选项,它只会忽略奇怪字符后的所有内容,从而生成非常短的测试报告)

有什么我想念的吗?也许我的行为测试的组织或执行中的某些东西导致了这个损坏的 XML?

也许只是了解它们是什么字符,所以我尝试编写代码来替换或删除它们,然后再进行解析会有帮助。

感谢任何帮助!

干杯,

这是 XML 中的一段,上面有那些奇怪的字符: 我看到在这里 qouting 已经让它显示不同所以我也添加了 sublimetext 的屏幕截图。

<testcase classname="screenshots.Features.Aanvraagformulier.Aanvraagformulier" name="Test 02 Veld validatie checken voor enkel veld zakelijke aanvraag" status="failed" time="79.278"><error message="Message: Time out bij t wachten op element met css of element niet gevonden: #pa..." type="NoSuchElementException">
<![CDATA[
Failing step: Given Dat ik ingelogd ben als aanvrager ... failed in 79.278s
Location: Features\Aanvraagformulier.feature:98
Traceback (most recent call last):
  File "c:\python27\lib\site-packagesehave\model.py", line 1456, in run
    match.run(runner.context)
  File "c:\python27\lib\site-packagesehave\model.py", line 1903, in run
    self.func(context, *args, **kwargs)
  File "D:\Chai_Testspul\PythonScripts\sigmaspul\Featureslgemeen\general_steps.py", line 57, in dat_ik_ingelogd_ben
    login(context, email, password)
  File "D:\Chai_Testspul\PythonScripts\sigmaspul\Featureslgemeen\page_commands.py", line 18, in login
    wait_for_css(context.driver, '#passwordInput')
  File "D:\Chai_Testspul\PythonScripts\sigmaspul\Featureslgemeen\page_commands.py", line 44, in wait_for_css
    raise NoSuchElementException('Time out bij t wachten op element met css of element niet gevonden: ' + css)
NoSuchElementException: Message: Time out bij t wachten op element met css of element niet gevonden: #passwordInput

]]>
</error>

这看起来像是某处的错误。查看输出中的 BS 是您期望 \b 的位置,以及 BEL 是您期望的 \a 的位置。问题是反斜杠 + 字母组合会尽可能被解释为控制序列。

这是一个交互式 Python 会话,说明发生了什么:

>>> print "a\bc\qd"
c\qd

\b 被解释为退格键,因此 c 覆盖 a。 (你有一个输出 BS 的终端。)\q 按原样通过,因为 \q 没有形成有意义的控制序列。

现在,看这个:

>>> print r"a\bc\qd"
a\bc\qd

如果你使用r"",那么一切都会通过。

您可以通过将所有这些控制字符替换为它们应该的样子来解决这个问题。那么XML就好了

不过,最终应该从源头上修复该错误。也许 Behave 依赖的库有问题,或者你用来处理 Behave 输出的东西,或者 Behave 本身。