0

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

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

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

有什么我想念的吗?也许在我的行为测试的组织或执行中产生了这个损坏的 XML 的结果?

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

任何帮助表示赞赏!

欢呼,

这是一段带有这些奇怪字符的 XML:我看到在这里引用它已经使它的显示有所不同,所以我也添加了 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>
4

1 回答 1

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 本身。

于 2016-08-14T13:00:10.430 回答