Skip to content

Commit bc37c97

Browse files
Merge pull request #10 from GoWithitRoger/fix-stale-element-reference
fix: Re-find speed test table to prevent stale element error
2 parents 5dd751e + 884e0dd commit bc37c97

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

main.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -520,11 +520,17 @@ def run_speed_test_task(driver: WebDriver, access_code: str) -> Optional[SpeedRe
520520
# Wait directly for the results table to appear
521521
# instead of relying on the run button's state
522522
print("Waiting for gateway results table...")
523-
table_selector = (By.CSS_SELECTOR, "table.grid.table100")
524-
table = WebDriverWait(driver, 90).until(EC.visibility_of_element_located(table_selector))
525-
print("Gateway speed test complete. Parsing results...")
523+
# Use the wait only to confirm the table is ready
524+
WebDriverWait(driver, 90).until(
525+
EC.visibility_of_element_located((By.CSS_SELECTOR, "table.grid.table100"))
526+
)
526527

528+
print("Gateway speed test complete. Parsing results...")
527529
results: SpeedResults = {}
530+
531+
# THE FIX: Re-find the table now to get a fresh reference
532+
table = driver.find_element(By.CSS_SELECTOR, "table.grid.table100")
533+
528534
rows = table.find_elements(By.TAG_NAME, "tr")
529535
for row in rows:
530536
cols = row.find_elements(By.TAG_NAME, "td")

tests/test_selenium_tasks.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,13 @@ def test_speed_test_task_success(mock_wait, mock_sleep, mock_driver):
115115
mock_table = MagicMock()
116116
mock_table.find_elements.return_value = [mock_row_down, mock_row_up]
117117

118-
mock_driver.find_element.return_value = MagicMock() # for run button
118+
# This mock will now handle the final table find, after the wait confirms visibility
119+
mock_driver.find_element.return_value = mock_table
119120

120121
mock_wait.return_value.until.side_effect = [
121122
TimeoutException("No password field"), # First wait for password fails
122123
MagicMock(), # Second wait for run button succeeds
123-
mock_table, # Third wait for results table visibility
124+
True, # Third wait for results table visibility (return value is ignored)
124125
]
125126

126127
results = run_speed_test_task(mock_driver, "test_code")

0 commit comments

Comments
 (0)