Skip to content

Commit 3cf82e3

Browse files
authored
Auto capture screenshot if test failed (#14)
1 parent 751a295 commit 3cf82e3

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

Examples/log-demo.robot

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ ${HOME_PAGE_URL} http://127.0.0.1:7272
1212
No node found when click
1313
Run Keyword And Expect Error REGEXP:.*No node found for selector: #login_button_error Click Element id:login_button_error
1414

15+
Test log error for sync keywords
16+
Run Keyword And Ignore Error Click Element id:login_button_error
17+
18+
Test log error for async keywords
19+
Run Keyword And Ignore Error Run Async Keywords
20+
... Click Element id:login_button_error AND
21+
... Click Element id:login_button_2
22+
1523
*** Keywords ***
1624
Open browser to test page
1725
${HEADLESS} Get variable value ${HEADLESS} ${False}

PuppeteerLibrary/__init__.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import asyncio
2+
from robot.api.deco import not_keyword
3+
from robot.api import logger
24
from pyppeteer.browser import Browser
5+
from robot.libraries.BuiltIn import BuiltIn
6+
37
from PuppeteerLibrary.custom_elements.SPage import SPage
4-
from robot.api.deco import not_keyword
58
from PuppeteerLibrary.base.robotlibcore import DynamicCore
69
from PuppeteerLibrary.keywords import (
710
AlertKeywords,
@@ -63,6 +66,8 @@ class PuppeteerLibrary(DynamicCore):
6366
async_libraries = []
6467

6568
def __init__(self):
69+
self.run_on_failure_keyword = 'Capture Page Screenshot'
70+
6671
libraries = [
6772
AlertKeywords(self),
6873
BrowserManagementKeywords(self),
@@ -104,3 +109,21 @@ def set_current_page(self, page) -> SPage:
104109
@not_keyword
105110
def get_browser(self) -> Browser:
106111
return self.browser
112+
113+
@not_keyword
114+
def run_keyword(self, name, args, kwargs):
115+
self._running_keyword = name
116+
try:
117+
return DynamicCore.run_keyword(self, name, args, kwargs)
118+
except Exception:
119+
self.failure_occurred()
120+
raise
121+
finally:
122+
self._running_keyword = None
123+
124+
def failure_occurred(self):
125+
try:
126+
BuiltIn().run_keyword(self.run_on_failure_keyword)
127+
except Exception as err:
128+
logger.warn("Keyword '%s' could not be run on failure: %s"
129+
% (self.run_on_failure_keyword, err))

0 commit comments

Comments
 (0)