diff --git a/src/pytest_html/scripts/dom.js b/src/pytest_html/scripts/dom.js index 28ad8c29..89b84762 100644 --- a/src/pytest_html/scripts/dom.js +++ b/src/pytest_html/scripts/dom.js @@ -92,9 +92,10 @@ const dom = { resultBody.querySelector('.col-duration').innerText = duration < 1 ? formatDuration(duration).ms : formatDuration(duration).formatted - if (log) { - resultBody.querySelector('.log').innerHTML = log + // Wrap lines starting with "E" with span.error to color those lines red + const wrappedLog = log.replace(/^E.*$/gm, (match) => `${match}`) + resultBody.querySelector('.log').innerHTML = wrappedLog } else { resultBody.querySelector('.log').remove() } diff --git a/testing/test_integration.py b/testing/test_integration.py index 72862bdb..0aa93a6d 100644 --- a/testing/test_integration.py +++ b/testing/test_integration.py @@ -206,6 +206,9 @@ def test_fail(self, pytester): page = run(pytester) assert_results(page, failed=1) assert_that(get_log(page)).contains("AssertionError") + assert_that(get_text(page, ".summary div[class='log'] span.error")).matches( + r"^E\s+assert False$" + ) def test_xfail(self, pytester): reason = str(random.random())