python行为生成的XML是"格式不正确"

时间:2016-08-13 17:47:32

标签: xml junit elementtree python-behave

我正在使用python表现我运行的大约40个测试。现在,我正试图为自己和我的客户制作一个或多或少看起来像样的HTML报告。

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

基本上,我已经设法做到这一点,除了我必须手动编辑xml,因为它有一些奇怪的字符。在我看来,那些角色真的不应该在那里,并且还试图忽略它们(使用recover = true,例如提到的ParseError: not well-formed (invalid token) using cElementTree)不起作用。 (没有它它会给我一个关于"没有格式良好(无效令牌)"并且使用recover选项它会忽略奇怪字符之后的所有内容的消息,导致一个非常短的测试报告)

我有什么遗失的吗?也许组织或执行我的行为测试中的某些东西会导致这个破碎的XML结果?

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

感谢任何帮助!

Cheerz,

这是一段带有那些奇怪字符的XML: 我看到在这里进行qouting已经使它显示不同,所以我也添加了sublimetext的截图。enter image description here

<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>

1 个答案:

答案 0 :(得分:1)

这看起来像某个地方的错误。了解您的输出中的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依赖的库是bug,或者你用来处理Behave输出的东西,或者表现自己。