Skip to content

Commit 9b77cb1

Browse files
authored
Merge pull request #5 from qahive/Adjust-log
Support puppeteerlibrary
2 parents 3f38d66 + 9f0b4c1 commit 9b77cb1

File tree

9 files changed

+51
-35
lines changed

9 files changed

+51
-35
lines changed

Examples/CustomExcelParser/CustomExcelParser.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from datetime import datetime
12
from openpyxl.utils import column_index_from_string
23
from openpyxl.utils.cell import coordinate_from_string
34
from ExcelDataDriver.ExcelParser.ABCParserStrategy import ABCParserStrategy
@@ -35,7 +36,6 @@ def parsing_column_indexs(self, ws):
3536
for cell in row:
3637
if (cell.value is not None) and (cell.value in self.DEFAULT_COLUMN_INDEXS):
3738
ws_column_indexs[cell.value] = column_index_from_string(coordinate_from_string(cell.coordinate)[0])
38-
print('Mandatory : '+str(cell.value) + ' : ' + str(cell.coordinate) + ' : ' + str(column_index_from_string(coordinate_from_string(cell.coordinate)[0])))
3939
if len(ws_column_indexs) > 0:
4040
break
4141

@@ -79,7 +79,7 @@ def parsing_column_indexs(self, ws):
7979
ws_column_indexs[column_name] = column_index_from_string(coordinate_from_string(cell.coordinate)[0])
8080
print('Optional : '+str(column_name) + ' : ' + str(cell.coordinate) + ' : ' + str(column_index_from_string(coordinate_from_string(cell.coordinate)[0])))
8181

82-
print('Done parsing column indexes')
82+
print(str(datetime.now())+': Done parsing column indexes')
8383
return ws_column_indexs
8484

8585
def parse_test_data_properties(self, ws, ws_column_indexs):
@@ -93,7 +93,7 @@ def parse_test_data_properties(self, ws, ws_column_indexs):
9393
test_datas.append(test_data)
9494
else:
9595
break
96-
print('Total test datas: ' + str(len(test_datas)))
96+
print(str(datetime.now())+': Total test datas: ' + str(len(test_datas)))
9797
return test_datas
9898

9999
def is_test_data_valid(self, ws_column_indexes, ws_title, row_index, row):
Binary file not shown.

ExcelDataDriver/ExcelParser/ABCParserStrategy.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from datetime import datetime
12
from abc import ABCMeta, abstractmethod
23
from ExcelDataDriver.ExcelTestDataRow.MandatoryTestDataColumn import MANDATORY_TEST_DATA_COLUMN
34
from openpyxl.utils import column_index_from_string
@@ -16,14 +17,13 @@ def __init__(self, main_column_key):
1617
self.maximum_column_index_row = 5
1718
self.main_column_key = main_column_key
1819

19-
def is_ws_column_valid(self, ws, validate_result):
20-
ws_column_indexes = self.parsing_column_indexs(ws)
20+
def is_ws_column_valid(self, ws, ws_column_indexes, validate_result):
2121
diff_column_list = list(set(self.DEFAULT_COLUMN_INDEXS) - set(ws_column_indexes))
2222
if len(diff_column_list) > 0:
2323
validate_result['is_pass'] = False
2424
validate_result['error_message'] += "[" + ws.title + "] Excel column " + ", ".join(
2525
diff_column_list) + " are missing.\r\n"
26-
print("[" + ws.title + "] Excel column " + ", ".join(diff_column_list) + " are missing.")
26+
print(str(datetime.now())+": [" + ws.title + "] Excel column " + ", ".join(diff_column_list) + " are missing.")
2727
return validate_result
2828

2929
@abstractmethod
@@ -44,7 +44,7 @@ def parsing_column_indexs(self, ws):
4444
for cell in row:
4545
if (cell.value is not None) and (cell.value in self.DEFAULT_COLUMN_INDEXS):
4646
ws_column_indexs[cell.value] = column_index_from_string(coordinate_from_string(cell.coordinate)[0])
47-
print('Mandatory : '+str(cell.value) + ' : ' + str(cell.coordinate) + ' : ' + str(column_index_from_string(coordinate_from_string(cell.coordinate)[0])))
47+
print(str(datetime.now())+': Mandatory : '+str(cell.value) + ' : ' + str(cell.coordinate) + ' : ' + str(column_index_from_string(coordinate_from_string(cell.coordinate)[0])))
4848
self.start_row = index + 1
4949
if len(ws_column_indexs) > 0:
5050
break
@@ -59,9 +59,8 @@ def parsing_column_indexs(self, ws):
5959
if (cell.value is not None) and (cell.value not in self.DEFAULT_COLUMN_INDEXS):
6060
field_name = str(cell.value).lower().strip().replace(" ", "_")
6161
ws_column_indexs[field_name] = column_index_from_string(coordinate_from_string(cell.coordinate)[0])
62-
print('Optional : '+field_name + ' : ' + str(cell.coordinate) + ' : ' + str(column_index_from_string(coordinate_from_string(cell.coordinate)[0])))
62+
print(str(datetime.now())+': Optional : '+field_name + ' : ' + str(cell.coordinate) + ' : ' + str(column_index_from_string(coordinate_from_string(cell.coordinate)[0])))
6363
break
64-
print('Done parsing column indexes')
6564
return ws_column_indexs
6665

6766
def parse_test_data_properties(self, ws, ws_column_indexs):
@@ -75,6 +74,6 @@ def parse_test_data_properties(self, ws, ws_column_indexs):
7574
test_datas.append(test_data)
7675
else:
7776
break
78-
print('Total test datas: ' + str(len(test_datas)))
77+
print(str(datetime.now())+': Total test datas: ' + str(len(test_datas)))
7978
return test_datas
8079

ExcelDataDriver/ExcelParser/ExcelTestDataService.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from datetime import datetime
12
from ExcelDataDriver.ExcelParser import ParserContext
23
from ExcelDataDriver.ExcelParser.DefaultParserStrategy import DefaultParserStrategy
34
from ExcelDataDriver.Util.OpenpyxlHelper import OpenpyxlHelper
@@ -33,12 +34,15 @@ def load_test_data(self, filename, custom_parser):
3334
| Open Excel | C:\\Python27\\XLSXRobotTest\\XLSXRobotTest.xlsx |
3435
3536
"""
37+
print(str(datetime.now()) + ': Load test data '+filename)
3638
self.fileName = filename
3739
self.custom_parser = custom_parser
3840

3941
self.ws_test_datas = {}
4042
self.total_datas = []
43+
print(str(datetime.now()) + ': Excel loading....')
4144
self.wb = OpenpyxlHelper.load_excel_file(self.fileName)
45+
print(str(datetime.now()) + ': Excel load finished.')
4246
ExcelTestDataService.parser_strategy = custom_parser
4347
self.parser_context = ParserContext(ExcelTestDataService.parser_strategy)
4448
self.ws_test_datas = self.parser_context.parse(self.wb)
@@ -110,6 +114,7 @@ def __clear_all_test_result(self):
110114
Clear test result for all rerun test cases
111115
:return:
112116
"""
113-
print('Clear test result...')
117+
print(str(datetime.now())+': Clear test result...')
114118
for test_data in self.total_datas:
115119
test_data.clear_test_result()
120+
print(str(datetime.now())+': Clear test result completed')
Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from datetime import datetime
12
from collections import OrderedDict
23

34

@@ -12,30 +13,25 @@ def parse(self, wb):
1213
:return: List of ExcelTestDataRow
1314
"""
1415
validate_result = {'is_pass': True, 'error_message': ''}
15-
16-
# Validate column
17-
print('Validate reference column')
18-
for ws in self.parser_strategy.get_all_worksheet(wb):
19-
validate_result = self.parser_strategy.is_ws_column_valid(ws, validate_result)
20-
if validate_result['is_pass'] is not True:
21-
raise ValueError(validate_result['error_message'])
22-
print('Done validate reference column')
23-
2416
# Parsing test data
25-
print('Parsing reference data')
2617
ws_test_data_rows = OrderedDict()
2718
for ws in self.parser_strategy.get_all_worksheet(wb):
2819
ws_column_indexs = self.parser_strategy.parsing_column_indexs(ws)
20+
21+
validate_result = self.parser_strategy.is_ws_column_valid(ws, ws_column_indexs, validate_result)
22+
if validate_result['is_pass'] is not True:
23+
raise ValueError(validate_result['error_message'])
24+
2925
test_data_rows = self.parser_strategy.parse_test_data_properties(ws, ws_column_indexs)
3026
ws_test_data_rows[ws.title] = test_data_rows
31-
print('Done validate reference data')
27+
print(str(datetime.now())+': Done parse data...')
3228
return ws_test_data_rows
3329

3430
def insert_extra_columns(self, wb, columns):
35-
for ws in list(wb):
31+
for ws in self.parser_strategy.get_all_worksheet(wb):
3632
ws_column_indexs = self.parser_strategy.parsing_column_indexs(ws)
3733
for column in reversed(columns):
3834
if column in ws_column_indexs:
3935
continue
4036
ws.insert_cols(1)
41-
ws['A' + str(self.parser_strategy.start_row)] = column
37+
ws['A' + str(self.parser_strategy.start_row - 2)] = column

ExcelDataDriver/Util/OpenpyxlHelper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class OpenpyxlHelper(object):
55

66
@staticmethod
77
def load_excel_file(filename, data_only=True, keep_vba=False):
8-
return load_workbook(filename=filename, data_only=data_only, keep_vba=keep_vba, read_only=False)
8+
return load_workbook(filename=filename, data_only=data_only, keep_vba=keep_vba, read_only=False, keep_links=False)
99

1010
@staticmethod
1111
def save_excel_file(filename, source_wb):

ExcelDataDriver/__init__.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import sys
2626
import os.path
2727
import shutil
28+
from datetime import datetime
2829
from copy import deepcopy
2930
from datetime import datetime
3031
from robot.libraries.BuiltIn import BuiltIn
@@ -69,6 +70,7 @@ def __init__(self, file=None, main_column_key=None, custom_parser=None, capture_
6970
- ``MAXIMUM_ROW``: Maximum test data row. (default is None)
7071
7172
"""
73+
print(str(datetime.now()) + ': Init RPA ExcelDataDriver Library')
7274
self.ROBOT_LIBRARY_LISTENER = self
7375
self.file = file
7476

@@ -108,6 +110,7 @@ def load_module(self, module):
108110
return __import__(module_path, fromlist=[module])
109111

110112
def start_suite(self, suite, result):
113+
print(str(datetime.now()) + ': start_suite')
111114
"""``Important`` using by local library only."""
112115
if self.manually_test:
113116
return
@@ -139,6 +142,8 @@ def start_suite(self, suite, result):
139142
suite.tests = temp_test_list
140143

141144
def end_suite(self, name, attributes):
145+
print(str(datetime.now()) + ': end_suite')
146+
142147
"""``Important`` using by local library only."""
143148
if self.manually_test:
144149
return
@@ -186,7 +191,6 @@ def _create_data_table(self):
186191
Values are data of this column as array.
187192
"""
188193
# Load xlsx test data file
189-
print('Load excel xlsx test data file')
190194
self.excelTestDataService.load_test_data(self.file, self.custom_parser)
191195
offset_row = BuiltIn().get_variable_value('${OFFSET_ROW}', 0)
192196
maximum_row = BuiltIn().get_variable_value('${MAXIMUM_ROW}', None)
@@ -237,16 +241,13 @@ def _replace_test_case_keywords(self, test_data):
237241
args=self.template_test.keywords.teardown.args)
238242

239243
def _add_test_case_tags(self, test_data):
240-
# print('Set Test case tags')
241244
for tag in test_data.get_testcase_tags():
242245
self.test.tags.add(tag)
243246

244247
def _get_template_args(self, test_data):
245-
# print('Set Template args')
246248
return_args = []
247249
for arg in self.template_keyword.args:
248250
arg = arg.replace('${', '').replace('}', '')
249-
print(arg)
250251
return_args.append(test_data.get_test_data_property(arg))
251252
return return_args
252253

@@ -265,7 +266,6 @@ def _is_same_keyword(self, first, second):
265266
def _capture_screenshot(self):
266267
try:
267268
# Capture selenium screenshot
268-
custom_selenium = CustomSelenium()
269269
today = datetime.now()
270270
date_and_time = today.strftime("%Y%m%d%H%M%S")
271271
screenshot_name = date_and_time + '_' + str(self.screenshot_running_id) + '.png'
@@ -274,10 +274,24 @@ def _capture_screenshot(self):
274274
os.makedirs('./' + ExcelDataDriver.REPORT_PATH + '/screenshots/')
275275
except:
276276
None
277+
278+
# Capture screenshot by selenium
279+
is_capture_success = False
277280
try:
281+
custom_selenium = CustomSelenium()
278282
custom_selenium.capture_full_page_screenshot('./'+ExcelDataDriver.REPORT_PATH+'/screenshots/'+screenshot_name)
283+
is_capture_success = True
279284
except Exception as e:
280-
return str(e)
285+
is_capture_success = False
286+
287+
# Capture screenshot by puppeteer
288+
if is_capture_success is False:
289+
try:
290+
library = BuiltIn().get_library_instance('PuppeteerLibrary')
291+
library.capture_page_screenshot('./'+ExcelDataDriver.REPORT_PATH+'/screenshots/'+screenshot_name, True)
292+
except Exception as e:
293+
return e
294+
281295
return '=HYPERLINK(".//screenshots//' + screenshot_name + '","' + screenshot_name + '")'
282296
except:
283297
return None

requirements.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
inject==3.3.2
2-
openpyxl==2.6.2
3-
Pillow==6.2.1
2+
openpyxl==3.0.5
3+
Pillow>=6.2.1
44
robotframework-seleniumlibrary==4.1.0
5+
robotframework-puppeteerlibrary

setup.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@
4040
platforms='any',
4141
install_requires=[
4242
'inject==3.3.2',
43-
'openpyxl==2.6.2',
43+
'openpyxl==3.0.5',
4444
'setuptools==41.0.1',
45-
'Pillow==6.2.1',
45+
'Pillow>=6.2.1',
4646
'robotframework-seleniumlibrary',
47+
'robotframework-puppeteerlibrary',
4748
],
4849
python_requires='>3.5',
4950
test_suite='nose.collector',

0 commit comments

Comments
 (0)