【问题标题】:python behave generates XML that is "Not well-formed"python 行为生成“格式不正确”的 XML
【发布时间】:2016-08-13 17:47:32
【问题描述】:

我在运行大约 40 个测试时使用了 python 行为。现在,我正在尝试为我自己和我的客户制作一份看起来比较体面的 HTML 报告。

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

基本上我已经做到了,除了我必须手动编辑 xml,因为它有一些奇怪的字符。在我看来,这些字符真的不应该存在,并且试图忽略它们(例如使用 recover=true,如提到的ParseError: not well-formed (invalid token) using cElementTree)也不起作用。 (没有它它会给我一条关于“格式不正确(无效令牌)”的消息,并且使用恢复选项它只会忽略奇怪字符之后的所有内容,从而产生非常短的测试报告)

我有什么遗漏吗?也许在我的行为测试的组织或执行中导致了这个损坏的 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>

【问题讨论】:

    标签: xml junit elementtree python-behave


    【解决方案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 所依赖的库有问题,或者你用来处理 Behave 输出的东西,或者 Behave 本身。

    【讨论】:

    • 感谢您的回答。有了这个,我能够解决这个问题。我同意如果它被固定在某个地方而不是我在它周围工作会很好,但对我来说现在这是可以接受的。再次感谢!
    猜你喜欢
    • 2015-09-25
    • 2020-09-17
    • 2019-04-29
    • 2017-09-29
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多