Skip to content

Commit e8a1265

Browse files
committed
Better error-handling for taking screenshots after failures
1 parent f781162 commit e8a1265

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13279,7 +13279,22 @@ def __set_last_page_screenshot(self):
1327913279
and not self.__last_page_screenshot_png
1328013280
):
1328113281
try:
13282-
element = self.driver.find_element(by="tag name", value="body")
13282+
try:
13283+
element = page_actions.wait_for_element_visible(
13284+
self.driver,
13285+
"body",
13286+
"css selector",
13287+
timeout=0.1,
13288+
ignore_test_time_limit=True,
13289+
)
13290+
except Exception:
13291+
element = page_actions.wait_for_element_present(
13292+
self.driver,
13293+
"body",
13294+
"css selector",
13295+
timeout=0.1,
13296+
ignore_test_time_limit=True,
13297+
)
1328313298
try:
1328413299
self.__last_page_screenshot = element.screenshot_as_base64
1328513300
except Exception:

seleniumbase/fixtures/page_actions.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ def wait_for_element_present(
310310
by="css selector",
311311
timeout=settings.LARGE_TIMEOUT,
312312
original_selector=None,
313+
ignore_test_time_limit=False,
313314
):
314315
"""
315316
Searches for the specified element by the given selector. Returns the
@@ -322,14 +323,16 @@ def wait_for_element_present(
322323
by - the type of selector being used (Default: "css selector")
323324
timeout - the time to wait for elements in seconds
324325
original_selector - handle pre-converted ":contains(TEXT)" selector
326+
ignore_test_time_limit - ignore test time limit (NOT related to timeout)
325327
@Returns
326328
A web element object
327329
"""
328330
element = None
329331
start_ms = time.time() * 1000.0
330332
stop_ms = start_ms + (timeout * 1000.0)
331333
for x in range(int(timeout * 10)):
332-
shared_utils.check_if_time_limit_exceeded()
334+
if not ignore_test_time_limit:
335+
shared_utils.check_if_time_limit_exceeded()
333336
try:
334337
element = driver.find_element(by=by, value=selector)
335338
return element
@@ -364,6 +367,7 @@ def wait_for_element_visible(
364367
by="css selector",
365368
timeout=settings.LARGE_TIMEOUT,
366369
original_selector=None,
370+
ignore_test_time_limit=False,
367371
):
368372
"""
369373
Searches for the specified element by the given selector. Returns the
@@ -378,6 +382,7 @@ def wait_for_element_visible(
378382
by - the type of selector being used (Default: "css selector")
379383
timeout - the time to wait for elements in seconds
380384
original_selector - handle pre-converted ":contains(TEXT)" selector
385+
ignore_test_time_limit - ignore test time limit (NOT related to timeout)
381386
@Returns
382387
A web element object
383388
"""
@@ -386,7 +391,8 @@ def wait_for_element_visible(
386391
start_ms = time.time() * 1000.0
387392
stop_ms = start_ms + (timeout * 1000.0)
388393
for x in range(int(timeout * 10)):
389-
shared_utils.check_if_time_limit_exceeded()
394+
if not ignore_test_time_limit:
395+
shared_utils.check_if_time_limit_exceeded()
390396
try:
391397
element = driver.find_element(by=by, value=selector)
392398
is_present = True

0 commit comments

Comments
 (0)