Skip to content

Commit d475703

Browse files
author
Harmanpreet Kaur
committed
Refactor screenshot handling to capture only on test failures and update logging messages
1 parent dcdef64 commit d475703

File tree

2 files changed

+32
-48
lines changed

2 files changed

+32
-48
lines changed

tests/e2e-test/pages/draftPage.py

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,8 @@ def validate_draft_sections_loaded(self):
122122

123123
if not content_loaded:
124124
logger.error(f"❌ Section '{title_text}' still empty after retrying.")
125-
126-
# Optional: take screenshot
127-
screenshot_dir = "screenshots"
128-
os.makedirs(screenshot_dir, exist_ok=True)
129-
screenshot_path = os.path.join(screenshot_dir, f"section_{index + 1}_{title_text.replace(' ', '_')}.png")
130-
try:
131-
section.screenshot(path=screenshot_path)
132-
logger.error(f"📸 Screenshot saved: {screenshot_path}")
133-
except Exception as e:
134-
logger.error(f"❌ Generate click failed in section '{title_text}': {e}")
135-
continue
125+
# Note: Screenshots are only captured on test failures, not during normal page operations
126+
continue
136127

137128
try:
138129
content = content_locator.text_content(timeout=2000).strip()
@@ -586,14 +577,7 @@ def enter_document_title(self, title):
586577

587578
except Exception as e:
588579
logger.error(f"❌ Failed to enter document title: {e}")
589-
# Take screenshot for debugging
590-
try:
591-
screenshot_path = "screenshots/title_input_error.png"
592-
os.makedirs("screenshots", exist_ok=True)
593-
self.page.screenshot(path=screenshot_path)
594-
logger.error(f"📸 Screenshot saved: {screenshot_path}")
595-
except:
596-
pass
580+
# Note: Screenshots are only captured on test failures, not during normal page operations
597581
raise
598582

599583
def click_export_document_button(self):

tests/e2e-test/tests/test_st_docgen_tc.py

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,39 @@
2020
RETRY_DELAY = 3 # seconds
2121

2222

23-
# Helper function to capture screenshots at key steps - reusable across all tests
24-
def capture_screenshot(page, step_name, test_prefix="test"):
23+
# Helper function to capture screenshots only on test failures
24+
def capture_failure_screenshot(page, test_name, error_info=""):
2525
"""
26-
Capture a screenshot and save it to the screenshots directory.
26+
Capture a screenshot when a test fails and save it to the screenshots directory.
2727
2828
Args:
2929
page: Playwright page object
30-
step_name: Name/description of the step being captured
31-
test_prefix: Prefix for the screenshot filename (default: "test")
30+
test_name: Name of the test that failed
31+
error_info: Additional error information to include in filename
3232
"""
3333
try:
3434
from datetime import datetime
35-
screenshots_dir = os.path.join(os.path.dirname(__file__), "..", "screenshots")
35+
screenshots_dir = os.path.join(os.path.dirname(__file__), "..", "screenshots", "failures")
3636
os.makedirs(screenshots_dir, exist_ok=True)
3737

3838
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
39-
screenshot_name = f"{test_prefix}_{step_name}_{timestamp}.png"
39+
error_suffix = f"_{error_info}" if error_info else ""
40+
screenshot_name = f"FAILED_{test_name}{error_suffix}_{timestamp}.png"
4041
screenshot_path = os.path.join(screenshots_dir, screenshot_name)
4142

4243
page.screenshot(path=screenshot_path)
43-
logger.info("📸 Screenshot saved: %s", screenshot_name)
44+
logger.error("📸 Failure screenshot saved: %s", screenshot_name)
4445
except Exception as e:
45-
logger.warning("⚠️ Failed to capture screenshot for %s: %s", step_name, str(e))
46+
logger.warning("⚠️ Failed to capture failure screenshot for %s: %s", test_name, str(e))
47+
48+
49+
# Legacy function - kept for compatibility but updated to do nothing
50+
def capture_screenshot(page, step_name, test_prefix="test"):
51+
"""
52+
Legacy function - now does nothing as screenshots are only captured on failures.
53+
Use capture_failure_screenshot() for test failures.
54+
"""
55+
pass
4656

4757

4858
@pytest.mark.goldenpath
@@ -76,7 +86,6 @@ def test_docgen_golden_path_refactored(login_logout, request):
7686
logger.info("Step 1: Validate home page is loaded and navigating to Browse Page")
7787
start = time.time()
7888
home_page.validate_home_page()
79-
capture_screenshot(page, "step1_home_page", "golden_path")
8089
home_page.click_browse_button()
8190
duration = time.time() - start
8291
logger.info("Execution Time for 'Validate home page and navigate to Browse': %.2fs", duration)
@@ -91,7 +100,6 @@ def test_docgen_golden_path_refactored(login_logout, request):
91100
browse_page.enter_a_question(question)
92101
browse_page.click_send_button()
93102
browse_page.validate_response_status(question_api=question)
94-
capture_screenshot(page, f"step2_{idx}_browse_response", "golden_path")
95103
browse_page.click_expand_reference_in_response()
96104
browse_page.click_reference_link_in_response()
97105
browse_page.close_citation()
@@ -103,9 +111,7 @@ def test_docgen_golden_path_refactored(login_logout, request):
103111
logger.info("Step 4: Navigate to Generate page and delete chat history")
104112
start = time.time()
105113
browse_page.click_generate_button()
106-
capture_screenshot(page, "step4_before_delete_history", "golden_path")
107114
generate_page.delete_chat_history()
108-
capture_screenshot(page, "step4_after_delete_history", "golden_path")
109115
duration = time.time() - start
110116
logger.info("Execution Time for 'Navigate to Generate and delete chat history': %.2fs", duration)
111117

@@ -126,7 +132,6 @@ def test_docgen_golden_path_refactored(login_logout, request):
126132

127133
if latest_response not in [invalid_response, invalid_response1]:
128134
logger.info("[%s] Valid response received on attempt %d", generate_question1, attempt)
129-
capture_screenshot(page, f"step5_generate_response_attempt{attempt}", "golden_path")
130135
question_passed = True
131136
break
132137
else:
@@ -158,7 +163,6 @@ def test_docgen_golden_path_refactored(login_logout, request):
158163
start = time.time()
159164
generate_page.enter_a_question(add_section)
160165
generate_page.click_send_button()
161-
capture_screenshot(page, "step6_add_section_response", "golden_path")
162166
duration = time.time() - start
163167
logger.info("Execution Time for 'Add Section Prompt': %.2fs", duration)
164168

@@ -167,7 +171,6 @@ def test_docgen_golden_path_refactored(login_logout, request):
167171
start = time.time()
168172
generate_page.click_generate_draft_button()
169173
draft_page.validate_draft_sections_loaded()
170-
capture_screenshot(page, "step7_draft_sections_loaded", "golden_path")
171174
duration = time.time() - start
172175
logger.info("Execution Time for 'Generate Draft and Validate Sections': %.2fs", duration)
173176

@@ -176,7 +179,6 @@ def test_docgen_golden_path_refactored(login_logout, request):
176179
start = time.time()
177180
browse_page.click_generate_button()
178181
generate_page.show_chat_history()
179-
capture_screenshot(page, "step8_chat_history_shown", "golden_path")
180182
duration = time.time() - start
181183
logger.info("Execution Time for 'Validate chat history is saved': %.2fs", duration)
182184

@@ -238,7 +240,6 @@ def test_browse_generate_tabs_accessibility(login_logout, request):
238240
home_page.open_home_page()
239241

240242
home_page.validate_home_page()
241-
capture_screenshot(page, "step1_home_page", "tc9366")
242243
duration = time.time() - start
243244
logger.info("Execution Time for 'Validate home page is loaded': %.2fs", duration)
244245

@@ -250,7 +251,6 @@ def test_browse_generate_tabs_accessibility(login_logout, request):
250251

251252
# Verify chat conversation elements are present on Browse page
252253
browse_page.validate_browse_page()
253-
capture_screenshot(page, "step2_browse_tab_accessible", "tc9366")
254254

255255
logger.info("Browse tab is visible and enabled")
256256
duration = time.time() - start
@@ -264,7 +264,6 @@ def test_browse_generate_tabs_accessibility(login_logout, request):
264264

265265
# Verify chat conversation elements are present on Generate page
266266
generate_page.validate_generate_page()
267-
capture_screenshot(page, "step3_generate_tab_accessible", "tc9366")
268267

269268
logger.info("Generate tab is visible and enabled")
270269
duration = time.time() - start
@@ -282,7 +281,6 @@ def test_browse_generate_tabs_accessibility(login_logout, request):
282281
"FAILED: 'Generate Draft' button should be disabled on launch before creating a template"
283282

284283
logger.info("✅ Draft button is properly disabled on launch")
285-
capture_screenshot(page, "step4_draft_button_disabled", "tc9366")
286284
duration = time.time() - start
287285
logger.info("Execution Time for 'Verify Draft tab is disabled': %.2fs", duration)
288286

@@ -297,6 +295,11 @@ def test_browse_generate_tabs_accessibility(login_logout, request):
297295

298296
logger.info("Test TC 9366 - Browse and Generate tabs accessibility test completed successfully")
299297

298+
except Exception as e:
299+
# Capture screenshot only on failure
300+
capture_failure_screenshot(page, "test_browse_generate_tabs_accessibility", "exception")
301+
logger.error(f"Test failed with exception: {str(e)}")
302+
raise
300303
finally:
301304
logger.removeHandler(handler)
302305

@@ -347,7 +350,6 @@ def test_draft_tab_accessibility_after_template_creation(login_logout, request):
347350
start = time.time()
348351
home_page.open_home_page()
349352
home_page.validate_home_page()
350-
capture_screenshot(page, "step1_home_page", "tc9369")
351353
logger.info("✅ Login successful and 'Document Generation' page is displayed")
352354
duration = time.time() - start
353355
logger.info("Execution Time for Step 1: %.2fs", duration)
@@ -357,7 +359,6 @@ def test_draft_tab_accessibility_after_template_creation(login_logout, request):
357359
start = time.time()
358360
home_page.click_browse_button()
359361
browse_page.validate_browse_page()
360-
capture_screenshot(page, "step2_browse_page", "tc9369")
361362
logger.info("✅ Chat conversation page is displayed")
362363
duration = time.time() - start
363364
logger.info("Execution Time for Step 2: %.2fs", duration)
@@ -371,7 +372,6 @@ def test_draft_tab_accessibility_after_template_creation(login_logout, request):
371372
logger.info("Send button clicked")
372373
page.wait_for_timeout(3000)
373374
browse_page.validate_response_status(question_api=browse_question1)
374-
capture_screenshot(page, "step3_browse_response", "tc9369")
375375
logger.info("✅ Response is generated with typical sections from promissory notes")
376376
duration = time.time() - start
377377
logger.info("Execution Time for Step 3: %.2fs", duration)
@@ -386,7 +386,6 @@ def test_draft_tab_accessibility_after_template_creation(login_logout, request):
386386
"FAILED: Draft tab should be disabled before template creation"
387387

388388
logger.info("✅ Draft tab should be disabled")
389-
capture_screenshot(page, "step4_draft_tab_disabled", "tc9369")
390389
duration = time.time() - start
391390
logger.info("Execution Time for Step 4: %.2fs", duration)
392391

@@ -397,7 +396,6 @@ def test_draft_tab_accessibility_after_template_creation(login_logout, request):
397396
browse_page.click_generate_button()
398397
page.wait_for_timeout(3000)
399398
generate_page.validate_generate_page()
400-
capture_screenshot(page, "step5_generate_page", "tc9369")
401399
logger.info("✅ Chat conversation page is displayed")
402400
duration = time.time() - start
403401
logger.info("Execution Time for Step 5: %.2fs", duration)
@@ -413,7 +411,6 @@ def test_draft_tab_accessibility_after_template_creation(login_logout, request):
413411
"FAILED: Generate Draft icon should be disabled before template creation"
414412

415413
logger.info("✅ Generate Draft icon is disabled")
416-
capture_screenshot(page, "step6_draft_button_disabled", "tc9369")
417414
duration = time.time() - start
418415
logger.info("Execution Time for Step 6: %.2fs", duration)
419416

@@ -450,7 +447,6 @@ def test_draft_tab_accessibility_after_template_creation(login_logout, request):
450447

451448
if latest_response not in [invalid_response, invalid_response1]:
452449
logger.info("✅ Promissory note is generated on attempt %d", attempt)
453-
capture_screenshot(page, f"step7_promissory_note_attempt{attempt}", "tc9369")
454450
question_passed = True
455451
break
456452
else:
@@ -499,7 +495,6 @@ def test_draft_tab_accessibility_after_template_creation(login_logout, request):
499495

500496
# Verify Draft sections are loaded
501497
draft_page.validate_draft_sections_loaded()
502-
capture_screenshot(page, "step8_draft_section_displayed", "tc9369")
503498

504499
logger.info("✅ 'Generate draft' icon is enabled and Draft section is displayed")
505500
duration = time.time() - start
@@ -518,6 +513,11 @@ def test_draft_tab_accessibility_after_template_creation(login_logout, request):
518513
logger.info("Step 8: Draft section displayed after template creation ✓")
519514
logger.info("="*80)
520515

516+
except Exception as e:
517+
# Capture screenshot only on failure
518+
capture_failure_screenshot(page, "test_draft_tab_accessibility_after_template_creation", "exception")
519+
logger.error(f"Test failed with exception: {str(e)}")
520+
raise
521521
finally:
522522
logger.removeHandler(handler)
523523

0 commit comments

Comments
 (0)