@@ -52,7 +52,13 @@ def run(pytester, path="report.html", cmd_flags=None, query_params=None):
52
52
# End workaround
53
53
54
54
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
56
62
finally :
57
63
driver .quit ()
58
64
@@ -88,15 +94,15 @@ def get_text(page, selector):
88
94
89
95
90
96
def 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" )
92
98
93
99
94
100
def get_log (page , test_id = None ):
95
101
# TODO(jim) move to get_text (use .contents)
96
102
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']" )
98
104
else :
99
- log = get_element (page , ".summary div[class='log']" )
105
+ log = get_element (page , "div[class='log']" )
100
106
all_text = ""
101
107
for text in log .strings :
102
108
all_text += text
@@ -195,7 +201,7 @@ def test_skip():
195
201
page = run (pytester )
196
202
assert_results (page , skipped = 1 , total_tests = 0 )
197
203
198
- log = get_text (page , ".summary div[class='log']" )
204
+ log = get_text (page , "div[class='log']" )
199
205
assert_that (log ).contains (reason )
200
206
201
207
def test_skip_function_marker (self , pytester ):
@@ -211,7 +217,7 @@ def test_skip():
211
217
page = run (pytester )
212
218
assert_results (page , skipped = 1 , total_tests = 0 )
213
219
214
- log = get_text (page , ".summary div[class='log']" )
220
+ log = get_text (page , "div[class='log']" )
215
221
assert_that (log ).contains (reason )
216
222
217
223
def test_skip_class_marker (self , pytester ):
@@ -228,15 +234,15 @@ def test_skip():
228
234
page = run (pytester )
229
235
assert_results (page , skipped = 1 , total_tests = 0 )
230
236
231
- log = get_text (page , ".summary div[class='log']" )
237
+ log = get_text (page , "div[class='log']" )
232
238
assert_that (log ).contains (reason )
233
239
234
240
def test_fail (self , pytester ):
235
241
pytester .makepyfile ("def test_fail(): assert False" )
236
242
page = run (pytester )
237
243
assert_results (page , failed = 1 )
238
244
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 (
240
246
r"^E\s+assert False$"
241
247
)
242
248
@@ -352,7 +358,7 @@ def test_function(arg):
352
358
page = run (pytester )
353
359
assert_results (page , error = 1 , total_tests = 0 )
354
360
355
- col_name = get_text (page , ".summary td[class='col-name']" )
361
+ col_name = get_text (page , "td[class='col-name']" )
356
362
assert_that (col_name ).contains ("::setup" )
357
363
assert_that (get_log (page )).contains ("ValueError" )
358
364
@@ -411,7 +417,9 @@ def pytest_html_results_summary(prefix, summary, postfix):
411
417
pytester .makepyfile ("def test_pass(): pass" )
412
418
page = run (pytester )
413
419
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)")
415
423
assert_that (elements ).is_length (3 )
416
424
for element in elements :
417
425
key = re .search (r"(\w+).*" , element .string ).group (1 )
@@ -437,7 +445,7 @@ def pytest_runtest_makereport(item, call):
437
445
pytester .makepyfile ("def test_pass(): pass" )
438
446
page = run (pytester )
439
447
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 )
441
449
442
450
@pytest .mark .parametrize (
443
451
"content, encoded" ,
@@ -460,7 +468,7 @@ def pytest_runtest_makereport(item, call):
460
468
pytester .makepyfile ("def test_pass(): pass" )
461
469
page = run (pytester , cmd_flags = ["--self-contained-html" ])
462
470
463
- element = page .select_one (".summary a[class='col-links__extra text']" )
471
+ element = page .select_one ("a[class='col-links__extra text']" )
464
472
assert_that (element .string ).is_equal_to ("Text" )
465
473
assert_that (element ["href" ]).is_equal_to (
466
474
f"data:text/plain;charset=utf-8;base64,{ encoded } "
@@ -488,7 +496,7 @@ def pytest_runtest_makereport(item, call):
488
496
content_str = json .dumps (content )
489
497
data = b64encode (content_str .encode ("utf-8" )).decode ("ascii" )
490
498
491
- element = page .select_one (".summary a[class='col-links__extra json']" )
499
+ element = page .select_one ("a[class='col-links__extra json']" )
492
500
assert_that (element .string ).is_equal_to ("JSON" )
493
501
assert_that (element ["href" ]).is_equal_to (
494
502
f"data:application/json;charset=utf-8;base64,{ data } "
@@ -512,7 +520,7 @@ def pytest_runtest_makereport(item, call):
512
520
pytester .makepyfile ("def test_pass(): pass" )
513
521
page = run (pytester )
514
522
515
- element = page .select_one (".summary a[class='col-links__extra url']" )
523
+ element = page .select_one ("a[class='col-links__extra url']" )
516
524
assert_that (element .string ).is_equal_to ("URL" )
517
525
assert_that (element ["href" ]).is_equal_to (content )
518
526
@@ -551,7 +559,7 @@ def pytest_runtest_makereport(item, call):
551
559
# assert_that(element.string).is_equal_to("Image")
552
560
# assert_that(element["href"]).is_equal_to(src)
553
561
554
- element = page .select_one (".summary . media img" )
562
+ element = page .select_one (".media img" )
555
563
assert_that (str (element )).is_equal_to (f'<img src="{ src } "/>' )
556
564
557
565
@pytest .mark .parametrize ("mime_type, extension" , [("video/mp4" , "mp4" )])
@@ -579,7 +587,7 @@ def pytest_runtest_makereport(item, call):
579
587
# assert_that(element.string).is_equal_to("Video")
580
588
# assert_that(element["href"]).is_equal_to(src)
581
589
582
- element = page .select_one (".summary . media video" )
590
+ element = page .select_one (".media video" )
583
591
assert_that (str (element )).is_equal_to (
584
592
f'<video controls="">\n <source src="{ src } " type="{ mime_type } "/>\n </video>'
585
593
)
@@ -590,10 +598,8 @@ def test_xdist(self, pytester):
590
598
assert_results (page , passed = 1 )
591
599
592
600
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({})"
597
603
598
604
pytester .makeconftest (
599
605
"""
@@ -628,10 +634,8 @@ def pytest_html_results_table_row(report, cells):
628
634
)
629
635
630
636
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({})"
635
639
636
640
pytester .makeconftest (
637
641
"""
@@ -700,12 +704,10 @@ def pytest_html_results_table_row(report, cells):
700
704
pytester .makepyfile ("def test_pass(): pass" )
701
705
page = run (pytester )
702
706
703
- header_columns = page .select (".summary #results-table-head th" )
707
+ header_columns = page .select ("#results-table-head th" )
704
708
assert_that (header_columns ).is_length (3 )
705
709
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)" )
709
711
assert_that (row_columns ).is_length (3 )
710
712
711
713
@pytest .mark .parametrize ("no_capture" , ["" , "-s" ])
0 commit comments