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