@@ -52,7 +52,13 @@ def run(pytester, path="report.html", cmd_flags=None, query_params=None):
5252 # End workaround
5353
5454 driver .get (f"file:///reports{ path } ?{ query_params } " )
55- return BeautifulSoup (driver .page_source , "html.parser" )
55+ soup = BeautifulSoup (driver .page_source , "html.parser" )
56+
57+ # remove all templates as they bork the BS parsing
58+ for template in soup ("template" ):
59+ template .decompose ()
60+
61+ return soup
5662 finally :
5763 driver .quit ()
5864
@@ -88,15 +94,15 @@ def get_text(page, selector):
8894
8995
9096def is_collapsed (page , test_name ):
91- return get_element (page , f".summary tbody[id$='{ test_name } '] .collapsed" )
97+ return get_element (page , f"tbody[id$='{ test_name } '] .collapsed" )
9298
9399
94100def get_log (page , test_id = None ):
95101 # TODO(jim) move to get_text (use .contents)
96102 if test_id :
97- log = get_element (page , f".summary tbody[id$='{ test_id } '] div[class='log']" )
103+ log = get_element (page , f"tbody[id$='{ test_id } '] div[class='log']" )
98104 else :
99- log = get_element (page , ".summary div[class='log']" )
105+ log = get_element (page , "div[class='log']" )
100106 all_text = ""
101107 for text in log .strings :
102108 all_text += text
@@ -195,7 +201,7 @@ def test_skip():
195201 page = run (pytester )
196202 assert_results (page , skipped = 1 , total_tests = 0 )
197203
198- log = get_text (page , ".summary div[class='log']" )
204+ log = get_text (page , "div[class='log']" )
199205 assert_that (log ).contains (reason )
200206
201207 def test_skip_function_marker (self , pytester ):
@@ -211,7 +217,7 @@ def test_skip():
211217 page = run (pytester )
212218 assert_results (page , skipped = 1 , total_tests = 0 )
213219
214- log = get_text (page , ".summary div[class='log']" )
220+ log = get_text (page , "div[class='log']" )
215221 assert_that (log ).contains (reason )
216222
217223 def test_skip_class_marker (self , pytester ):
@@ -228,15 +234,15 @@ def test_skip():
228234 page = run (pytester )
229235 assert_results (page , skipped = 1 , total_tests = 0 )
230236
231- log = get_text (page , ".summary div[class='log']" )
237+ log = get_text (page , "div[class='log']" )
232238 assert_that (log ).contains (reason )
233239
234240 def test_fail (self , pytester ):
235241 pytester .makepyfile ("def test_fail(): assert False" )
236242 page = run (pytester )
237243 assert_results (page , failed = 1 )
238244 assert_that (get_log (page )).contains ("AssertionError" )
239- assert_that (get_text (page , ".summary div[class='log'] span.error" )).matches (
245+ assert_that (get_text (page , "div[class='log'] span.error" )).matches (
240246 r"^E\s+assert False$"
241247 )
242248
@@ -352,7 +358,7 @@ def test_function(arg):
352358 page = run (pytester )
353359 assert_results (page , error = 1 , total_tests = 0 )
354360
355- col_name = get_text (page , ".summary td[class='col-name']" )
361+ col_name = get_text (page , "td[class='col-name']" )
356362 assert_that (col_name ).contains ("::setup" )
357363 assert_that (get_log (page )).contains ("ValueError" )
358364
@@ -411,7 +417,9 @@ def pytest_html_results_summary(prefix, summary, postfix):
411417 pytester .makepyfile ("def test_pass(): pass" )
412418 page = run (pytester )
413419
414- elements = page .select (".summary__data p:not(.run-count):not(.filter)" )
420+ elements = page .select (
421+ ".additional-summary p"
422+ ) # ".summary__data p:not(.run-count):not(.filter)")
415423 assert_that (elements ).is_length (3 )
416424 for element in elements :
417425 key = re .search (r"(\w+).*" , element .string ).group (1 )
@@ -437,7 +445,7 @@ def pytest_runtest_makereport(item, call):
437445 pytester .makepyfile ("def test_pass(): pass" )
438446 page = run (pytester )
439447
440- assert_that (page .select_one (".summary . extraHTML" ).string ).is_equal_to (content )
448+ assert_that (page .select_one (".extraHTML" ).string ).is_equal_to (content )
441449
442450 @pytest .mark .parametrize (
443451 "content, encoded" ,
@@ -460,7 +468,7 @@ def pytest_runtest_makereport(item, call):
460468 pytester .makepyfile ("def test_pass(): pass" )
461469 page = run (pytester , cmd_flags = ["--self-contained-html" ])
462470
463- element = page .select_one (".summary a[class='col-links__extra text']" )
471+ element = page .select_one ("a[class='col-links__extra text']" )
464472 assert_that (element .string ).is_equal_to ("Text" )
465473 assert_that (element ["href" ]).is_equal_to (
466474 f"data:text/plain;charset=utf-8;base64,{ encoded } "
@@ -488,7 +496,7 @@ def pytest_runtest_makereport(item, call):
488496 content_str = json .dumps (content )
489497 data = b64encode (content_str .encode ("utf-8" )).decode ("ascii" )
490498
491- element = page .select_one (".summary a[class='col-links__extra json']" )
499+ element = page .select_one ("a[class='col-links__extra json']" )
492500 assert_that (element .string ).is_equal_to ("JSON" )
493501 assert_that (element ["href" ]).is_equal_to (
494502 f"data:application/json;charset=utf-8;base64,{ data } "
@@ -512,7 +520,7 @@ def pytest_runtest_makereport(item, call):
512520 pytester .makepyfile ("def test_pass(): pass" )
513521 page = run (pytester )
514522
515- element = page .select_one (".summary a[class='col-links__extra url']" )
523+ element = page .select_one ("a[class='col-links__extra url']" )
516524 assert_that (element .string ).is_equal_to ("URL" )
517525 assert_that (element ["href" ]).is_equal_to (content )
518526
@@ -551,7 +559,7 @@ def pytest_runtest_makereport(item, call):
551559 # assert_that(element.string).is_equal_to("Image")
552560 # assert_that(element["href"]).is_equal_to(src)
553561
554- element = page .select_one (".summary . media img" )
562+ element = page .select_one (".media img" )
555563 assert_that (str (element )).is_equal_to (f'<img src="{ src } "/>' )
556564
557565 @pytest .mark .parametrize ("mime_type, extension" , [("video/mp4" , "mp4" )])
@@ -579,7 +587,7 @@ def pytest_runtest_makereport(item, call):
579587 # assert_that(element.string).is_equal_to("Video")
580588 # assert_that(element["href"]).is_equal_to(src)
581589
582- element = page .select_one (".summary . media video" )
590+ element = page .select_one (".media video" )
583591 assert_that (str (element )).is_equal_to (
584592 f'<video controls="">\n <source src="{ src } " type="{ mime_type } "/>\n </video>'
585593 )
@@ -590,10 +598,8 @@ def test_xdist(self, pytester):
590598 assert_results (page , passed = 1 )
591599
592600 def test_results_table_hook_append (self , pytester ):
593- header_selector = (
594- ".summary #results-table-head tr:nth-child(1) th:nth-child({})"
595- )
596- row_selector = ".summary #results-table tr:nth-child(1) td:nth-child({})"
601+ header_selector = "#results-table-head tr:nth-child(1) th:nth-child({})"
602+ row_selector = "#results-table tr:nth-child(1) td:nth-child({})"
597603
598604 pytester .makeconftest (
599605 """
@@ -628,10 +634,8 @@ def pytest_html_results_table_row(report, cells):
628634 )
629635
630636 def test_results_table_hook_insert (self , pytester ):
631- header_selector = (
632- ".summary #results-table-head tr:nth-child(1) th:nth-child({})"
633- )
634- row_selector = ".summary #results-table tr:nth-child(1) td:nth-child({})"
637+ header_selector = "#results-table-head tr:nth-child(1) th:nth-child({})"
638+ row_selector = "#results-table tr:nth-child(1) td:nth-child({})"
635639
636640 pytester .makeconftest (
637641 """
@@ -700,12 +704,10 @@ def pytest_html_results_table_row(report, cells):
700704 pytester .makepyfile ("def test_pass(): pass" )
701705 page = run (pytester )
702706
703- header_columns = page .select (".summary #results-table-head th" )
707+ header_columns = page .select ("#results-table-head th" )
704708 assert_that (header_columns ).is_length (3 )
705709
706- row_columns = page .select_one (".summary .results-table-row" ).select (
707- "td:not(.extra)"
708- )
710+ row_columns = page .select_one (".results-table-row" ).select ("td:not(.extra)" )
709711 assert_that (row_columns ).is_length (3 )
710712
711713 @pytest .mark .parametrize ("no_capture" , ["" , "-s" ])
0 commit comments